/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) $YEAR OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
validate-group-membership: "false"
group:
readiness:
- include: "readinessState,${HEALTH_CHECK_INDICATOR:tiesExposure}"
+ include: "readinessState,${HEALTH_CHECK_INDICATOR:teivExposure}"
endpoints:
web:
exposure:
BEGIN;
-DROP SCHEMA IF EXISTS ties_model cascade;
-CREATE SCHEMA IF NOT EXISTS ties_model;
-ALTER SCHEMA ties_model OWNER TO topology_exposure_user;
+DROP SCHEMA IF EXISTS teiv_model cascade;
+CREATE SCHEMA IF NOT EXISTS teiv_model;
+ALTER SCHEMA teiv_model OWNER TO topology_exposure_user;
SET default_tablespace = '';
SET default_table_access_method = heap;
-SET ROLE 'topology_exposure_user';
+SET ROLE topology_exposure_user;
-CREATE TABLE IF NOT EXISTS ties_model.hash_info (
+CREATE TABLE IF NOT EXISTS teiv_model.hash_info (
"name" TEXT PRIMARY KEY,
"hashedValue" VARCHAR(63) NOT NULL,
"type" VARCHAR(511)
);
-CREATE TABLE IF NOT EXISTS ties_model.module_reference (
+CREATE TABLE IF NOT EXISTS teiv_model.module_reference (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"domain" TEXT,
"content" TEXT NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_model.entity_info (
+CREATE TABLE IF NOT EXISTS teiv_model.entity_info (
"storedAt" TEXT PRIMARY KEY,
"name" TEXT NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
"attributeNames" jsonb DEFAULT '[]'::jsonb,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
+CREATE TABLE IF NOT EXISTS teiv_model.relationship_info (
"name" TEXT NOT NULL,
"aSideAssociationName" TEXT NOT NULL,
"aSideMOType" TEXT NOT NULL,
"connectSameEntity" BOOLEAN NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
PRIMARY KEY ("name", "moduleReferenceName"),
- FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("bSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("aSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("bSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
CD_classifiers CD_classifiers COLUMN
CD_decorators CD_decorators COLUMN
CD_sourceIds CD_sourceIds COLUMN
verticalBeamWidth verticalBeamWidth COLUMN
\.
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+COPY teiv_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
_3gpp-common-yang-extensions urn:3gpp:sa5:_3gpp-common-yang-extensions \N [] 2019-06-23 bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewogIHlhbmctdmVyc2lvbiAxLjE7CiAgbmFtZXNwYWNlIHVybjozZ3BwOnNhNTpfM2dwcC1jb21tb24teWFuZy1leHRlbnNpb25zIDsKICBwcmVmaXggeWV4dDNncHAgOwoKICBvcmdhbml6YXRpb24gIjNHUFAgU0E1IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZHVsZSBkZWZpbmVzIFlBTkcgZXh0ZW5zaW9ucyBuZWVkZWQgCiAgICAzR1BQIFlBTkcgbW9kZWxpbmcuCgogICAgQ29weXJpZ2h0IChjKSAyMDE5IDNHUFAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgRXh0ZW5zaW9ucyBNVVNUIGJlIGRlZmluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUKICAgIGRlc2NyaXB0aW9uIHN0YXRlbWVudDoKICAgICAgICAtIFdoYXQgaXMgdGhpcyBzdGF0ZW1lbnQuCiAgICAgICAgLSBOZXdsaW5lLAogICAgICAgIC0gVGhpcyBzdGF0ZW1lbnQgY2FuIGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSB4eHggc3RhdGVtZW50cyB3aXRoCiAgICAgICAgY2FyZGluYWxpdHkgeC4ueS4KICAgICAgICAtIFRoaXMgc3RhdGVtZW50IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgc3Vic3RhdGVtZW50cyB3aXRoCiAgICAgICAgY2FyZGluYWxpdHkgeC4ueS4KICAgICAgICAtIE5ld2xpbmUKICAgICAgICAtIElzIGNoYW5naW5nIHRoaXMgc3RhdGVtZW50IGFuIGVkaXRvcmlhbCwgQkMoYmFja3dhcmRzIGNvbXBhdGlibGUpIAogICAgICAgIG9yIE5CQyhub24tQkMpIGNoYW5nZT8KICAgICAgICAtIE5ld2xpbmUuCiAgICAgICAgLSBUaGUgYXJndW1lbnQgaXRzIG1lYW5pbmcgYW5kIHR5cGUuIFByZWZlcmFibHkgdXNlIFlBTkcgdHlwZXMgYW5kCiAgICAgICAgICBjb25zdHJhaW50cyB0byBkZWZpbmUgdGhlIGFyZ3VtZW50J3MgdHlwZS4KCiAgICBBbnkgZXh0ZW5zaW9uIHN0YXRlbWVudCBjYW4gYmUgYWRkZWQgd2l0aCBhCiAgICBkZXZpYXRpb24vZGV2aWF0ZSBhZGQgc3RhdGVtZW50LiBJbiB0aGlzIGNhc2UgdGhlIHJlc3RyaWN0aW9uIGFib3V0CiAgICB0aGUgcGFyZW50IHN0YXRlbWVudCBvZiB0aGUgZXh0ZW5zaW9uIFNIQUxMIGJlIGV2YWx1YXRlZCBiYXNlZCBvbiB0aGUKICAgIHRhcmdldCBvZiB0aGUgZGV2aWF0aW9uIHN0YXRlbWVudC4KCiAgICBTdXBwb3J0IGZvciB0aGlzIG1vZHVsZSBkb2VzIG5vdCBtZWFuIHRoYXQgYSBZQU5HIHNlcnZlciBpbXBsZW1lbnRzCiAgICBzdXBwb3J0IGZvciBlYWNoIG9mIHRoZXNlIGV4dGVuc2lvbnMuCiAgICBJbXBsZW1lbnRlcnMgb2YgZWFjaCBzcGVjaWZpYyBtb2R1bGUgdXNpbmcgYW4gZXh0ZW5zaW9ucyBNVVNUIGNoZWNrCiAgICBpZiB0aGUgc2VydmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIHVzZWQgZXh0ZW5zaW9uLgogICAgTm90ZTogbW9kdWxlcyB1c2UgbWFueSBleHRlbnNpb25zIHdoaWNoIGluZGl2aWR1YWwKICAgIGltcGxlbWVudGF0aW9ucyBNQVkgb3IgTUFZIE5PVCBzdXBwb3J0LgogICAgSWYgc3VwcG9ydCBmb3IgYW4gZXh0ZW5zaW9uIGlzIG1pc3NpbmcgdGhlIGV4dGVuc2lvbiBzdGF0ZW1lbnQgbmVlZHMKICAgIGluZGl2aWR1YWwgaGFuZGxpbmcgb3IgaXQgU0hPVUxEIGJlIHJlbW92ZWQgZnJvbSB0aGUgbW9kdWxlIHVzaW5nCiAgICB0aGUgZXh0ZW5zaW9uIGUuZy4gd2l0aCBhIGRldmlhdGlvbi4KICAgICAgICAgICI7CgogIHJldmlzaW9uICIyMDE5LTA2LTIzIiB7CiAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCB2ZXJzaW9uIjsKICB9CgogIGV4dGVuc2lvbiBpblZhcmlhbnQgewogICAgZGVzY3JpcHRpb24KICAgICAgIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlIGRhdGEgbm9kZSBjYW4gb25seSBiZSBzZXQgd2hlbiBpdHMKICAgICAgcGFyZW50IGRhdGEgbm9kZSBpcyBiZWluZyBjcmVhdGVkLiBUbyBjaGFuZ2UgdGhlIHZhbHVlIGFmdGVyIHRoYXQsIHRoZQogICAgICBwYXJlbnQgZGF0YSBub2RlIG11c3QgYmUgZGVsZXRlZCBhbmQgcmVjcmVhdGVkIHdpdGggdGhlIGRhdGEgbm9kZQogICAgICBoYXZpbmcgdGhlIG5ldyB2YWx1ZS4KCiAgICAgIEl0IGlzIHVubmVjZXNzYXJ5IHRvIHVzZSBhbmQgTVVTVCBOT1QgYmUgdXNlZCBmb3Iga2V5IGxlYWZzLgoKICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgYSBsZWFmLCBsZWFmLWxpc3QsIGxpc3QgCiAgICAgIHN0YXRlbWVudHMgdGhhdCBpcyBjb25maWc9dHJ1ZS4KICAgICAgWmVybyBvciBvbmUgaW5WYXJpYW50IHN0YXRlbWVudCBpcyBhbGxvd2VkIHBlciBwYXJlbnQgc3RhdGVtZW50LgogICAgICBOTyBzdWJzdGF0ZW1lbnRzIGFyZSBhbGxvd2VkLgogICAgICAgICAgICAKICAgICAgQWRkaW5nIHRoaXMgc3RhdGVtZW50IGlzIGFuIE5CQyBjaGFuZ2UsIHJlbW92aW5nIGl0IGlzIEJDLiI7CiAgfQoKICBleHRlbnNpb24gaW5pdGlhbC12YWx1ZSB7CiAgICBkZXNjcmlwdGlvbiAiU3BlY2lmaWVzIGEgdmFsdWUgdGhhdCB0aGUgc3lzdGVtIHdpbGwgc2V0IGZvciBhIGxlYWYKICAgICAgbGVhZi1saXN0IGlmIGEgdmFsdWUgaXMgbm90IHNwZWNpZmllZCBmb3IgaXQgd2hlbiBpdHMgcGFyZW50IGxpc3QKICAgICAgb3IgY29udGFpbmVyIGlzIGNyZWF0ZWQuIFRoZSB2YWx1ZSBoYXMgbm8gZWZmZWN0IGluIGFueSBvdGhlcgogICAgICBtb2RpZmljYXRpb24gZS5nLiBjaGFuZ2luZyBvciByZW1vdmluZyB0aGUgdmFsdWUuCgogICAgICBUaGUgZGVzY3JpcHRpb24gc3RhdGVtZW50IG9mIHRoZSBwYXJlbnQgc3RhdGVtZW50IFNIT1VMRCBjb250YWluCiAgICAgIHRoZSBsYWJlbCAnSW5pdGlhbC12YWx1ZTogJyBmb2xsb3dlZCBieSB0aGUgdGV4dCBmcm9tIHRoZSBhcmd1bWVudC4KCiAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgbGVhZiBvciBsZWFmLWxpc3QuCiAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBOT1QgYmUgcHJlc2VudCBpZiB0aGUgbGVhZiBvciB0aGUgbGVhZi1saXN0IAogICAgICBoYXMgYSBkZWZhdWx0IHN0YXRlbWVudCBvciB0aGUgdHlwZSB1c2VkIGZvciB0aGUgZGF0YSBub2RlIAogICAgICBoYXMgYSBkZWZhdWx0IHZhbHVlLgogICAgICBUaGUgc3RhdGVtZW50IE1VU1QgTk9UIGJlIHVzZWQgZm9yIGNvbmZpZz1mYWxzZSBkYXRhIG9yIGluIGFuIAogICAgICBhY3Rpb24sIHJwYyBvciBub3RpZmljYXRpb24uCiAgICAgIFplcm8gb3Igb25lIGluaXRpYWwtdmFsdWUgc3RhdGVtZW50cyBhcmUgYWxsb3dlZCBmb3IgYSBsZWFmIHBhcmVudAogICAgICBzdGF0ZW1lbnQuIFplcm8gb3IgbW9yZSBpbml0aWFsLXZhbHVlIHN0YXRlbWVudHMgYXJlIGFsbG93ZWQgZm9yIGEKICAgICAgbGVhZi1saXN0IHBhcmVudCBzdGF0ZW1lbnQuIElmIHRoZSBsZWFmLWxpc3QgaXMgb3JkZXJlZC1ieSB1c2VyLCB0aGUKICAgICAgaW5pdGlhbCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIFlBTkcgZGVmaW5pdGlvbi4KICAgICAgTk8gc3Vic3RhdGVtZW50cyBhcmUgYWxsb3dlZC4KCiAgICAgIEFsd2F5cyBjb25zaWRlciB1c2luZyBhIFlBTkctZGVmYXVsdCBzdGF0ZW1lbnQgaW5zdGVhZC4KCiAgICAgIE1vZGlmaWNhdGlvbiBvZiB0aGUgaW5pdGlhbC12YWx1ZSBpcyBhIG5vbi1iYWNrd2FyZHMtY29tcGF0aWJsZSBjaGFuZ2UuCgogICAgICBUaGUgYXJndW1lbnQgc3BlY2lmaWVzIGEgc2luZ2xlIGluaXRpYWwgdmFsdWUgZm9yIGEgbGVhZiBvciBsZWFmLWxpc3QuCiAgICAgIFRoZSB2YWx1ZSBNVVNUIGJlIHBhcnQgb2YgdGhlIHZhbHVlc3BhY2Ugb2YgdGhlIGxlYWYvbGVhZi1saXN0LgogICAgICBJdCBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIHRoZSBhcmd1bWVudCBvZiB0aGUgZGVmYXVsdCBzdGF0ZW1lbnQuIjsKCiAgICBhcmd1bWVudCAiaW5pdGlhbC12YWx1ZSI7CiAgfQp9
_3gpp-common-yang-types urn:3gpp:sa5:_3gpp-common-yang-types \N [] 2022-07-26 bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOjNncHA6c2E1Ol8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIjsKICBwcmVmaXggInR5cGVzM2dwcCI7CiAgCiAgaW1wb3J0IGlldGYtaW5ldC10eXBlcyB7IHByZWZpeCBpbmV0OyB9CiAgaW1wb3J0IGlldGYteWFuZy10eXBlcyB7IHByZWZpeCB5YW5nOyB9CgogIG9yZ2FuaXphdGlvbiAiM0dQUCBTQTUiOwogIGNvbnRhY3QgImh0dHBzOi8vd3d3LjNncHAub3JnL0R5bmFSZXBvcnQvVFNHLVdHLS1TNS0tb2ZmaWNpYWxzLmh0bT9JdGVtaWQ9NDY0IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZGVsIGRlZmluZXMgYSBZQU5HIG1hcHBpbmcgb2YgdGhlIHRvcCBsZXZlbCAKICAgIGluZm9ybWF0aW9uIGNsYXNzZXMgdXNlZCBmb3IgbWFuYWdlbWVudCBvZiA1RyBuZXR3b3JrcyBhbmQgCiAgICBuZXR3b3JrIHNsaWNpbmcuIjsKICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjIzIjsKCiAgcmV2aXNpb24gMjAyMi0wNy0yNiB7IHJlZmVyZW5jZSBDUi0wMTgwIDsgfQogIHJldmlzaW9uIDIwMjItMDItMDkgeyByZWZlcmVuY2UgIkNSLTAxNDQiOyB9CiAgcmV2aXNpb24gMjAyMS0xMS0wMSB7IHJlZmVyZW5jZSAiQ1ItMDE0MSI7IH0KICAKICByZXZpc2lvbiAyMDIxLTA5LTMwIHsKICAgIGRlc2NyaXB0aW9uICJBZGRlZCBMb25naXR1ZGUsIExhdGl0dWRlLCBUZW50aE9mRGVncmVlcywgT25PZmYuIjsKICAgIHJlZmVyZW5jZSAiQ1ItMDEzOCI7CiAgfQoKICByZXZpc2lvbiAyMDIwLTExLTA2IHsKICAgIGRlc2NyaXB0aW9uICJSZW1vdmVkIGluY29ycmVjdCBTLU5TU0FJIGRlZmluaXRpb25zLiI7CiAgICByZWZlcmVuY2UgIkNSLTAxMTgiOwogIH0KCiAgcmV2aXNpb24gMjAyMC0wMy0xMCB7CiAgICBkZXNjcmlwdGlvbiAiUmVtb3ZlZCBmYXVsdHkgd2hlbiBzdGF0ZW1lbnRzLiI7CiAgICByZWZlcmVuY2UgIlNQLTIwMDIyOSI7CiAgfQogCiAgcmV2aXNpb24gMjAxOS0xMC0yNSB7CiAgICBkZXNjcmlwdGlvbiAiQWRkZWQgTWFuYWdlZE5GUHJvZmlsZS4iOwogICAgcmVmZXJlbmNlICJTNS0xOTQ0NTciOwogIH0KCiAgcmV2aXNpb24gMjAxOS0xMC0xNiB7CiAgICBkZXNjcmlwdGlvbiAiQWRkZWQgU0FQIGFuZCB1c2FnZVN0YXRlLiI7CiAgICByZWZlcmVuY2UgIlM1LTE5MzUxOCI7CiAgfQoKICByZXZpc2lvbiAyMDE5LTA2LTIzIHsKICAgIHJlZmVyZW5jZSAgIkluaXRpYWwgdmVyc2lvbi4iOwogIH0KCiAgdHlwZWRlZiBFbmFibGVkRGlzYWJsZWQgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gRElTQUJMRUQgOwogICAgICBlbnVtIEVOQUJMRUQgOwogICAgfQogIH0KICAKICBncm91cGluZyBQcm9jZXNzTW9uaXRvciB7CiAgICBkZXNjcmlwdGlvbiAiUHJvdmlkZXMgYXR0cmlidXRlcyB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiBwcm9jZXNzZXMgCiAgICAgIHdpdGggc3BlY2lmaWMgcHVycG9zZSBhbmQgbGltaXRlZCBsaWZldGltZSBydW5uaW5nIG9uIE1uUyBwcm9kdWNlcnMuIAogICAgICBJdCBtYXkgYmUgdXNlZCBhcyBkYXRhIHR5cGUgZm9yIGRlZGljYXRlZCBwcm9ncmVzcyBtb25pdG9yIGF0dHJpYnV0ZXMgCiAgICAgIHdoZW4gc3BlY2lmeWluZyB0aGUgbWFuYWdlbWVudCByZXByZXNlbnRhdGlvbiBvZiB0aGVzZSBwcm9jZXNzZXMuIAogICAgICBUaGUgYXR0cmlidXRlcyBpbiB0aGlzIGNsYXVzZSBhcmUgZGVmaW5lZCBpbiBhIGdlbmVyaWMgd2F5LiAKICAgICAgRm9yIHNvbWUgYXR0cmlidXRlcyBzcGVjaWFsaXNhdGlvbnMgbWF5IGJlIHByb3ZpZGVkIHdoZW4gc3BlY2lmeWluZyBhIAogICAgICBjb25jcmV0ZSBwcm9jZXNzIHJlcHJlc2VudGF0aW9uLgoKICAgICAgSWYgYSBtYW5hZ2VtZW50IG9wZXJhdGlvbiBvbiBzb21lIElPQ3MgdHJpZ2dlcnMgYW4gYXNzb2NpYXRlZCAKICAgICAgYXN5bmNocm9ub3VzIHByb2Nlc3MgKHdob3NlIHByb2dyZXNzIHNoYWxsIGJlIG1vbml0b3JlZCksIHRoaXMgc2hvdWxkIAogICAgICBhbHNvIHJlc3VsdCBpbiBjcmVhdGluZyBhbiBhdHRyaWJ1dGUgbmFtZWQgJ3Byb2Nlc3NNb25pdG9yJyAob2YgdHlwZSAKICAgICAgJ1Byb2Nlc3NNb25pdG9yJykgaW4gdGhlc2UgSU9DKHMpLiBUaGUgcHJvY2Vzc01vbml0b3IgYXR0cmlidXRlIG1heSBiZSAKICAgICAgYWNjb21wYW5pZWQgYnkgdXNlLWNhc2Ugc3BlY2lmaWMgYWRkaXRpb25hbCBkYXRhIGl0ZW1zLgoKICAgICAgVGhlIHByb2dyZXNzIG9mIHRoZSBwcm9jZXNzIGlzIGRlc2NyaWJlZCBieSB0aGUgJ3N0YXR1cycgYW5kIAogICAgICAncHJvZ3Jlc3NQZXJjZW50YWdlJyBhdHRyaWJ1dGVzLiBBZGRpdGlvbmFsIHRleHR1YWwgcXVhbGlmaWNhdGlvbnMgZm9yIAogICAgICB0aGUgJ3N0YXR1cycgYXR0cmlidXRlIG1heSBiZSBwcm92aWRlZCBieSB0aGUgJ3Byb2dyZXNzU3RhdGVJbmZvJyBhbmQgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZXMuCgogICAgICBXaGVuIHRoZSBwcm9jZXNzIGlzIGluc3RhbnRpYXRlZCwgdGhlICdzdGF0dXMnIGlzIHNldCB0byAnTk9UX1JVTk5JTkcnIAogICAgICBhbmQgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvICcwJy4gVGhlIE1uUyBwcm9kdWNlciBkZWNpZGVzIHdoZW4gdG8gCiAgICAgIHN0YXJ0IGV4ZWN1dGluZyB0aGUgcHJvY2VzcyBhbmQgdG8gdHJhbnNpdGlvbiBpbnRvIHRoZSAnUlVOTklORycgc3RhdGUuIAogICAgICBUaGlzIHRpbWUgaXMgY2FwdHVyZWQgaW4gdGhlICdzdGFydFRpbWUnIGF0dHJpYnV0ZS4gQWx0ZXJuYXRpdmVseSwgdGhlIAogICAgICBwcm9jZXNzIG1heSBzdGFydCB0byBleGVjdXRlIGRpcmVjdGx5IHVwb24gaXRzIGluc3RhbnRpYXRpb24uIE9uZSAKICAgICAgYWx0ZXJuYXRpdmUgbXVzdCBiZSBzZWxlY3RlZCB3aGVuIHVzaW5nIHRoaXMgZGF0YSB0eXBlLgoKICAgICAgRHVyaW5nIHRoZSAnUlVOTklORycgc3RhdGUgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIGF0dHJpYnV0ZSBtYXkgYmUgCiAgICAgIHJlcGVhdGVkbHkgdXBkYXRlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlIGlzIHN1YmplY3QgdG8gCiAgICAgIGZ1cnRoZXIgc3BlY2lhbGlzYXRpb24uIFRoZSAncHJvZ3Jlc3NJbmZvJyBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gCiAgICAgIHByb3ZpZGUgYWRkaXRpb25hbCB0ZXh0dWFsIGluZm9ybWF0aW9uIGluIHRoZSAnTk9UX1JVTk5JTkcnLCAnQ0FOQ0VMTElORycgCiAgICAgIGFuZCAnUlVOTklORycgc3RhdGVzLiBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mIAogICAgICAncHJvZ3Jlc3NTdGF0ZUluZm8nIG1heSBiZSBwcm92aWRlZCB3aGVyZSB0aGlzIGRhdGEgdHlwZSBpcyAKICAgICAgdXNlZC4KCiAgICAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBwcm9jZXNzLCB0aGUgJ3N0YXR1cycgYXR0cmlidXRlIGlzIHNldCAKICAgICAgdG8gJ0ZJTklTSEVEJywgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvIDEwMCUuIFRoZSB0aW1lIGlzIGNhcHR1cmVkIGluIAogICAgICB0aGUgJ2VuZFRpbWUnIGF0dHJpYnV0ZS4gQWRkaXRpb25hbCB0ZXh0dWFsIGluZm9ybWF0aW9uIG1heSBiZSBwcm92aWRlZCAKICAgICAgaW4gdGhlICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZS4gVGhlIHR5cGUgb2YgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGluIHRoaXMgZGF0YSB0eXBlIGRlZmluaXRpb24gaXMgJ1N0cmluZycuIAogICAgICBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mICdyZXN1bHRTdGF0ZUluZm8nIG1heSBiZSBwcm92aWRlZCAKICAgICAgd2hlcmUgdGhpcyBkYXRhIHR5cGUgaXMgdXNlZC4KCiAgICAgIEluIGNhc2UgdGhlIHByb2Nlc3MgZmFpbHMgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LCB0aGUgJ3N0YXR1cycgCiAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLCB0aGUgY3VycmVudCB2YWx1ZSBvZiAKICAgICAgJ3Byb2dyZXNzUGVyY2VudGFnZScgaXMgZnJvemVuLCBhbmQgdGhlIHRpbWUgY2FwdHVyZWQgaW4gJ2VuZFRpbWUnLiBUaGUgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIHNwZWNpZmllcyB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4gCiAgICAgIFNwZWNpZmljIGZhaWx1cmUgcmVhc29ucyBtYXkgYmUgc3BlY2lmaWVkIHdoZXJlIHRoZSBkYXRhIHR5cGUgZGVmaW5lZCBpbiAKICAgICAgdGhpcyBjbGF1c2UgaXMgdXNlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIGZhaWx1cmUgbWF5IGJlIHN1YmplY3QgZm9yIAogICAgICBmdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIGFzIHdlbGwuCgogICAgICBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIGNhbmNlbGxlZCwgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBpcyBmaXJzdCBzZXQgdG8gCiAgICAgICdDQU5DRUxMSU5HJyBhbmQgd2hlbiB0aGUgcHJvY2VzcyBpcyByZWFsbHkgY2FuY2VsbGVkIHRoZW4gdG8gJ0NBTkNFTExFRCcuIAogICAgICBUaGUgdHJhbnNpdGlvbiB0byAnQ0FOQ0VMTEVEJyBpcyBjYXB0dXJlZCBpbiB0aGUgJ2VuZFRpbWUnIGF0dHJpYnV0ZS4gCiAgICAgIFRoZSB2YWx1ZSBvZiAncHJvZ3Jlc3NQZXJjZW50YWdlJyBpcyBmcm96ZW4uIEFkZGl0aW9uYWwgdGV4dHVhbCAKICAgICAgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuCgogICAgICBUaGUgJ3Jlc3VsdFN0YXRlSW5mbycgYXR0cmlidXRlIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGFkZGl0aW9uYWwgdGV4dHVhbCAKICAgICAgcXVhbGlmaWNhdGlvbiBvZiB0aGUgc3RhdGVzICdGSU5JU0hFRCcsICdGQUlMRUQnLCAnUEFSVElBTExZX0ZBSUxFRCcgb3IgCiAgICAgICdDQU5DRUxMRUQnLiBJdCBzaGFsbCBub3QgYmUgdXNlZCBmb3IgbWFraW5nIHRoZSBvdXRjb21lLCB0aGF0IHRoZSAKICAgICAgcHJvY2VzcyBtYXkgcHJvZHVjZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGF2YWlsYWJsZS4KCiAgICAgIFRoZSBwcm9jZXNzIG1heSBoYXZlIHRvIGJlIGNvbXBsZXRlZCB3aXRoaW4gYSBjZXJ0YWluIHRpbWUgYWZ0ZXIgaXRzIAogICAgICBjcmVhdGlvbiwgZm9yIGV4YW1wbGUgYmVjYXVzZSByZXF1aXJlZCBkYXRhIG1heSBub3QgYmUgYXZhaWxhYmxlIGFueSAKICAgICAgbW9yZSBhZnRlciBhIGNlcnRhaW4gdGltZSwgb3IgdGhlIHByb2Nlc3Mgb3V0Y29tZSBpcyBuZWVkZWQgdW50aWwgYSAKICAgICAgY2VydGFpbiB0aW1lIGFuZCB3aGVuIG5vdCBwcm92aWRlZCBieSB0aGlzIHRpbWUgaXMgbm90IG5lZWRlZCBhbnkgbW9yZS4gCiAgICAgIFRoZSB0aW1lIHVudGlsIHRoZSBNblMgcHJvZHVjZXIgYXV0b21hdGljYWxseSBjYW5jZWxzIHRoZSBwcm9jZXNzIGlzIAogICAgICBpbmRpY2F0ZWQgYnkgdGhlICd0aW1lcicgYXR0cmlidXRlLiI7CiAgICAgIAogICAgbGVhZiBpZCB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgZGVzY3JpcHRpb24gIklkIG9mIHRoZSBwcm9jZXNzLiBJdCBpcyB1bmlxdWUgd2l0aGluIGEgc2luZ2xlIAogICAgICAgIG11bHRpdmFsdWUgYXR0cmlidXRlIG9mIHR5cGUgUHJvY2Vzc01vbml0b3IuIjsKICAgIH0KICAgIAogICAgbGVhZiBzdGF0dXMgeyAKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgZW51bSBOT1RfU1RBUlRFRCA7CiAgICAgICAgZW51bSBSVU5OSU5HIDsKICAgICAgICBlbnVtIENBTkNFTExJTkcgOwogICAgICAgIGVudW0gRklOSVNIRUQgOwogICAgICAgIGVudW0gRkFJTEVEIDsKICAgICAgICBlbnVtIFBBUlRJQUxMWV9GQUlMRUQgOwogICAgICAgIGVudW0gQ0FOQ0VMTEVEIDsKICAgICAgfQogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlZmF1bHQgIFJVTk5JTkc7CiAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIHRoZSBzdGF0dXMgb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcywgCiAgICAgICAgd2hldGhlciBpdCBmYWlscywgc3VjY2VlZHMgZXRjLiAKICAgICAgICBJdCBkb2VzIG5vdCByZXByZXNlbnQgdGhlIHJldHVybmVkIHZhbHVlcyBvZiBhIHN1Y2Nlc3NmdWxseSBmaW5pc2hlZCAKICAgICAgICBwcm9jZXNzLiAiOwogICAgfQoKICAgIGxlYWYgcHJvZ3Jlc3NQZXJjZW50YWdlIHsKICAgICAgdHlwZSB1aW50OCB7CiAgICAgICAgcmFuZ2UgMC4uMTAwOwogICAgICB9CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIlByb2dyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHByb2Nlc3MgYXMgcGVyY2VudGFnZSI7CiAgICB9CgogICAgbGVhZi1saXN0IHByb2dyZXNzU3RhdGVJbmZvIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIkFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgCiAgICAgICAgJ05PVF9TVEFSVEVEJywgJ0NBTkNFTExJTkcnIGFuZCAnUlVOTklORycuCgogICAgICAgIEZvciBzcGVjaWZpYyBwcm9jZXNzZXMsIHNwZWNpZmljIHdlbGwtZGVmaW5lZCBzdHJpbmdzIChlLmcuIHN0cmluZyAKICAgICAgICBwYXR0ZXJucyBvciBlbnVtcykgbWF5IGJlIGRlZmluZWQgYXMgYSBzcGVjaWFsaXNhdGlvbi4iOwogICAgfQoKICAgIGxlYWYgcmVzdWx0U3RhdGVJbmZvIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIkFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgCiAgICAgICAgJ0ZJTklTSEVEJywgJ0ZBSUxFRCcsICdQQVJUSUFMTFlfRkFJTEVEIGFuZCAnQ0FOQ0VMTEVEJy4gCiAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSAnRkFJTEVEJyBvciAnUEFSVElBTExZX0ZBSUxFRCcgc3RhdGUgdGhpcyAKICAgICAgICBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBlcnJvciByZWFzb25zLgoKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzaGFsbCBub3QgYmUgdXNlZCB0byBtYWtlIHRoZSBvdXRjb21lIG9mIHRoZSBwcm9jZXNzIAogICAgICAgIGF2YWlsYWJsZSBmb3IgcmV0cmlldmFsLCBpZiBhbnkuIEZvciB0aGlzIHB1cnBvc2UsIGRlZGljYXRlZCAKICAgICAgICBhdHRyaWJ1dGVzIHNoYWxsIGJlIHNwZWNpZmllZCB3aGVuIHNwZWNpZnlpbmcgdGhlIHJlcHJlc2VudGF0aW9uIG9mIAogICAgICAgIGEgc3BlY2lmaWMgcHJvY2Vzcy4KCiAgICAgICAgRm9yIHNwZWNpZmljIHByb2Nlc3Nlcywgc3BlY2lmaWMgd2VsbC1kZWZpbmVkIHN0cmluZ3MgKGUuZy4gc3RyaW5nIAogICAgICAgIHBhdHRlcm5zIG9yIGVudW1zKSBtYXkgYmUgZGVmaW5lZCBhcyBhIHNwZWNpYWxpc2F0aW9uLiI7CiAgICB9CgogICAgbGVhZiBzdGFydFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiU3RhcnQgdGltZSBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzLCBpLmUuIHRoZSB0aW1lIHdoZW4gdGhlIAogICAgICAgIHN0YXR1cyBjaGFuZ2VkIGZyb20gJ05PVF9TVEFSVEVEJyB0byAnUlVOTklORycuIjsKICAgIH0KCiAgICBsZWFmIGVuZFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiRGF0ZSBhbmQgdGltZSB3aGVuIHN0YXR1cyBjaGFuZ2VkIHRvICdTVUNDRVNTJywgJ0NBTkNFTExFRCcsIAogICAgICAgICdGQUlMRUQnIG9yICdQQVJUSUFMTFlfRkFJTEVEJy4gCgogICAgICAgIElmIHRoZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUsIGl0IGlzIHRoZSBlc3RpbWF0ZWQgdGltZSAKICAgICAgICB0aGUgcHJvY2VzcyB3aWxsIGVuZC4iOwogICAgfQoKICAgIGxlYWYgdGltZXIgewogICAgICB0eXBlIHVpbnQzMjsKICAgICAgdW5pdHMgbWludXRlczsKICAgICAgZGVzY3JpcHRpb24gIlRpbWUgdW50aWwgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGxlZC4KICAgICAgICBJZiBzZXQsIHRoZSBzeXN0ZW0gZGVjcmVhc2VzIHRoZSB0aW1lciB3aXRoIHRpbWUuIFdoZW4gaXQgcmVhY2hlcyB6ZXJvIAogICAgICAgIHRoZSBjYW5jZWxsYXRpb24gb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBpbml0aWF0ZWQgYnkgdGhlIAogICAgICAgIE1uU19Qcm9kdWNlci4gCiAgICAgICAgSWYgbm90IHNldCwgdGhlcmUgaXMgbm8gdGltZSBsaW1pdCBmb3IgdGhlIHByb2Nlc3MuCiAgICAgICAgCiAgICAgICAgT25jZSB0aGUgdGltZXIgaXMgc2V0LCB0aGUgY29uc3VtZXIgY2FuIG5vdCBjaGFuZ2UgaXQgYW55bW9yZS4gCiAgICAgICAgSWYgdGhlIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZSB0aW1lciB0aGUgTW5TIFByb2R1Y2VyIG1heSBzZXQgaXQuIjsKICAgIH0KICB9CiAgCiAgdHlwZWRlZiBUZW50aE9mRGVncmVlcyB7IAogICAgdHlwZSB1aW50MTYgeyAKICAgICAgcmFuZ2UgMC4uMzYwMDsgCiAgICB9CiAgICB1bml0cyAiMC4xIGRlZ3JlZXMiOwogICAgZGVzY3JpcHRpb24gIkEgc2luZ2xlIGludGVncmFsIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gYW5nbGUgaW4gZGVncmVlcyAKICAgICAgYmV0d2VlbiAwIGFuZCAzNjAgd2l0aCBhIHJlc29sdXRpb24gb2YgMC4xIGRlZ3JlZXMuIjsKICB9CgogIHR5cGVkZWYgTGF0aXR1ZGUgewogICAgdHlwZSBkZWNpbWFsNjQgewogICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgcmFuZ2UgIi05MC4wMDAwLi4rOTAuMDAwMCI7IAogICAgfQogICAgZGVzY3JpcHRpb24gIkxhdGl0dWRlIHZhbHVlcyI7CiAgfQoKICB0eXBlZGVmIExvbmdpdHVkZSB7CiAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgIGZyYWN0aW9uLWRpZ2l0cyA0OwogICAgICByYW5nZSAiLTE4MC4wMDAwLi4rMTgwLjAwMDAiOyAKICAgIH0KICAgIGRlc2NyaXB0aW9uICJMb25naXR1ZGUgdmFsdWVzIjsKICB9CgogIHR5cGVkZWYgT25PZmYgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gT047CiAgICAgIGVudW0gT0ZGOwogICAgfQogIH0KICAKICAvLyBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCBhcyBpdCBpcyAKICAvLyAgYmVpbmcgbW92ZWQgdG8gXzNncHAtNWdjLW5ybS1uZnByb2ZpbGUKICBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHsKICAgIGRlc2NyaXB0aW9uICJEZWZpbmVzIHByb2ZpbGUgZm9yIG1hbmFnZWQgTkYiOwogICAgcmVmZXJlbmNlICIzR1BQIFRTIDIzLjUwMSI7CiAgICAKICAgIGxlYWYgaWR4IHsgdHlwZSB1aW50MzIgOyB9CiAgICAKICAgIGxlYWYgbmZJbnN0YW5jZUlEIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSB5YW5nOnV1aWQgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBwcm9maWxlIGZvciBtYW5hZ2VkIE5GLiAKICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSBORiBJbnN0YW5jZSBJRCBzaGFsbCBiZSBhIAogICAgICAgIFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSB2ZXJzaW9uIDQsIAogICAgICAgIGFzIGRlc2NyaWJlZCBpbiBJRVRGIFJGQyA0MTIyICIgOwogICAgfQogICAgCiAgICBsZWFmLWxpc3QgbmZUeXBlIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgdHlwZSBOZlR5cGU7CiAgICAgIGRlc2NyaXB0aW9uICJUeXBlIG9mIHRoZSBOZXR3b3JrIEZ1bmN0aW9uIiA7CiAgICB9CiAgICAKICAgIGxlYWYgaG9zdEFkZHIgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBpbmV0Omhvc3QgOwogICAgICBkZXNjcmlwdGlvbiAiSG9zdCBhZGRyZXNzIG9mIGEgTkYiOwogICAgfQogICAgCiAgICBsZWFmIGF1dGh6SW5mbyB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgTkYgU3BlY2lmaWMgU2VydmljZSBhdXRob3JpemF0aW9uIAogICAgICAgIGluZm9ybWF0aW9uLiBJdCBzaGFsbCBpbmNsdWRlIHRoZSBORiB0eXBlIChzKSBhbmQgTkYgcmVhbG1zL29yaWdpbnMgCiAgICAgICAgYWxsb3dlZCB0byBjb25zdW1lIE5GIFNlcnZpY2Uocykgb2YgTkYgU2VydmljZSBQcm9kdWNlci4iOwogICAgICByZWZlcmVuY2UgIlNlZSBUUyAyMy41MDEiIDsKICAgIH0KICAgIAogICAgbGVhZiBsb2NhdGlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIkluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgTkYgaW5zdGFuY2UgCiAgICAgICAgKGUuZy4gZ2VvZ3JhcGhpYyBsb2NhdGlvbiwgZGF0YSBjZW50ZXIpIGRlZmluZWQgYnkgb3BlcmF0b3IiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmIGNhcGFjaXR5IHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgdWludDE2IDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgc3RhdGljIGNhcGFjaXR5IGluZm9ybWF0aW9uIAogICAgICAgIGluIHRoZSByYW5nZSBvZiAwLTY1NTM1LCBleHByZXNzZWQgYXMgYSB3ZWlnaHQgcmVsYXRpdmUgdG8gb3RoZXIgCiAgICAgICAgTkYgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHR5cGU7IGlmIGNhcGFjaXR5IGlzIGFsc28gcHJlc2VudCBpbiB0aGUgCiAgICAgICAgbmZTZXJ2aWNlTGlzdCBwYXJhbWV0ZXJzLCB0aG9zZSB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KICAgICAgCiAgICBsZWFmIG5GU3J2R3JvdXBJZCB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgaWRlbnRpdHkgb2YgdGhlIGdyb3VwIHRoYXQgaXMgCiAgICAgICAgc2VydmVkIGJ5IHRoZSBORiBpbnN0YW5jZS4KICAgICAgICBNYXkgYmUgY29uZmlnIGZhbHNlIG9yIHRydWUgZGVwZW5kaW5nIG9uIHRoZSBNYW5hZ2VkRnVuY3Rpb24uIAogICAgICAgIENvbmZpZz10cnVlIGZvciBVZHJpbmZvLiBDb25maWc9ZmFsc2UgZm9yIFVkbUluZm8gYW5kIEF1c2ZJbmZvLiAKICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVETSBvciBBVVNGIG9yIFVEUi4gIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KICAgIAogICAgbGVhZi1saXN0IHN1cHBvcnRlZERhdGFTZXRJZHMgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIFNVQlNDUklQVElPTjsKICAgICAgICBlbnVtIFBPTElDWTsKICAgICAgICBlbnVtIEVYUE9TVVJFOwogICAgICAgIGVudW0gQVBQTElDQVRJT047CiAgICAgIH0KICAgICAgZGVzY3JpcHRpb24gIkxpc3Qgb2Ygc3VwcG9ydGVkIGRhdGEgc2V0cyBpbiB0aGUgVURSIGluc3RhbmNlLiAKICAgICAgICBNYXkgYmUgcHJlc2VudCBpZiAuLi9uZlR5cGUgPSBVRFIiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmLWxpc3Qgc21mU2VydmluZ0FyZWFzIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiRGVmaW5lcyB0aGUgU01GIHNlcnZpY2UgYXJlYShzKSB0aGUgVVBGIGNhbiBzZXJ2ZS4gCiAgICAgICAgU2hhbGwgYmUgcHJlc2VudCBpZiAuLi9uZlR5cGUgPSBVUEYiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmIHByaW9yaXR5IHsKICAgICAgdHlwZSB1aW50MTY7CiAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHBhcmFtZXRlciBkZWZpbmVzIFByaW9yaXR5IChyZWxhdGl2ZSB0byBvdGhlciBORnMgCiAgICAgICAgb2YgdGhlIHNhbWUgdHlwZSkgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIHRvIGJlIHVzZWQgZm9yIE5GIHNlbGVjdGlvbjsgCiAgICAgICAgbG93ZXIgdmFsdWVzIGluZGljYXRlIGEgaGlnaGVyIHByaW9yaXR5LiBJZiBwcmlvcml0eSBpcyBhbHNvIHByZXNlbnQgCiAgICAgICAgaW4gdGhlIG5mU2VydmljZUxpc3QgcGFyYW1ldGVycywgdGhvc2Ugd2lsbCBoYXZlIHByZWNlZGVuY2Ugb3ZlciAKICAgICAgICB0aGlzIHZhbHVlLiBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IEFNRiAiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogIH0KICAKICB0eXBlZGVmIHVzYWdlU3RhdGUgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gSURMRTsKICAgICAgZW51bSBBQ1RJVkU7CiAgICAgIGVudW0gQlVTWTsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJJdCBkZXNjcmliZXMgd2hldGhlciBvciBub3QgdGhlIHJlc291cmNlIGlzIGFjdGl2ZWx5IGluIAogICAgICB1c2UgYXQgYSBzcGVjaWZpYyBpbnN0YW50LCBhbmQgaWYgc28sIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBzcGFyZSAKICAgICAgY2FwYWNpdHkgZm9yIGFkZGl0aW9uYWwgdXNlcnMgYXQgdGhhdCBpbnN0YW50LiBUaGUgdmFsdWUgaXMgUkVBRC1PTkxZLiI7CiAgICByZWZlcmVuY2UgIklUVSBUIFJlY29tbWVuZGF0aW9uIFguNzMxIjsKICB9CiAgCiAgZ3JvdXBpbmcgU0FQIHsKICAgIGxlYWYgaG9zdCB7CiAgICAgIHR5cGUgaW5ldDpob3N0OwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgIH0KICAgIGxlYWYgcG9ydCB7CiAgICAgIHR5cGUgaW5ldDpwb3J0LW51bWJlcjsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiU2VydmljZSBhY2Nlc3MgcG9pbnQuIjsKICAgIHJlZmVyZW5jZSAiVFMgMjguNjIyIjsKICB9CiAgCiAgdHlwZWRlZiBNY2MgewogICAgZGVzY3JpcHRpb24gIlRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGNvbnNpc3RzIG9mIHRocmVlIGRlY2ltYWwgZGlnaXRzLCAKICAgICAgVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGlkZW50aWZpZXMgdGhlIGdlb2dyYXBoaWMgCiAgICAgIHJlZ2lvbiAodGhlIGRpZ2l0cyAxIGFuZCA4IGFyZSBub3QgdXNlZCk6IjsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnWzAyLTc5XVswLTldWzAtOV0nOwogICAgfQogICAgcmVmZXJlbmNlICIzR1BQIFRTIDIzLjAwMyBzdWJjbGF1c2UgMi4yIGFuZCAxMi4xIjsKICB9CgogIHR5cGVkZWYgTW5jIHsKICAgIGRlc2NyaXB0aW9uICJUaGUgbW9iaWxlIG5ldHdvcmsgY29kZSBjb25zaXN0cyBvZiB0d28gb3IgdGhyZWUgCiAgICAgIGRlY2ltYWwgZGlnaXRzIChmb3IgZXhhbXBsZTogTU5DIG9mIDAwMSBpcyBub3QgdGhlIHNhbWUgYXMgTU5DIG9mIDAxKSI7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJ1swLTldWzAtOV1bMC05XXxbMC05XVswLTldJzsKICAgIH0KICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyMy4wMDMgc3ViY2xhdXNlIDIuMiBhbmQgMTIuMSI7CiAgfQoKICBncm91cGluZyBQTE1OSWQgewogICAgbGVhZiBtY2MgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBNY2M7CiAgICB9CiAgICBsZWFmIG1uYyB7CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICB0eXBlIE1uYzsKICAgIH0KICAgIHJlZmVyZW5jZSAiVFMgMjMuNjU4IjsKICB9CiAgCiAgdHlwZWRlZiBOY2kgewogICAgZGVzY3JpcHRpb24gIk5SIENlbGwgSWRlbnRpdHkuIFRoZSBOQ0kgc2hhbGwgYmUgb2YgZml4ZWQgbGVuZ3RoIG9mIDM2IGJpdHMgCiAgICAgIGFuZCBzaGFsbCBiZSBjb2RlZCB1c2luZyBmdWxsIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLiAKICAgICAgVGhlIGV4YWN0IGNvZGluZyBvZiB0aGUgTkNJIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBlYWNoIFBMTU4gb3BlcmF0b3IiOwogICAgcmVmZXJlbmNlICJUUyAyMy4wMDMiOwogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggMzY7CiAgICAgICAgcGF0dGVybiAnWzAxXSsnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggOTsKICAgICAgICBwYXR0ZXJuICdbYS1mQS1GMC05XSonOwogICAgICB9CiAgICB9CiAgfQogICAgCiAgdHlwZWRlZiBPcGVyYXRpb25hbFN0YXRlIHsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyOC42MjUgYW5kIElUVS1UIFguNzMxIjsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIERJU0FCTEVEIHsKICAgICAgICB2YWx1ZSAwOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgdG90YWxseSBpbm9wZXJhYmxlLiI7CiAgICAgIH0KCiAgICAgIGVudW0gRU5BQkxFRCB7CiAgICAgICAgdmFsdWUgMTsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIHJlc291cmNlIGlzIHBhcnRpYWxseSBvciBmdWxseSBvcGVyYWJsZS4iOwogICAgICB9CgogICAgfQogIH0KICAKICB0eXBlZGVmIEJhc2ljQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgdHlwZWRlZiBBZG1pbmlzdHJhdGl2ZVN0YXRlIHsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyOC42MjUgYW5kIElUVS1UIFguNzMxIjsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIExPQ0tFRCB7CiAgICAgICAgdmFsdWUgMDsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIHJlc291cmNlIGlzIGFkbWluaXN0cmF0aXZlbHkgcHJvaGliaXRlZCBmcm9tIHBlcmZvcm1pbmcKICAgICAgICAgICAgICAgICBzZXJ2aWNlcyBmb3IgaXRzIHVzZXJzLiI7CiAgICAgIH0KCiAgICAgIGVudW0gVU5MT0NLRUQgewogICAgICAgIHZhbHVlIDE7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHBlcm1pdHRlZCB0byBwZXJmb3JtCiAgICAgICAgICBzZXJ2aWNlcyBmb3IgaXRzIHVzZXJzLiBUaGlzIGlzIGluZGVwZW5kZW50IG9mIGl0cyBpbmhlcmVudAogICAgICAgICAgb3BlcmFiaWxpdHkuIjsKICAgICAgfQoKICAgICAgZW51bSBTSFVUVElOR0RPV04gewogICAgICAgIHZhbHVlIDI7CiAgICAgICAgZGVzY3JpcHRpb24gIlVzZSBvZiB0aGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8KICAgICAgICAgIGV4aXN0aW5nIGluc3RhbmNlcyBvZiB1c2Ugb25seS4gV2hpbGUgdGhlIHN5c3RlbSByZW1haW5zIGluCiAgICAgICAgICB0aGUgc2h1dHRpbmcgZG93biBzdGF0ZSB0aGUgbWFuYWdlciBvciB0aGUgbWFuYWdlZCBlbGVtZW50IAogICAgICAgICAgbWF5IGF0IGFueSB0aW1lIGNhdXNlIHRoZSByZXNvdXJjZSB0byB0cmFuc2l0aW9uIHRvIHRoZSAKICAgICAgICAgIGxvY2tlZCBzdGF0ZS4iOwogICAgICB9CiAgICB9CiAgfQogIAogIHR5cGVkZWYgQXZhaWxhYmlsaXR5U3RhdHVzIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICBlbnVtIElOX1RFU1Q7CiAgICAgICAgICBlbnVtIEZBSUxFRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVudW0gUE9XRVJfT0ZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBPRkZfTElORTsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVudW0gT0ZGX0RVVFk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBlbnVtIERFUEVOREVOQ1k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBlbnVtIERFR1JBREVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBOT1RfSU5TVEFMTEVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBMT0dfRlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgIH0KICB9CiAgCiAgdHlwZWRlZiBDZWxsU3RhdGUgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIElETEU7CiAgICAgICAgZW51bSBJTkFDVElWRTsgICAgICAgICAgICAgIAogICAgICAgIGVudW0gQUNUSVZFOyAgICAgICAgICAgICAgCiAgICAgfQogIH0KCiAgdHlwZWRlZiBOcnBjaSB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBDZWxsIElkZW50aXR5IChQQ0kpIG9mIHRoZSBOUiBjZWxsLiI7CiAgICByZWZlcmVuY2UgIlRTIDM2LjIxMSBzdWJjbGF1c2UgNi4xMSI7CiAgfQoKICB0eXBlZGVmIFRhYyB7CiAgICB0eXBlIGludDMyIHsKICAgICAgcmFuZ2UgMC4uMTY3NzcyMTUgOwogICAgfQogICAgZGVzY3JpcHRpb24gIlRyYWNraW5nIEFyZWEgQ29kZSI7CiAgICByZWZlcmVuY2UgIlRTIDIzLjAwMyBjbGF1c2UgMTkuNC4yLjMiOwogIH0KCiAgdHlwZWRlZiBBbWZSZWdpb25JZCB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDggOwogICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgbGVuZ3RoIDg7CiAgICAgICAgcGF0dGVybiAnWzAxXSonOwogICAgICB9CiAgICB9CiAgICByZWZlcmVuY2UgImNsYXVzZSAyLjEwLjEgb2YgM0dQUCBUUyAyMy4wMDMiOwogIH0KCiAgdHlwZWRlZiBBbWZTZXRJZCB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDE2IHsKICAgICAgICByYW5nZSAnMC4uMTAyMyc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA4OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CgogIHR5cGVkZWYgQW1mUG9pbnRlciB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlICcwLi42Myc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA2OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CiAgICAgICAgCiAgZ3JvdXBpbmcgQW1mSWRlbnRpZmllciB7ICAgICAgICAKICAgIGxlYWYgYW1mUmVnaW9uSWQgewogICAgICB0eXBlIEFtZlJlZ2lvbklkOwogICAgfQogICAgbGVhZiBhbWZTZXRJZCB7CiAgICAgIHR5cGUgQW1mU2V0SWQ7CiAgICB9CiAgICBsZWFmIGFtZlBvaW50ZXIgewogICAgICB0eXBlIEFtZlBvaW50ZXI7CiAgICB9IAogICAgZGVzY3JpcHRpb24gIlRoZSBBTUZJIGlzIGNvbnN0cnVjdGVkIGZyb20gYW4gQU1GIFJlZ2lvbiBJRCwgCiAgICAgIGFuIEFNRiBTZXQgSUQgYW5kIGFuIEFNRiBQb2ludGVyLiAKICAgICAgVGhlIEFNRiBSZWdpb24gSUQgaWRlbnRpZmllcyB0aGUgcmVnaW9uLCAKICAgICAgdGhlIEFNRiBTZXQgSUQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQU1GIFNldCB3aXRoaW4gdGhlIEFNRiBSZWdpb24sIGFuZCAKICAgICAgdGhlIEFNRiBQb2ludGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiB3aXRoaW4gdGhlIEFNRiBTZXQuICI7IAogIH0gICAgCgovLyB0eXBlIGRlZmluaXRpb25zIGVzcGVjaWFsbHkgZm9yIGNvcmUgTkZzCgogIHR5cGVkZWYgTmZUeXBlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIE5SRjsKICAgICAgZW51bSBVRE07CiAgICAgIGVudW0gQU1GOwogICAgICBlbnVtIFNNRjsKICAgICAgZW51bSBBVVNGOwogICAgICBlbnVtIE5FRjsKICAgICAgZW51bSBQQ0Y7CiAgICAgIGVudW0gU01TRjsKICAgICAgZW51bSBOU1NGOwogICAgICBlbnVtIFVEUjsKICAgICAgZW51bSBMTUY7CiAgICAgIGVudW0gR01MQzsKICAgICAgZW51bSA1R19FSVI7CiAgICAgIGVudW0gU0VQUDsKICAgICAgZW51bSBVUEY7CiAgICAgIGVudW0gTjNJV0Y7CiAgICAgIGVudW0gQUY7CiAgICAgIGVudW0gVURTRjsKICAgICAgZW51bSBCU0Y7CiAgICAgIGVudW0gQ0hGOwogICAgfSAgICAgICAgICAKICB9CiAgCiAgdHlwZWRlZiBOb3RpZmljYXRpb25UeXBlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIE4xX01FU1NBR0VTOwogICAgICBlbnVtIE4yX0lORk9STUFUSU9OOwogICAgICBlbnVtIExPQ0FUSU9OX05PVElGSUNBVElPTjsKICAgIH0gICAgICAKICB9CiAgCiAgdHlwZWRlZiBMb2FkIHsKICAgIGRlc2NyaXB0aW9uICJMYXRlc3Qga25vd24gbG9hZCBpbmZvcm1hdGlvbiBvZiB0aGUgTkYsIHBlcmNlbnRhZ2UgIjsKICAgIHR5cGUgdWludDggewogICAgICByYW5nZSAwLi4xMDA7CiAgICB9CiAgfQoKICB0eXBlZGVmIE4xTWVzc2FnZUNsYXNzIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIDVHTU07CiAgICAgIGVudW0gU007CiAgICAgIGVudW0gTFBQOwogICAgICBlbnVtIFNNUzsgCiAgICB9ICAgICAgCiAgfQogIAogIHR5cGVkZWYgTjJJbmZvcm1hdGlvbkNsYXNzIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIFNNOwogICAgICBlbnVtIE5SUFBBOwogICAgICBlbnVtIFBXUzsKICAgICAgZW51bSBQV1NfQkNBTDsKICAgICAgZW51bSBQV1NfUkY7CiAgICB9ICAgICAgICAgICAgICAKICB9CiAgCiAgZ3JvdXBpbmcgRGVmYXVsdE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiB7CiAgICAKICAgIGxlYWYgbm90aWZpY2F0aW9uVHlwZSB7CiAgICAgIHR5cGUgTm90aWZpY2F0aW9uVHlwZTsKICAgIH0KICAgIAogICAgbGVhZiBjYWxsYmFja1VyaSB7CiAgICAgIHR5cGUgaW5ldDp1cmk7CiAgICB9CiAgICAKICAgIGxlYWYgbjFNZXNzYWdlQ2xhc3MgewogICAgICB0eXBlIE4xTWVzc2FnZUNsYXNzOwogICAgfQogICAgCiAgICBsZWFmIG4ySW5mb3JtYXRpb25DbGFzcyB7CiAgICAgIHR5cGUgTjJJbmZvcm1hdGlvbkNsYXNzOwogICAgfSAgICAKICB9ICAKICAgICAgICAKICBncm91cGluZyBJcHY0QWRkcmVzc1JhbmdlIHsKICBsZWFmIHN0YXJ0IHsKICAgIHR5cGUgaW5ldDppcHY0LWFkZHJlc3M7CiAgICB9CiAgbGVhZiBlbmQgewogICAgdHlwZSBpbmV0OmlwdjQtYWRkcmVzczsKICAgIH0gICAgCiAgfQogICAgCiAgZ3JvdXBpbmcgSXB2NlByZWZpeFJhbmdlIHsKICBsZWFmIHN0YXJ0IHsKICAgIHR5cGUgaW5ldDppcHY2LXByZWZpeDsKICAgIH0KICBsZWFmIGVuZCB7CiAgICB0eXBlIGluZXQ6aXB2Ni1wcmVmaXg7CiAgICB9ICAgIAogIH0KICAgICAKICB0eXBlZGVmIE5zaUlkIHsKICAgIHR5cGUgc3RyaW5nOwogIH0KICAgIAogIHR5cGVkZWYgVWVNb2JpbGl0eUxldmVsIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIFNUQVRJT05BUlk7CiAgICAgIGVudW0gTk9NQURJQzsKICAgICAgZW51bSBSRVNUUklDVEVEX01PQklMSVRZOwogICAgICBlbnVtIEZVTExZX01PQklMSVRZOwogICAgfQogIH0KICAgICAgCiAgdHlwZWRlZiBSZXNvdXJjZVNoYXJpbmdMZXZlbCB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gU0hBUkVEOwogICAgICAgIGVudW0gTk9UX1NIQVJFRDsKICAgICAgfQogIH0KICAgICAgCiAgdHlwZWRlZiBUeERpcmVjdGlvbiB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gREw7CiAgICAgICAgZW51bSBVTDsKICAgICAgICBlbnVtIERMX0FORF9VTDsKICAgICAgfQogIH0KICAgICAgCiAgZ3JvdXBpbmcgQWRkcmVzc1dpdGhWbGFuIHsKICAgIGxlYWYgaXBBZGRyZXNzIHsKICAgICAgdHlwZSBpbmV0OmlwLWFkZHJlc3M7ICAgCiAgICB9CiAgICBsZWFmIHZsYW5JZCB7CiAgICAgICB0eXBlIHVpbnQxNjsKICAgIH0gIAogIH0KICAKICB0eXBlZGVmIERpc3Rpbmd1aXNoZWROYW1lIHsgICAgLy8gVE9ETyBpcyB0aGlzIGVxdWl2YWxlbnQgdG8gVFMgMzIuMzAwID8KICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnKFthLXpBLVpdW2EtekEtWjAtOS1dKj0oXFwoIHwjfFxcfD58PHw7fCJ8XCt8LHxbYS1mQS1GMC05XXsyfSl8W15cXD48OyIrLCMgXSknCiAgICAgICAgKyAnKChcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissXSkqJwogICAgICAgICsgJyhcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissIF0pKT8nCiAgICAgICAgKyAnWyxcK10pKlthLXpBLVpdW2EtekEtWjAtOS1dKj0oXFwoIHwjfFxcfD58PHw7fCJ8XCt8LHxbYS1mQS1GMC05XXsyfSl8W15cXD48OyIrLCMgXSknCiAgICAgICAgKyAnKChcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KScKICAgICAgICArICd8W15cXD48OyIrLF0pKihcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissIF0pKT8nOyAgCiAgICB9CiAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgaW50ZXJuYXRpb25hbCBzdGFuZGFyZCBmb3IgdGhlIHJlcHJlc2VudGF0aW9uIAogICAgICBvZiBEaXN0aW5ndWlzaGVkIE5hbWUgKFJGQyA0NTEyKS4gCiAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIERpc3Rpbmd1aXNoZWROYW1lIFJFR0VYIGlzOgogICAgICB7QXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVZhbHVlfSAgIAoKICAgICAgQXR0cmlidXRlVHlwZSBjb25zaXN0cyBvZiBhbHBoYW51bWVyaWMgYW5kIGh5cGhlbiAoT0lEcyBub3QgYWxsb3dlZCkuIAogICAgICBBbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgcmVzdHJpY3RlZC4KICAgICAgVGhlIEF0dHJpYnV0ZSB2YWx1ZSBjYW5ub3QgY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMgb3IgdGhlIAogICAgICAgIGZvbGxvd2luZyBjaGFyYWN0ZXJzIDogXFwgPiA8IDsgXCIgKyAsIChDb21tYSkgYW5kIFdoaXRlIHNwYWNlCiAgICAgIFRoZSBBdHRyaWJ1dGUgdmFsdWUgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGlmIHRoZXkgCiAgICAgICAgYXJlIGV4Y2FwZWQgOiBcXCA+IDwgOyBcIiArICwgKENvbW1hKSBhbmQgV2hpdGUgc3BhY2UKICAgICAgVGhlIEF0dHJpYnV0ZSB2YWx1ZSBjYW4gY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMgaWYgaXRzIGFuIGVzY2FwZWQgCiAgICAgICAgZG91YmxlIGRpZ2l0IGhleCBudW1iZXIuCiAgICAgICAgRXhhbXBsZXMgY291bGQgYmUgCiAgICAgICAgICBVSUQ9bm9ib2R5QGV4YW1wbGUuY29tLERDPWV4YW1wbGUsREM9Y29tCiAgICAgICAgICAgIENOPUpvaG4gU21pdGgsT1U9U2FsZXMsTz1BQ01FIExpbWl0ZWQsTD1Nb2FiLFNUPVV0YWgsQz1VUyI7CiAgICByZWZlcmVuY2UgICJSRkMgNDUxMiBMaWdodHdlaWdodCBEaXJlY3RvcnkgQWNjZXNzIFByb3RvY29sIChMREFQKToKICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSBJbmZvcm1hdGlvbiBNb2RlbHMiOwogIH0gLy8gcmVjaGVjayByZWdleHAgaXQgZG9lc24ndCBoYW5kbGUgcG9zaXggWzpjbnRybDpdCiAKICB0eXBlZGVmIFFPZmZzZXRSYW5nZSAgewogICAgdHlwZSBpbnQ4IHsgCiAgICAgIHJhbmdlICItMjQgfCAtMjIgfCAtMjAgfCAtMTggfCAtMTYgfCAtMTQgfCAtMTIgfCAtMTAgfCAtOCB8IC02IHwgIiArCiAgICAgICAgIiAtNSB8IC00IHwgLTMgfCAtMiB8IC0xIHwgMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDggfCAxMCB8ICIgKwogICAgICAgICIgMTIgfCAxNCB8IDE2IHwgMTggfCAyMCB8IDIyIHwgMjQiOyAKICAgIH0KICAgIHVuaXRzIGRCOwogIH0KfQ==
ietf-geo-location urn:ietf:params:xml:ns:yang:ietf-geo-location \N [] 2022-02-11 bW9kdWxlIGlldGYtZ2VvLWxvY2F0aW9uIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYtZ2VvLWxvY2F0aW9uIjsKICBwcmVmaXggZ2VvOwogIGltcG9ydCBpZXRmLXlhbmctdHlwZXMgewogICAgcHJlZml4IHlhbmc7CiAgICByZWZlcmVuY2UgIlJGQyA2OTkxOiBDb21tb24gWUFORyBEYXRhIFR5cGVzIjsKICB9CgogIG9yZ2FuaXphdGlvbgogICAgIklFVEYgTkVUTU9EIFdvcmtpbmcgR3JvdXAgKE5FVE1PRCkiOwogIGNvbnRhY3QKICAgIldHIFdlYjogICA8aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy93Zy9uZXRtb2QvPgogICAgV0cgTGlzdDogIDxtYWlsdG86bmV0bW9kQGlldGYub3JnPgoKICAgIEVkaXRvcjogICBDaHJpc3RpYW4gSG9wcHMKICAgICAgICAgICAgICA8bWFpbHRvOmNob3Bwc0BjaG9wcHMub3JnPiI7CgogIGRlc2NyaXB0aW9uCiAgICAiVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGdyb3VwaW5nIG9mIGEgY29udGFpbmVyIG9iamVjdCBmb3IKICAgICBzcGVjaWZ5aW5nIGEgbG9jYXRpb24gb24gb3IgYXJvdW5kIGFuIGFzdHJvbm9taWNhbCBvYmplY3QgKGUuZy4sCiAgICAgJ2VhcnRoJykuCgogICAgIFRoZSBrZXkgd29yZHMgJ01VU1QnLCAnTVVTVCBOT1QnLCAnUkVRVUlSRUQnLCAnU0hBTEwnLCAnU0hBTEwKICAgICBOT1QnLCAnU0hPVUxEJywgJ1NIT1VMRCBOT1QnLCAnUkVDT01NRU5ERUQnLCAnTk9UIFJFQ09NTUVOREVEJywKICAgICAnTUFZJywgYW5kICdPUFRJT05BTCcgaW4gdGhpcyBkb2N1bWVudCBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMKICAgICBkZXNjcmliZWQgaW4gQkNQIDE0IChSRkMgMjExOSkgKFJGQyA4MTc0KSB3aGVuLCBhbmQgb25seSB3aGVuLAogICAgIHRoZXkgYXBwZWFyIGluIGFsbCBjYXBpdGFscywgYXMgc2hvd24gaGVyZS4KCiAgICAgQ29weXJpZ2h0IChjKSAyMDIyIElFVEYgVHJ1c3QgYW5kIHRoZSBwZXJzb25zIGlkZW50aWZpZWQgYXMKICAgICBhdXRob3JzIG9mIHRoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywKICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHVyc3VhbnQgdG8sCiAgICAgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgdGVybXMgY29udGFpbmVkIGluLCB0aGUKICAgICBSZXZpc2VkIEJTRCBMaWNlbnNlIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUKICAgICBJRVRGIFRydXN0J3MgTGVnYWwgUHJvdmlzaW9ucyBSZWxhdGluZyB0byBJRVRGIERvY3VtZW50cwogICAgIChodHRwczovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoaXMgWUFORyBtb2R1bGUgaXMgcGFydCBvZiBSRkMgOTE3OQogICAgIChodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9pbmZvL3JmYzkxNzkpOyBzZWUgdGhlIFJGQyBpdHNlbGYKICAgICBmb3IgZnVsbCBsZWdhbCBub3RpY2VzLiI7CgogIHJldmlzaW9uIDIwMjItMDItMTEgewogICAgZGVzY3JpcHRpb24KICAgICAgIkluaXRpYWwgUmV2aXNpb24iOwogICAgcmVmZXJlbmNlCiAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgfQoKICBmZWF0dXJlIGFsdGVybmF0ZS1zeXN0ZW1zIHsKICAgIGRlc2NyaXB0aW9uCiAgICAgICJUaGlzIGZlYXR1cmUgbWVhbnMgdGhlIGRldmljZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIGxvY2F0aW9ucwogICAgICAgdXNpbmcgYWx0ZXJuYXRlIHN5c3RlbXMgZm9yIHJlZmVyZW5jZSBmcmFtZXMuIjsKICB9CgogIGdyb3VwaW5nIGdlby1sb2NhdGlvbiB7CiAgICBkZXNjcmlwdGlvbgogICAgICAiR3JvdXBpbmcgdG8gaWRlbnRpZnkgYSBsb2NhdGlvbiBvbiBhbiBhc3Ryb25vbWljYWwgb2JqZWN0LiI7CgogICAgY29udGFpbmVyIGdlby1sb2NhdGlvbiB7CiAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIkEgbG9jYXRpb24gb24gYW4gYXN0cm9ub21pY2FsIGJvZHkgKGUuZy4sICdlYXJ0aCcpCiAgICAgICAgIHNvbWV3aGVyZSBpbiBhIHVuaXZlcnNlLiI7CgogICAgICBjb250YWluZXIgcmVmZXJlbmNlLWZyYW1lIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBGcmFtZSBvZiBSZWZlcmVuY2UgZm9yIHRoZSBsb2NhdGlvbiB2YWx1ZXMuIjsKCiAgICAgICAgbGVhZiBhbHRlcm5hdGUtc3lzdGVtIHsKICAgICAgICAgIGlmLWZlYXR1cmUgImFsdGVybmF0ZS1zeXN0ZW1zIjsKICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBzeXN0ZW0gaW4gd2hpY2ggdGhlIGFzdHJvbm9taWNhbCBib2R5IGFuZAogICAgICAgICAgICAgZ2VvZGV0aWMtZGF0dW0gaXMgZGVmaW5lZC4gIE5vcm1hbGx5LCB0aGlzIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAgcHJlc2VudCBhbmQgdGhlIHN5c3RlbSBpcyB0aGUgbmF0dXJhbCB1bml2ZXJzZTsgaG93ZXZlciwKICAgICAgICAgICAgIHdoZW4gcHJlc2VudCwgdGhpcyB2YWx1ZSBhbGxvd3MgZm9yIHNwZWNpZnlpbmcgYWx0ZXJuYXRlCiAgICAgICAgICAgICBzeXN0ZW1zIChlLmcuLCB2aXJ0dWFsIHJlYWxpdGllcykuICBBbiBhbHRlcm5hdGUtc3lzdGVtCiAgICAgICAgICAgICBtb2RpZmllcyB0aGUgZGVmaW5pdGlvbiAoYnV0IG5vdCB0aGUgdHlwZSkgb2YgdGhlIG90aGVyCiAgICAgICAgICAgICB2YWx1ZXMgaW4gdGhlIHJlZmVyZW5jZSBmcmFtZS4iOwogICAgICAgIH0KICAgICAgICBsZWFmIGFzdHJvbm9taWNhbC1ib2R5IHsKICAgICAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgfQogICAgICAgICAgZGVmYXVsdCAiZWFydGgiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFuIGFzdHJvbm9taWNhbCBib2R5IGFzIG5hbWVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsCiAgICAgICAgICAgICBBc3Ryb25vbWljYWwgVW5pb24gKElBVSkgb3IgYWNjb3JkaW5nIHRvIHRoZSBhbHRlcm5hdGUKICAgICAgICAgICAgIHN5c3RlbSBpZiBzcGVjaWZpZWQuICBFeGFtcGxlcyBpbmNsdWRlICdzdW4nIChvdXIgc3RhciksCiAgICAgICAgICAgICAnZWFydGgnIChvdXIgcGxhbmV0KSwgJ21vb24nIChvdXIgbW9vbiksICdlbmNlbGFkdXMnIChhCiAgICAgICAgICAgICBtb29uIG9mIFNhdHVybiksICdjZXJlcycgKGFuIGFzdGVyb2lkKSwgYW5kCiAgICAgICAgICAgICAnNjdwL2NodXJ5dW1vdi1nZXJhc2ltZW5rbyAoYSBjb21ldCkuICBUaGUgQVNDSUkgdmFsdWUKICAgICAgICAgICAgIFNIT1VMRCBoYXZlIHVwcGVyY2FzZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGFuZCBub3QKICAgICAgICAgICAgIGluY2x1ZGUgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuLCB2YWx1ZXMgMzIuLjY0LCBhbmQKICAgICAgICAgICAgIDkxLi4xMjYpLiAgQW55IHByZWNlZGluZyAndGhlJyBpbiB0aGUgbmFtZSBTSE9VTEQgTk9UIGJlCiAgICAgICAgICAgICBpbmNsdWRlZC4iOwogICAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAgICJodHRwczovL3d3dy5pYXUub3JnLyI7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lciBnZW9kZXRpYy1zeXN0ZW0gewogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBnZW9kZXRpYyBzeXN0ZW0gb2YgdGhlIGxvY2F0aW9uIGRhdGEuIjsKICAgICAgICAgIGxlYWYgZ2VvZGV0aWMtZGF0dW0gewogICAgICAgICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkEgZ2VvZGV0aWMtZGF0dW0gZGVmaW5pbmcgdGhlIG1lYW5pbmcgb2YgbGF0aXR1ZGUsCiAgICAgICAgICAgICAgIGxvbmdpdHVkZSwgYW5kIGhlaWdodC4gIFRoZSBkZWZhdWx0IHdoZW4gdGhlCiAgICAgICAgICAgICAgIGFzdHJvbm9taWNhbCBib2R5IGlzICdlYXJ0aCcgaXMgJ3dncy04NCcsIHdoaWNoIGlzCiAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIEdsb2JhbCBQb3NpdGlvbmluZyBTeXN0ZW0gKEdQUykuICBUaGUKICAgICAgICAgICAgICAgQVNDSUkgdmFsdWUgU0hPVUxEIGhhdmUgdXBwZXJjYXNlIGNvbnZlcnRlZCB0bwogICAgICAgICAgICAgICBsb3dlcmNhc2UgYW5kIG5vdCBpbmNsdWRlIGNvbnRyb2wgY2hhcmFjdGVycwogICAgICAgICAgICAgICAoaS5lLiwgdmFsdWVzIDMyLi42NCwgYW5kIDkxLi4xMjYpLiAgVGhlIElBTkEgcmVnaXN0cnkKICAgICAgICAgICAgICAgZnVydGhlciByZXN0cmljdHMgdGhlIHZhbHVlIGJ5IGNvbnZlcnRpbmcgYWxsIHNwYWNlcwogICAgICAgICAgICAgICAoJyAnKSB0byBkYXNoZXMgKCctJykuCiAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZ2VvZGV0aWMtZGF0dW0gaW5kaWNhdGVzCiAgICAgICAgICAgICAgIGhvdyBhY2N1cmF0ZWx5IGl0IG1vZGVscyB0aGUgYXN0cm9ub21pY2FsIGJvZHkgaW4KICAgICAgICAgICAgICAgcXVlc3Rpb24sIGJvdGggZm9yIHRoZSAnaG9yaXpvbnRhbCcKICAgICAgICAgICAgICAgbGF0aXR1ZGUvbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGFuZCBmb3IgaGVpZ2h0CiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiI7CiAgICAgICAgICAgIHJlZmVyZW5jZQogICAgICAgICAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucywKICAgICAgICAgICAgICAgU2VjdGlvbiA2LjEiOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBjb29yZC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgYWNjdXJhY3kgb2YgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBwYWlyIGZvcgogICAgICAgICAgICAgICBlbGxpcHNvaWRhbCBjb29yZGluYXRlcywgb3IgdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMKICAgICAgICAgICAgICAgZm9yIENhcnRlc2lhbiBjb29yZGluYXRlcy4gIFdoZW4gY29vcmQtYWNjdXJhY3kgaXMKICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBpdCBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgY29vcmRpbmF0ZXMKICAgICAgICAgICAgICAgaW4gdGhlIGFzc29jaWF0ZWQgbGlzdCBvZiBsb2NhdGlvbnMgaGF2ZSBiZWVuCiAgICAgICAgICAgICAgIGRldGVybWluZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbQogICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1kYXR1bS4gIEZvciBleGFtcGxlLCB0aGVyZQogICAgICAgICAgICAgICBtaWdodCBiZSB1bmNlcnRhaW50eSBkdWUgdG8gbWVhc3VyZW1lbnQgZXJyb3IgaWYgYW4KICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIG1lYXN1cmVtZW50IHdhcyBtYWRlIHRvIGRldGVybWluZSBlYWNoCiAgICAgICAgICAgICAgIGxvY2F0aW9uLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIGhlaWdodC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBoZWlnaHQgdmFsdWUgZm9yIGVsbGlwc29pZGFsCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOyB0aGlzIHZhbHVlIGlzIG5vdCB1c2VkIHdpdGggQ2FydGVzaWFuCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiAgV2hlbiBoZWlnaHQtYWNjdXJhY3kgaXMgc3BlY2lmaWVkLCBpdAogICAgICAgICAgICAgICBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgaGVpZ2h0cyBpbiB0aGUKICAgICAgICAgICAgICAgYXNzb2NpYXRlZCBsaXN0IG9mIGxvY2F0aW9ucyBoYXZlIGJlZW4gZGV0ZXJtaW5lZAogICAgICAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGRlZmluZWQgYnkgdGhlCiAgICAgICAgICAgICAgIGdlb2RldGljLWRhdHVtLiAgRm9yIGV4YW1wbGUsIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgICAgICAgIHVuY2VydGFpbnR5IGR1ZSB0byBtZWFzdXJlbWVudCBlcnJvciBpZiBhbgogICAgICAgICAgICAgICBleHBlcmltZW50YWwgbWVhc3VyZW1lbnQgd2FzIG1hZGUgdG8gZGV0ZXJtaW5lIGVhY2gKICAgICAgICAgICAgICAgbG9jYXRpb24uIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY2hvaWNlIGxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBsb2NhdGlvbiBkYXRhIGVpdGhlciBpbiBsYXRpdHVkZS9sb25naXR1ZGUgb3IKICAgICAgICAgICBDYXJ0ZXNpYW4gdmFsdWVzIjsKICAgICAgICBjYXNlIGVsbGlwc29pZCB7CiAgICAgICAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGxhdGl0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBsb25naXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJkZWNpbWFsIGRlZ3JlZXMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgbG9uZ2l0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBoZWlnaHQgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkhlaWdodCBmcm9tIGEgcmVmZXJlbmNlIDAgdmFsdWUuICBUaGUgcHJlY2lzaW9uIGFuZAogICAgICAgICAgICAgICAnMCcgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhc2UgY2FydGVzaWFuIHsKICAgICAgICAgIGxlYWYgeCB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIFggdmFsdWUgYXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIHkgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIlRoZSBZIHZhbHVlIGFzIGRlZmluZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiB6IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJtZXRlcnMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgWiB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29udGFpbmVyIHZlbG9jaXR5IHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIklmIHRoZSBvYmplY3QgaXMgaW4gbW90aW9uLCB0aGUgdmVsb2NpdHkgdmVjdG9yIGRlc2NyaWJlcwogICAgICAgICAgIHRoaXMgbW90aW9uIGF0IHRoZSB0aW1lIGdpdmVuIGJ5IHRoZSB0aW1lc3RhbXAuICBGb3IgYQogICAgICAgICAgIGZvcm11bGEgdG8gY29udmVydCB0aGVzZSB2YWx1ZXMgdG8gc3BlZWQgYW5kIGhlYWRpbmcsIHNlZQogICAgICAgICAgIFJGQyA5MTc5LiI7CiAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwoKICAgICAgICBsZWFmIHYtbm9ydGggewogICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTI7CiAgICAgICAgICB9CiAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgInYtbm9ydGggaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgdG93YXJkcwogICAgICAgICAgICAgdHJ1ZSBub3J0aCBhcyBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1zeXN0ZW0uIjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdi1lYXN0IHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LWVhc3QgaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgcGVycGVuZGljdWxhcgogICAgICAgICAgICAgdG8gdGhlIHJpZ2h0IG9mIHRydWUgbm9ydGggYXMgZGVmaW5lZCBieQogICAgICAgICAgICAgdGhlIGdlb2RldGljLXN5c3RlbS4iOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB2LXVwIHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LXVwIGlzIHRoZSByYXRlIG9mIGNoYW5nZSAoaS5lLiwgc3BlZWQpIGF3YXkgZnJvbSB0aGUKICAgICAgICAgICAgIGNlbnRlciBvZiBtYXNzLiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxlYWYgdGltZXN0YW1wIHsKICAgICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlJlZmVyZW5jZSB0aW1lIHdoZW4gbG9jYXRpb24gd2FzIHJlY29yZGVkLiI7CiAgICAgIH0KICAgICAgbGVhZiB2YWxpZC11bnRpbCB7CiAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICJUaGUgdGltZXN0YW1wIGZvciB3aGljaCB0aGlzIGdlby1sb2NhdGlvbiBpcyB2YWxpZCB1bnRpbC4KICAgICAgICAgICBJZiB1bnNwZWNpZmllZCwgdGhlIGdlby1sb2NhdGlvbiBoYXMgbm8gc3BlY2lmaWMKICAgICAgICAgICBleHBpcmF0aW9uIHRpbWUuIjsKICAgICAgfQogICAgfQogIH0KfQo=
ietf-inet-types urn:ietf:params:xml:ns:yang:ietf-inet-types \N [] 2013-07-15 bW9kdWxlIGlldGYtaW5ldC10eXBlcyB7CgogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYtaW5ldC10eXBlcyI7CiAgcHJlZml4ICJpbmV0IjsKCiAgb3JnYW5pemF0aW9uCiAgICJJRVRGIE5FVE1PRCAoTkVUQ09ORiBEYXRhIE1vZGVsaW5nIExhbmd1YWdlKSBXb3JraW5nIEdyb3VwIjsKCiAgY29udGFjdAogICAiV0cgV2ViOiAgIDxodHRwOi8vdG9vbHMuaWV0Zi5vcmcvd2cvbmV0bW9kLz4KICAgIFdHIExpc3Q6ICA8bWFpbHRvOm5ldG1vZEBpZXRmLm9yZz4KCiAgICBXRyBDaGFpcjogRGF2aWQgS2Vzc2VucwogICAgICAgICAgICAgIDxtYWlsdG86ZGF2aWQua2Vzc2Vuc0Buc24uY29tPgoKICAgIFdHIENoYWlyOiBKdWVyZ2VuIFNjaG9lbndhZWxkZXIKICAgICAgICAgICAgICA8bWFpbHRvOmouc2Nob2Vud2FlbGRlckBqYWNvYnMtdW5pdmVyc2l0eS5kZT4KCiAgICBFZGl0b3I6ICAgSnVlcmdlbiBTY2hvZW53YWVsZGVyCiAgICAgICAgICAgICAgPG1haWx0bzpqLnNjaG9lbndhZWxkZXJAamFjb2JzLXVuaXZlcnNpdHkuZGU+IjsKCiAgZGVzY3JpcHRpb24KICAgIlRoaXMgbW9kdWxlIGNvbnRhaW5zIGEgY29sbGVjdGlvbiBvZiBnZW5lcmFsbHkgdXNlZnVsIGRlcml2ZWQKICAgIFlBTkcgZGF0YSB0eXBlcyBmb3IgSW50ZXJuZXQgYWRkcmVzc2VzIGFuZCByZWxhdGVkIHRoaW5ncy4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMTMgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZCBhcwogICAgYXV0aG9ycyBvZiB0aGUgY29kZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgogICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwdXJzdWFudCB0bywgYW5kIHN1YmplY3QKICAgIHRvIHRoZSBsaWNlbnNlIHRlcm1zIGNvbnRhaW5lZCBpbiwgdGhlIFNpbXBsaWZpZWQgQlNEIExpY2Vuc2UKICAgIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUgSUVURiBUcnVzdCdzIExlZ2FsIFByb3Zpc2lvbnMKICAgIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzCiAgICAoaHR0cDovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICBUaGlzIHZlcnNpb24gb2YgdGhpcyBZQU5HIG1vZHVsZSBpcyBwYXJ0IG9mIFJGQyA2OTkxOyBzZWUKICAgIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsIG5vdGljZXMuIjsKCiAgcmV2aXNpb24gMjAxMy0wNy0xNSB7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGlzIHJldmlzaW9uIGFkZHMgdGhlIGZvbGxvd2luZyBuZXcgZGF0YSB0eXBlczoKICAgICAgLSBpcC1hZGRyZXNzLW5vLXpvbmUKICAgICAgLSBpcHY0LWFkZHJlc3Mtbm8tem9uZQogICAgICAtIGlwdjYtYWRkcmVzcy1uby16b25lIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNjk5MTogQ29tbW9uIFlBTkcgRGF0YSBUeXBlcyI7CiAgfQoKICByZXZpc2lvbiAyMDEwLTA5LTI0IHsKICAgIGRlc2NyaXB0aW9uCiAgICAgIkluaXRpYWwgcmV2aXNpb24uIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNjAyMTogQ29tbW9uIFlBTkcgRGF0YSBUeXBlcyI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2YgdHlwZXMgcmVsYXRlZCB0byBwcm90b2NvbCBmaWVsZHMgKioqLwoKICB0eXBlZGVmIGlwLXZlcnNpb24gewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gdW5rbm93biB7CiAgICAgICAgdmFsdWUgIjAiOwogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICJBbiB1bmtub3duIG9yIHVuc3BlY2lmaWVkIHZlcnNpb24gb2YgdGhlIEludGVybmV0CiAgICAgICAgICBwcm90b2NvbC4iOwogICAgICB9CiAgICAgIGVudW0gaXB2NCB7CiAgICAgICAgdmFsdWUgIjEiOwogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICJUaGUgSVB2NCBwcm90b2NvbCBhcyBkZWZpbmVkIGluIFJGQyA3OTEuIjsKICAgICAgfQogICAgICBlbnVtIGlwdjYgewogICAgICAgIHZhbHVlICIyIjsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAiVGhlIElQdjYgcHJvdG9jb2wgYXMgZGVmaW5lZCBpbiBSRkMgMjQ2MC4iOwogICAgICB9CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGlzIHZhbHVlIHJlcHJlc2VudHMgdGhlIHZlcnNpb24gb2YgdGhlIElQIHByb3RvY29sLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIEluZXRWZXJzaW9uIHRleHR1YWwgY29udmVudGlvbiBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgIDc5MTogSW50ZXJuZXQgUHJvdG9jb2wKICAgICAgUkZDIDI0NjA6IEludGVybmV0IFByb3RvY29sLCBWZXJzaW9uIDYgKElQdjYpIFNwZWNpZmljYXRpb24KICAgICAgUkZDIDQwMDE6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIEludGVybmV0IE5ldHdvcmsgQWRkcmVzc2VzIjsKICB9CgogIHR5cGVkZWYgZHNjcCB7CiAgICB0eXBlIHVpbnQ4IHsKICAgICAgcmFuZ2UgIjAuLjYzIjsKICAgIH0KICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBkc2NwIHR5cGUgcmVwcmVzZW50cyBhIERpZmZlcmVudGlhdGVkIFNlcnZpY2VzIENvZGUgUG9pbnQKICAgICAgdGhhdCBtYXkgYmUgdXNlZCBmb3IgbWFya2luZyBwYWNrZXRzIGluIGEgdHJhZmZpYyBzdHJlYW0uCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBEc2NwIHRleHR1YWwgY29udmVudGlvbiBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMzI4OTogTWFuYWdlbWVudCBJbmZvcm1hdGlvbiBCYXNlIGZvciB0aGUgRGlmZmVyZW50aWF0ZWQKICAgICAgICAgICAgICAgIFNlcnZpY2VzIEFyY2hpdGVjdHVyZQogICAgICBSRkMgMjQ3NDogRGVmaW5pdGlvbiBvZiB0aGUgRGlmZmVyZW50aWF0ZWQgU2VydmljZXMgRmllbGQKICAgICAgICAgICAgICAgIChEUyBGaWVsZCkgaW4gdGhlIElQdjQgYW5kIElQdjYgSGVhZGVycwogICAgICBSRkMgMjc4MDogSUFOQSBBbGxvY2F0aW9uIEd1aWRlbGluZXMgRm9yIFZhbHVlcyBJbgogICAgICAgICAgICAgICAgdGhlIEludGVybmV0IFByb3RvY29sIGFuZCBSZWxhdGVkIEhlYWRlcnMiOwogIH0KCiAgdHlwZWRlZiBpcHY2LWZsb3ctbGFiZWwgewogICAgdHlwZSB1aW50MzIgewogICAgICByYW5nZSAiMC4uMTA0ODU3NSI7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgaXB2Ni1mbG93LWxhYmVsIHR5cGUgcmVwcmVzZW50cyB0aGUgZmxvdyBpZGVudGlmaWVyIG9yIEZsb3cKICAgICAgTGFiZWwgaW4gYW4gSVB2NiBwYWNrZXQgaGVhZGVyIHRoYXQgbWF5IGJlIHVzZWQgdG8KICAgICAgZGlzY3JpbWluYXRlIHRyYWZmaWMgZmxvd3MuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgSVB2NkZsb3dMYWJlbCB0ZXh0dWFsIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDM1OTU6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIElQdjYgRmxvdyBMYWJlbAogICAgICBSRkMgMjQ2MDogSW50ZXJuZXQgUHJvdG9jb2wsIFZlcnNpb24gNiAoSVB2NikgU3BlY2lmaWNhdGlvbiI7CiAgfQoKICB0eXBlZGVmIHBvcnQtbnVtYmVyIHsKICAgIHR5cGUgdWludDE2IHsKICAgICAgcmFuZ2UgIjAuLjY1NTM1IjsKICAgIH0KICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBwb3J0LW51bWJlciB0eXBlIHJlcHJlc2VudHMgYSAxNi1iaXQgcG9ydCBudW1iZXIgb2YgYW4KICAgICAgSW50ZXJuZXQgdHJhbnNwb3J0LWxheWVyIHByb3RvY29sIHN1Y2ggYXMgVURQLCBUQ1AsIERDQ1AsIG9yCiAgICAgIFNDVFAuICBQb3J0IG51bWJlcnMgYXJlIGFzc2lnbmVkIGJ5IElBTkEuICBBIGN1cnJlbnQgbGlzdCBvZgogICAgICBhbGwgYXNzaWdubWVudHMgaXMgYXZhaWxhYmxlIGZyb20gPGh0dHA6Ly93d3cuaWFuYS5vcmcvPi4KCiAgICAgIE5vdGUgdGhhdCB0aGUgcG9ydCBudW1iZXIgdmFsdWUgemVybyBpcyByZXNlcnZlZCBieSBJQU5BLiAgSW4KICAgICAgc2l0dWF0aW9ucyB3aGVyZSB0aGUgdmFsdWUgemVybyBkb2VzIG5vdCBtYWtlIHNlbnNlLCBpdCBjYW4KICAgICAgYmUgZXhjbHVkZWQgYnkgc3VidHlwaW5nIHRoZSBwb3J0LW51bWJlciB0eXBlLgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgSW5ldFBvcnROdW1iZXIgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAgNzY4OiBVc2VyIERhdGFncmFtIFByb3RvY29sCiAgICAgIFJGQyAgNzkzOiBUcmFuc21pc3Npb24gQ29udHJvbCBQcm90b2NvbAogICAgICBSRkMgNDk2MDogU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sCiAgICAgIFJGQyA0MzQwOiBEYXRhZ3JhbSBDb25nZXN0aW9uIENvbnRyb2wgUHJvdG9jb2wgKERDQ1ApCiAgICAgIFJGQyA0MDAxOiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBJbnRlcm5ldCBOZXR3b3JrIEFkZHJlc3NlcyI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2YgdHlwZXMgcmVsYXRlZCB0byBhdXRvbm9tb3VzIHN5c3RlbXMgKioqLwoKICB0eXBlZGVmIGFzLW51bWJlciB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBhcy1udW1iZXIgdHlwZSByZXByZXNlbnRzIGF1dG9ub21vdXMgc3lzdGVtIG51bWJlcnMKICAgICAgd2hpY2ggaWRlbnRpZnkgYW4gQXV0b25vbW91cyBTeXN0ZW0gKEFTKS4gIEFuIEFTIGlzIGEgc2V0CiAgICAgIG9mIHJvdXRlcnMgdW5kZXIgYSBzaW5nbGUgdGVjaG5pY2FsIGFkbWluaXN0cmF0aW9uLCB1c2luZwogICAgICBhbiBpbnRlcmlvciBnYXRld2F5IHByb3RvY29sIGFuZCBjb21tb24gbWV0cmljcyB0byByb3V0ZQogICAgICBwYWNrZXRzIHdpdGhpbiB0aGUgQVMsIGFuZCB1c2luZyBhbiBleHRlcmlvciBnYXRld2F5CiAgICAgIHByb3RvY29sIHRvIHJvdXRlIHBhY2tldHMgdG8gb3RoZXIgQVNlcy4gIElBTkEgbWFpbnRhaW5zCiAgICAgIHRoZSBBUyBudW1iZXIgc3BhY2UgYW5kIGhhcyBkZWxlZ2F0ZWQgbGFyZ2UgcGFydHMgdG8gdGhlCiAgICAgIHJlZ2lvbmFsIHJlZ2lzdHJpZXMuCgogICAgICBBdXRvbm9tb3VzIHN5c3RlbSBudW1iZXJzIHdlcmUgb3JpZ2luYWxseSBsaW1pdGVkIHRvIDE2CiAgICAgIGJpdHMuICBCR1AgZXh0ZW5zaW9ucyBoYXZlIGVubGFyZ2VkIHRoZSBhdXRvbm9tb3VzIHN5c3RlbQogICAgICBudW1iZXIgc3BhY2UgdG8gMzIgYml0cy4gIFRoaXMgdHlwZSB0aGVyZWZvcmUgdXNlcyBhbiB1aW50MzIKICAgICAgYmFzZSB0eXBlIHdpdGhvdXQgYSByYW5nZSByZXN0cmljdGlvbiBpbiBvcmRlciB0byBzdXBwb3J0CiAgICAgIGEgbGFyZ2VyIGF1dG9ub21vdXMgc3lzdGVtIG51bWJlciBzcGFjZS4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBJbmV0QXV0b25vbW91c1N5c3RlbU51bWJlciB0ZXh0dWFsIGNvbnZlbnRpb24gb2YKICAgICAgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDE5MzA6IEd1aWRlbGluZXMgZm9yIGNyZWF0aW9uLCBzZWxlY3Rpb24sIGFuZCByZWdpc3RyYXRpb24KICAgICAgICAgICAgICAgIG9mIGFuIEF1dG9ub21vdXMgU3lzdGVtIChBUykKICAgICAgUkZDIDQyNzE6IEEgQm9yZGVyIEdhdGV3YXkgUHJvdG9jb2wgNCAoQkdQLTQpCiAgICAgIFJGQyA0MDAxOiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBJbnRlcm5ldCBOZXR3b3JrIEFkZHJlc3NlcwogICAgICBSRkMgNjc5MzogQkdQIFN1cHBvcnQgZm9yIEZvdXItT2N0ZXQgQXV0b25vbW91cyBTeXN0ZW0gKEFTKQogICAgICAgICAgICAgICAgTnVtYmVyIFNwYWNlIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiB0eXBlcyByZWxhdGVkIHRvIElQIGFkZHJlc3NlcyBhbmQgaG9zdG5hbWVzICoqKi8KCiAgdHlwZWRlZiBpcC1hZGRyZXNzIHsKICAgIHR5cGUgdW5pb24gewogICAgICB0eXBlIGluZXQ6aXB2NC1hZGRyZXNzOwogICAgICB0eXBlIGluZXQ6aXB2Ni1hZGRyZXNzOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAiVGhlIGlwLWFkZHJlc3MgdHlwZSByZXByZXNlbnRzIGFuIElQIGFkZHJlc3MgYW5kIGlzIElQCiAgICAgIHZlcnNpb24gbmV1dHJhbC4gIFRoZSBmb3JtYXQgb2YgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24KICAgICAgaW1wbGllcyB0aGUgSVAgdmVyc2lvbi4gIFRoaXMgdHlwZSBzdXBwb3J0cyBzY29wZWQgYWRkcmVzc2VzCiAgICAgIGJ5IGFsbG93aW5nIHpvbmUgaWRlbnRpZmllcnMgaW4gdGhlIGFkZHJlc3MgZm9ybWF0LiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDQwMDc6IElQdjYgU2NvcGVkIEFkZHJlc3MgQXJjaGl0ZWN0dXJlIjsKICB9CgogIHR5cGVkZWYgaXB2NC1hZGRyZXNzIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybgogICAgICAgICcoKFswLTldfFsxLTldWzAtOV18MVswLTldWzAtOV18MlswLTRdWzAtOV18MjVbMC01XSlcLil7M30nCiAgICAgICsgICcoWzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKScKICAgICAgKyAnKCVbXHB7Tn1ccHtMfV0rKT8nOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAgIlRoZSBpcHY0LWFkZHJlc3MgdHlwZSByZXByZXNlbnRzIGFuIElQdjQgYWRkcmVzcyBpbgogICAgICAgZG90dGVkLXF1YWQgbm90YXRpb24uICBUaGUgSVB2NCBhZGRyZXNzIG1heSBpbmNsdWRlIGEgem9uZQogICAgICAgaW5kZXgsIHNlcGFyYXRlZCBieSBhICUgc2lnbi4KCiAgICAgICBUaGUgem9uZSBpbmRleCBpcyB1c2VkIHRvIGRpc2FtYmlndWF0ZSBpZGVudGljYWwgYWRkcmVzcwogICAgICAgdmFsdWVzLiAgRm9yIGxpbmstbG9jYWwgYWRkcmVzc2VzLCB0aGUgem9uZSBpbmRleCB3aWxsCiAgICAgICB0eXBpY2FsbHkgYmUgdGhlIGludGVyZmFjZSBpbmRleCBudW1iZXIgb3IgdGhlIG5hbWUgb2YgYW4KICAgICAgIGludGVyZmFjZS4gIElmIHRoZSB6b25lIGluZGV4IGlzIG5vdCBwcmVzZW50LCB0aGUgZGVmYXVsdAogICAgICAgem9uZSBvZiB0aGUgZGV2aWNlIHdpbGwgYmUgdXNlZC4KCiAgICAgICBUaGUgY2Fub25pY2FsIGZvcm1hdCBmb3IgdGhlIHpvbmUgaW5kZXggaXMgdGhlIG51bWVyaWNhbAogICAgICAgZm9ybWF0IjsKICB9CgogIHR5cGVkZWYgaXB2Ni1hZGRyZXNzIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnKCg6fFswLTlhLWZBLUZdezAsNH0pOikoWzAtOWEtZkEtRl17MCw0fTopezAsNX0nCiAgICAgICAgICAgICsgJygoKFswLTlhLWZBLUZdezAsNH06KT8oOnxbMC05YS1mQS1GXXswLDR9KSl8JwogICAgICAgICAgICArICcoKCgyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV0/WzAtOV0pXC4pezN9JwogICAgICAgICAgICArICcoMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldP1swLTldKSkpJwogICAgICAgICAgICArICcoJVtccHtOfVxwe0x9XSspPyc7CiAgICAgIHBhdHRlcm4gJygoW146XSs6KXs2fSgoW146XSs6W146XSspfCguKlwuLiopKSl8JwogICAgICAgICAgICArICcoKChbXjpdKzopKlteOl0rKT86OigoW146XSs6KSpbXjpdKyk/KScKICAgICAgICAgICAgKyAnKCUuKyk/JzsKICAgIH0KICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBpcHY2LWFkZHJlc3MgdHlwZSByZXByZXNlbnRzIGFuIElQdjYgYWRkcmVzcyBpbiBmdWxsLAogICAgICBtaXhlZCwgc2hvcnRlbmVkLCBhbmQgc2hvcnRlbmVkLW1peGVkIG5vdGF0aW9uLiAgVGhlIElQdjYKICAgICAgYWRkcmVzcyBtYXkgaW5jbHVkZSBhIHpvbmUgaW5kZXgsIHNlcGFyYXRlZCBieSBhICUgc2lnbi4KCiAgICAgIFRoZSB6b25lIGluZGV4IGlzIHVzZWQgdG8gZGlzYW1iaWd1YXRlIGlkZW50aWNhbCBhZGRyZXNzCiAgICAgIHZhbHVlcy4gIEZvciBsaW5rLWxvY2FsIGFkZHJlc3NlcywgdGhlIHpvbmUgaW5kZXggd2lsbAogICAgICB0eXBpY2FsbHkgYmUgdGhlIGludGVyZmFjZSBpbmRleCBudW1iZXIgb3IgdGhlIG5hbWUgb2YgYW4KICAgICAgaW50ZXJmYWNlLiAgSWYgdGhlIHpvbmUgaW5kZXggaXMgbm90IHByZXNlbnQsIHRoZSBkZWZhdWx0CiAgICAgIHpvbmUgb2YgdGhlIGRldmljZSB3aWxsIGJlIHVzZWQuCgogICAgICBUaGUgY2Fub25pY2FsIGZvcm1hdCBvZiBJUHY2IGFkZHJlc3NlcyB1c2VzIHRoZSB0ZXh0dWFsCiAgICAgIHJlcHJlc2VudGF0aW9uIGRlZmluZWQgaW4gU2VjdGlvbiA0IG9mIFJGQyA1OTUyLiAgVGhlCiAgICAgIGNhbm9uaWNhbCBmb3JtYXQgZm9yIHRoZSB6b25lIGluZGV4IGlzIHRoZSBudW1lcmljYWwKICAgICAgZm9ybWF0IGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDExLjIgb2YgUkZDIDQwMDcuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNDI5MTogSVAgVmVyc2lvbiA2IEFkZHJlc3NpbmcgQXJjaGl0ZWN0dXJlCiAgICAgIFJGQyA0MDA3OiBJUHY2IFNjb3BlZCBBZGRyZXNzIEFyY2hpdGVjdHVyZQogICAgICBSRkMgNTk1MjogQSBSZWNvbW1lbmRhdGlvbiBmb3IgSVB2NiBBZGRyZXNzIFRleHQKICAgICAgICAgICAgICAgIFJlcHJlc2VudGF0aW9uIjsKICB9CgogIHR5cGVkZWYgaXAtYWRkcmVzcy1uby16b25lIHsKICAgIHR5cGUgdW5pb24gewogICAgICB0eXBlIGluZXQ6aXB2NC1hZGRyZXNzLW5vLXpvbmU7CiAgICAgIHR5cGUgaW5ldDppcHY2LWFkZHJlc3Mtbm8tem9uZTsKICAgIH0KICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBpcC1hZGRyZXNzLW5vLXpvbmUgdHlwZSByZXByZXNlbnRzIGFuIElQIGFkZHJlc3MgYW5kIGlzCiAgICAgIElQIHZlcnNpb24gbmV1dHJhbC4gIFRoZSBmb3JtYXQgb2YgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24KICAgICAgaW1wbGllcyB0aGUgSVAgdmVyc2lvbi4gIFRoaXMgdHlwZSBkb2VzIG5vdCBzdXBwb3J0IHNjb3BlZAogICAgICBhZGRyZXNzZXMgc2luY2UgaXQgZG9lcyBub3QgYWxsb3cgem9uZSBpZGVudGlmaWVycyBpbiB0aGUKICAgICAgYWRkcmVzcyBmb3JtYXQuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNDAwNzogSVB2NiBTY29wZWQgQWRkcmVzcyBBcmNoaXRlY3R1cmUiOwogIH0KCiAgdHlwZWRlZiBpcHY0LWFkZHJlc3Mtbm8tem9uZSB7CiAgICB0eXBlIGluZXQ6aXB2NC1hZGRyZXNzIHsKICAgICAgcGF0dGVybiAnWzAtOVwuXSonOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAgIkFuIElQdjQgYWRkcmVzcyB3aXRob3V0IGEgem9uZSBpbmRleC4gIFRoaXMgdHlwZSwgZGVyaXZlZCBmcm9tCiAgICAgICBpcHY0LWFkZHJlc3MsIG1heSBiZSB1c2VkIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHpvbmUgaXMKICAgICAgIGtub3duIGZyb20gdGhlIGNvbnRleHQgYW5kIGhlbmNlIG5vIHpvbmUgaW5kZXggaXMgbmVlZGVkLiI7CiAgfQoKICB0eXBlZGVmIGlwdjYtYWRkcmVzcy1uby16b25lIHsKICAgIHR5cGUgaW5ldDppcHY2LWFkZHJlc3MgewogICAgICBwYXR0ZXJuICdbMC05YS1mQS1GOlwuXSonOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAgIkFuIElQdjYgYWRkcmVzcyB3aXRob3V0IGEgem9uZSBpbmRleC4gIFRoaXMgdHlwZSwgZGVyaXZlZCBmcm9tCiAgICAgICBpcHY2LWFkZHJlc3MsIG1heSBiZSB1c2VkIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlIHpvbmUgaXMKICAgICAgIGtub3duIGZyb20gdGhlIGNvbnRleHQgYW5kIGhlbmNlIG5vIHpvbmUgaW5kZXggaXMgbmVlZGVkLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDQyOTE6IElQIFZlcnNpb24gNiBBZGRyZXNzaW5nIEFyY2hpdGVjdHVyZQogICAgICBSRkMgNDAwNzogSVB2NiBTY29wZWQgQWRkcmVzcyBBcmNoaXRlY3R1cmUKICAgICAgUkZDIDU5NTI6IEEgUmVjb21tZW5kYXRpb24gZm9yIElQdjYgQWRkcmVzcyBUZXh0CiAgICAgICAgICAgICAgICBSZXByZXNlbnRhdGlvbiI7CiAgfQoKICB0eXBlZGVmIGlwLXByZWZpeCB7CiAgICB0eXBlIHVuaW9uIHsKICAgICAgdHlwZSBpbmV0OmlwdjQtcHJlZml4OwogICAgICB0eXBlIGluZXQ6aXB2Ni1wcmVmaXg7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgaXAtcHJlZml4IHR5cGUgcmVwcmVzZW50cyBhbiBJUCBwcmVmaXggYW5kIGlzIElQCiAgICAgIHZlcnNpb24gbmV1dHJhbC4gIFRoZSBmb3JtYXQgb2YgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb25zCiAgICAgIGltcGxpZXMgdGhlIElQIHZlcnNpb24uIjsKICB9CgogIHR5cGVkZWYgaXB2NC1wcmVmaXggewogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuCiAgICAgICAgICcoKFswLTldfFsxLTldWzAtOV18MVswLTldWzAtOV18MlswLTRdWzAtOV18MjVbMC01XSlcLil7M30nCiAgICAgICArICAnKFswLTldfFsxLTldWzAtOV18MVswLTldWzAtOV18MlswLTRdWzAtOV18MjVbMC01XSknCiAgICAgICArICcvKChbMC05XSl8KFsxLTJdWzAtOV0pfCgzWzAtMl0pKSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgaXB2NC1wcmVmaXggdHlwZSByZXByZXNlbnRzIGFuIElQdjQgYWRkcmVzcyBwcmVmaXguCiAgICAgIFRoZSBwcmVmaXggbGVuZ3RoIGlzIGdpdmVuIGJ5IHRoZSBudW1iZXIgZm9sbG93aW5nIHRoZQogICAgICBzbGFzaCBjaGFyYWN0ZXIgYW5kIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDMyLgoKICAgICAgQSBwcmVmaXggbGVuZ3RoIHZhbHVlIG9mIG4gY29ycmVzcG9uZHMgdG8gYW4gSVAgYWRkcmVzcwogICAgICBtYXNrIHRoYXQgaGFzIG4gY29udGlndW91cyAxLWJpdHMgZnJvbSB0aGUgbW9zdAogICAgICBzaWduaWZpY2FudCBiaXQgKE1TQikgYW5kIGFsbCBvdGhlciBiaXRzIHNldCB0byAwLgoKICAgICAgVGhlIGNhbm9uaWNhbCBmb3JtYXQgb2YgYW4gSVB2NCBwcmVmaXggaGFzIGFsbCBiaXRzIG9mCiAgICAgIHRoZSBJUHY0IGFkZHJlc3Mgc2V0IHRvIHplcm8gdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlCiAgICAgIElQdjQgcHJlZml4LiI7CiAgfQoKICB0eXBlZGVmIGlwdjYtcHJlZml4IHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnKCg6fFswLTlhLWZBLUZdezAsNH0pOikoWzAtOWEtZkEtRl17MCw0fTopezAsNX0nCiAgICAgICAgICAgICsgJygoKFswLTlhLWZBLUZdezAsNH06KT8oOnxbMC05YS1mQS1GXXswLDR9KSl8JwogICAgICAgICAgICArICcoKCgyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV0/WzAtOV0pXC4pezN9JwogICAgICAgICAgICArICcoMjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldP1swLTldKSkpJwogICAgICAgICAgICArICcoLygoWzAtOV0pfChbMC05XXsyfSl8KDFbMC0xXVswLTldKXwoMTJbMC04XSkpKSc7CiAgICAgIHBhdHRlcm4gJygoW146XSs6KXs2fSgoW146XSs6W146XSspfCguKlwuLiopKSl8JwogICAgICAgICAgICArICcoKChbXjpdKzopKlteOl0rKT86OigoW146XSs6KSpbXjpdKyk/KScKICAgICAgICAgICAgKyAnKC8uKyknOwogICAgfQoKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBpcHY2LXByZWZpeCB0eXBlIHJlcHJlc2VudHMgYW4gSVB2NiBhZGRyZXNzIHByZWZpeC4KICAgICAgVGhlIHByZWZpeCBsZW5ndGggaXMgZ2l2ZW4gYnkgdGhlIG51bWJlciBmb2xsb3dpbmcgdGhlCiAgICAgIHNsYXNoIGNoYXJhY3RlciBhbmQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTI4LgoKICAgICAgQSBwcmVmaXggbGVuZ3RoIHZhbHVlIG9mIG4gY29ycmVzcG9uZHMgdG8gYW4gSVAgYWRkcmVzcwogICAgICBtYXNrIHRoYXQgaGFzIG4gY29udGlndW91cyAxLWJpdHMgZnJvbSB0aGUgbW9zdAogICAgICBzaWduaWZpY2FudCBiaXQgKE1TQikgYW5kIGFsbCBvdGhlciBiaXRzIHNldCB0byAwLgoKICAgICAgVGhlIElQdjYgYWRkcmVzcyBzaG91bGQgaGF2ZSBhbGwgYml0cyB0aGF0IGRvIG5vdCBiZWxvbmcKICAgICAgdG8gdGhlIHByZWZpeCBzZXQgdG8gemVyby4KCiAgICAgIFRoZSBjYW5vbmljYWwgZm9ybWF0IG9mIGFuIElQdjYgcHJlZml4IGhhcyBhbGwgYml0cyBvZgogICAgICB0aGUgSVB2NiBhZGRyZXNzIHNldCB0byB6ZXJvIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZQogICAgICBJUHY2IHByZWZpeC4gIEZ1cnRoZXJtb3JlLCB0aGUgSVB2NiBhZGRyZXNzIGlzIHJlcHJlc2VudGVkCiAgICAgIGFzIGRlZmluZWQgaW4gU2VjdGlvbiA0IG9mIFJGQyA1OTUyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDU5NTI6IEEgUmVjb21tZW5kYXRpb24gZm9yIElQdjYgQWRkcmVzcyBUZXh0CiAgICAgICAgICAgICAgICBSZXByZXNlbnRhdGlvbiI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2YgZG9tYWluIG5hbWUgYW5kIFVSSSB0eXBlcyAqKiovCgogIHR5cGVkZWYgZG9tYWluLW5hbWUgewogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuCiAgICAgICAgJygoKFthLXpBLVowLTlfXShbYS16QS1aMC05XC1fXSl7MCw2MX0pP1thLXpBLVowLTldXC4pKicKICAgICAgKyAnKFthLXpBLVowLTlfXShbYS16QS1aMC05XC1fXSl7MCw2MX0pP1thLXpBLVowLTldXC4/KScKICAgICAgKyAnfFwuJzsKICAgICAgbGVuZ3RoICIxLi4yNTMiOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAiVGhlIGRvbWFpbi1uYW1lIHR5cGUgcmVwcmVzZW50cyBhIEROUyBkb21haW4gbmFtZS4gIFRoZQogICAgICBuYW1lIFNIT1VMRCBiZSBmdWxseSBxdWFsaWZpZWQgd2hlbmV2ZXIgcG9zc2libGUuCgogICAgICBJbnRlcm5ldCBkb21haW4gbmFtZXMgYXJlIG9ubHkgbG9vc2VseSBzcGVjaWZpZWQuICBTZWN0aW9uCiAgICAgIDMuNSBvZiBSRkMgMTAzNCByZWNvbW1lbmRzIGEgc3ludGF4IChtb2RpZmllZCBpbiBTZWN0aW9uCiAgICAgIDIuMSBvZiBSRkMgMTEyMykuICBUaGUgcGF0dGVybiBhYm92ZSBpcyBpbnRlbmRlZCB0byBhbGxvdwogICAgICBmb3IgY3VycmVudCBwcmFjdGljZSBpbiBkb21haW4gbmFtZSB1c2UsIGFuZCBzb21lIHBvc3NpYmxlCiAgICAgIGZ1dHVyZSBleHBhbnNpb24uICBJdCBpcyBkZXNpZ25lZCB0byBob2xkIHZhcmlvdXMgdHlwZXMgb2YKICAgICAgZG9tYWluIG5hbWVzLCBpbmNsdWRpbmcgbmFtZXMgdXNlZCBmb3IgQSBvciBBQUFBIHJlY29yZHMKICAgICAgKGhvc3QgbmFtZXMpIGFuZCBvdGhlciByZWNvcmRzLCBzdWNoIGFzIFNSViByZWNvcmRzLiAgTm90ZQogICAgICB0aGF0IEludGVybmV0IGhvc3QgbmFtZXMgaGF2ZSBhIHN0cmljdGVyIHN5bnRheCAoZGVzY3JpYmVkCiAgICAgIGluIFJGQyA5NTIpIHRoYW4gdGhlIEROUyByZWNvbW1lbmRhdGlvbnMgaW4gUkZDcyAxMDM0IGFuZAogICAgICAxMTIzLCBhbmQgdGhhdCBzeXN0ZW1zIHRoYXQgd2FudCB0byBzdG9yZSBob3N0IG5hbWVzIGluCiAgICAgIHNjaGVtYSBub2RlcyB1c2luZyB0aGUgZG9tYWluLW5hbWUgdHlwZSBhcmUgcmVjb21tZW5kZWQgdG8KICAgICAgYWRoZXJlIHRvIHRoaXMgc3RyaWN0ZXIgc3RhbmRhcmQgdG8gZW5zdXJlIGludGVyb3BlcmFiaWxpdHkuCgogICAgICBUaGUgZW5jb2Rpbmcgb2YgRE5TIG5hbWVzIGluIHRoZSBETlMgcHJvdG9jb2wgaXMgbGltaXRlZAogICAgICB0byAyNTUgY2hhcmFjdGVycy4gIFNpbmNlIHRoZSBlbmNvZGluZyBjb25zaXN0cyBvZiBsYWJlbHMKICAgICAgcHJlZml4ZWQgYnkgYSBsZW5ndGggYnl0ZXMgYW5kIHRoZXJlIGlzIGEgdHJhaWxpbmcgTlVMTAogICAgICBieXRlLCBvbmx5IDI1MyBjaGFyYWN0ZXJzIGNhbiBhcHBlYXIgaW4gdGhlIHRleHR1YWwgZG90dGVkCiAgICAgIG5vdGF0aW9uLgoKICAgICAgVGhlIGRlc2NyaXB0aW9uIGNsYXVzZSBvZiBzY2hlbWEgbm9kZXMgdXNpbmcgdGhlIGRvbWFpbi1uYW1lCiAgICAgIHR5cGUgTVVTVCBkZXNjcmliZSB3aGVuIGFuZCBob3cgdGhlc2UgbmFtZXMgYXJlIHJlc29sdmVkIHRvCiAgICAgIElQIGFkZHJlc3Nlcy4gIE5vdGUgdGhhdCB0aGUgcmVzb2x1dGlvbiBvZiBhIGRvbWFpbi1uYW1lIHZhbHVlCiAgICAgIG1heSByZXF1aXJlIHRvIHF1ZXJ5IG11bHRpcGxlIEROUyByZWNvcmRzIChlLmcuLCBBIGZvciBJUHY0CiAgICAgIGFuZCBBQUFBIGZvciBJUHY2KS4gIFRoZSBvcmRlciBvZiB0aGUgcmVzb2x1dGlvbiBwcm9jZXNzIGFuZAogICAgICB3aGljaCBETlMgcmVjb3JkIHRha2VzIHByZWNlZGVuY2UgY2FuIGVpdGhlciBiZSBkZWZpbmVkCiAgICAgIGV4cGxpY2l0bHkgb3IgbWF5IGRlcGVuZCBvbiB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUKICAgICAgcmVzb2x2ZXIuCgogICAgICBEb21haW4tbmFtZSB2YWx1ZXMgdXNlIHRoZSBVUy1BU0NJSSBlbmNvZGluZy4gIFRoZWlyIGNhbm9uaWNhbAogICAgICBmb3JtYXQgdXNlcyBsb3dlcmNhc2UgVVMtQVNDSUkgY2hhcmFjdGVycy4gIEludGVybmF0aW9uYWxpemVkCiAgICAgIGRvbWFpbiBuYW1lcyBNVVNUIGJlIEEtbGFiZWxzIGFzIHBlciBSRkMgNTg5MC4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAgOTUyOiBEb0QgSW50ZXJuZXQgSG9zdCBUYWJsZSBTcGVjaWZpY2F0aW9uCiAgICAgIFJGQyAxMDM0OiBEb21haW4gTmFtZXMgLSBDb25jZXB0cyBhbmQgRmFjaWxpdGllcwogICAgICBSRkMgMTEyMzogUmVxdWlyZW1lbnRzIGZvciBJbnRlcm5ldCBIb3N0cyAtLSBBcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgYW5kIFN1cHBvcnQKICAgICAgUkZDIDI3ODI6IEEgRE5TIFJSIGZvciBzcGVjaWZ5aW5nIHRoZSBsb2NhdGlvbiBvZiBzZXJ2aWNlcwogICAgICAgICAgICAgICAgKEROUyBTUlYpCiAgICAgIFJGQyA1ODkwOiBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgaW4gQXBwbGljYXRpb25zCiAgICAgICAgICAgICAgICAoSUROQSk6IERlZmluaXRpb25zIGFuZCBEb2N1bWVudCBGcmFtZXdvcmsiOwogIH0KCiAgdHlwZWRlZiBob3N0IHsKICAgIHR5cGUgdW5pb24gewogICAgICB0eXBlIGluZXQ6aXAtYWRkcmVzczsKICAgICAgdHlwZSBpbmV0OmRvbWFpbi1uYW1lOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAiVGhlIGhvc3QgdHlwZSByZXByZXNlbnRzIGVpdGhlciBhbiBJUCBhZGRyZXNzIG9yIGEgRE5TCiAgICAgIGRvbWFpbiBuYW1lLiI7CiAgfQoKICB0eXBlZGVmIHVyaSB7CiAgICB0eXBlIHN0cmluZzsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSB1cmkgdHlwZSByZXByZXNlbnRzIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyCiAgICAgIChVUkkpIGFzIGRlZmluZWQgYnkgU1REIDY2LgoKICAgICAgT2JqZWN0cyB1c2luZyB0aGUgdXJpIHR5cGUgTVVTVCBiZSBpbiBVUy1BU0NJSSBlbmNvZGluZywKICAgICAgYW5kIE1VU1QgYmUgbm9ybWFsaXplZCBhcyBkZXNjcmliZWQgYnkgUkZDIDM5ODYgU2VjdGlvbnMKICAgICAgNi4yLjEsIDYuMi4yLjEsIGFuZCA2LjIuMi4yLiAgQWxsIHVubmVjZXNzYXJ5CiAgICAgIHBlcmNlbnQtZW5jb2RpbmcgaXMgcmVtb3ZlZCwgYW5kIGFsbCBjYXNlLWluc2Vuc2l0aXZlCiAgICAgIGNoYXJhY3RlcnMgYXJlIHNldCB0byBsb3dlcmNhc2UgZXhjZXB0IGZvciBoZXhhZGVjaW1hbAogICAgICBkaWdpdHMsIHdoaWNoIGFyZSBub3JtYWxpemVkIHRvIHVwcGVyY2FzZSBhcyBkZXNjcmliZWQgaW4KICAgICAgU2VjdGlvbiA2LjIuMi4xLgoKICAgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBub3JtYWxpemF0aW9uIGlzIHRvIGhlbHAgcHJvdmlkZQogICAgICB1bmlxdWUgVVJJcy4gIE5vdGUgdGhhdCB0aGlzIG5vcm1hbGl6YXRpb24gaXMgbm90CiAgICAgIHN1ZmZpY2llbnQgdG8gcHJvdmlkZSB1bmlxdWVuZXNzLiAgVHdvIFVSSXMgdGhhdCBhcmUKICAgICAgdGV4dHVhbGx5IGRpc3RpbmN0IGFmdGVyIHRoaXMgbm9ybWFsaXphdGlvbiBtYXkgc3RpbGwgYmUKICAgICAgZXF1aXZhbGVudC4KCiAgICAgIE9iamVjdHMgdXNpbmcgdGhlIHVyaSB0eXBlIG1heSByZXN0cmljdCB0aGUgc2NoZW1lcyB0aGF0CiAgICAgIHRoZXkgcGVybWl0LiAgRm9yIGV4YW1wbGUsICdkYXRhOicgYW5kICd1cm46JyBzY2hlbWVzCiAgICAgIG1pZ2h0IG5vdCBiZSBhcHByb3ByaWF0ZS4KCiAgICAgIEEgemVyby1sZW5ndGggVVJJIGlzIG5vdCBhIHZhbGlkIFVSSS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8KICAgICAgZXhwcmVzcyAnVVJJIGFic2VudCcgd2hlcmUgcmVxdWlyZWQuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgVXJpIFNNSXYyIHRleHR1YWwgY29udmVudGlvbiBkZWZpbmVkIGluIFJGQyA1MDE3LiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDM5ODY6IFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKTogR2VuZXJpYyBTeW50YXgKICAgICAgUkZDIDMzMDU6IFJlcG9ydCBmcm9tIHRoZSBKb2ludCBXM0MvSUVURiBVUkkgUGxhbm5pbmcgSW50ZXJlc3QKICAgICAgICAgICAgICAgIEdyb3VwOiBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzIChVUklzKSwgVVJMcywKICAgICAgICAgICAgICAgIGFuZCBVbmlmb3JtIFJlc291cmNlIE5hbWVzIChVUk5zKTogQ2xhcmlmaWNhdGlvbnMKICAgICAgICAgICAgICAgIGFuZCBSZWNvbW1lbmRhdGlvbnMKICAgICAgUkZDIDUwMTc6IE1JQiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBVbmlmb3JtIFJlc291cmNlCiAgICAgICAgICAgICAgICBJZGVudGlmaWVycyAoVVJJcykiOwogIH0KCn0K
ietf-yang-types urn:ietf:params:xml:ns:yang:ietf-yang-types \N [] 2013-07-15 bW9kdWxlIGlldGYteWFuZy10eXBlcyB7CgogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYteWFuZy10eXBlcyI7CiAgcHJlZml4ICJ5YW5nIjsKCiAgb3JnYW5pemF0aW9uCiAgICJJRVRGIE5FVE1PRCAoTkVUQ09ORiBEYXRhIE1vZGVsaW5nIExhbmd1YWdlKSBXb3JraW5nIEdyb3VwIjsKCiAgY29udGFjdAogICAiV0cgV2ViOiAgIDxodHRwOi8vdG9vbHMuaWV0Zi5vcmcvd2cvbmV0bW9kLz4KICAgIFdHIExpc3Q6ICA8bWFpbHRvOm5ldG1vZEBpZXRmLm9yZz4KCiAgICBXRyBDaGFpcjogRGF2aWQgS2Vzc2VucwogICAgICAgICAgICAgIDxtYWlsdG86ZGF2aWQua2Vzc2Vuc0Buc24uY29tPgoKICAgIFdHIENoYWlyOiBKdWVyZ2VuIFNjaG9lbndhZWxkZXIKICAgICAgICAgICAgICA8bWFpbHRvOmouc2Nob2Vud2FlbGRlckBqYWNvYnMtdW5pdmVyc2l0eS5kZT4KCiAgICBFZGl0b3I6ICAgSnVlcmdlbiBTY2hvZW53YWVsZGVyCiAgICAgICAgICAgICAgPG1haWx0bzpqLnNjaG9lbndhZWxkZXJAamFjb2JzLXVuaXZlcnNpdHkuZGU+IjsKCiAgZGVzY3JpcHRpb24KICAgIlRoaXMgbW9kdWxlIGNvbnRhaW5zIGEgY29sbGVjdGlvbiBvZiBnZW5lcmFsbHkgdXNlZnVsIGRlcml2ZWQKICAgIFlBTkcgZGF0YSB0eXBlcy4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMTMgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZCBhcwogICAgYXV0aG9ycyBvZiB0aGUgY29kZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgogICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwdXJzdWFudCB0bywgYW5kIHN1YmplY3QKICAgIHRvIHRoZSBsaWNlbnNlIHRlcm1zIGNvbnRhaW5lZCBpbiwgdGhlIFNpbXBsaWZpZWQgQlNEIExpY2Vuc2UKICAgIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUgSUVURiBUcnVzdCdzIExlZ2FsIFByb3Zpc2lvbnMKICAgIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzCiAgICAoaHR0cDovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICBUaGlzIHZlcnNpb24gb2YgdGhpcyBZQU5HIG1vZHVsZSBpcyBwYXJ0IG9mIFJGQyA2OTkxOyBzZWUKICAgIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsIG5vdGljZXMuIjsKCiAgcmV2aXNpb24gMjAxMy0wNy0xNSB7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGlzIHJldmlzaW9uIGFkZHMgdGhlIGZvbGxvd2luZyBuZXcgZGF0YSB0eXBlczoKICAgICAgLSB5YW5nLWlkZW50aWZpZXIKICAgICAgLSBoZXgtc3RyaW5nCiAgICAgIC0gdXVpZAogICAgICAtIGRvdHRlZC1xdWFkIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNjk5MTogQ29tbW9uIFlBTkcgRGF0YSBUeXBlcyI7CiAgfQoKICByZXZpc2lvbiAyMDEwLTA5LTI0IHsKICAgIGRlc2NyaXB0aW9uCiAgICAgIkluaXRpYWwgcmV2aXNpb24uIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNjAyMTogQ29tbW9uIFlBTkcgRGF0YSBUeXBlcyI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2YgY291bnRlciBhbmQgZ2F1Z2UgdHlwZXMgKioqLwoKICB0eXBlZGVmIGNvdW50ZXIzMiB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBjb3VudGVyMzIgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIKICAgICAgdGhhdCBtb25vdG9uaWNhbGx5IGluY3JlYXNlcyB1bnRpbCBpdCByZWFjaGVzIGEKICAgICAgbWF4aW11bSB2YWx1ZSBvZiAyXjMyLTEgKDQyOTQ5NjcyOTUgZGVjaW1hbCksIHdoZW4gaXQKICAgICAgd3JhcHMgYXJvdW5kIGFuZCBzdGFydHMgaW5jcmVhc2luZyBhZ2FpbiBmcm9tIHplcm8uCgogICAgICBDb3VudGVycyBoYXZlIG5vIGRlZmluZWQgJ2luaXRpYWwnIHZhbHVlLCBhbmQgdGh1cywgYQogICAgICBzaW5nbGUgdmFsdWUgb2YgYSBjb3VudGVyIGhhcyAoaW4gZ2VuZXJhbCkgbm8gaW5mb3JtYXRpb24KICAgICAgY29udGVudC4gIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCiAgICAgIHZhbHVlIG5vcm1hbGx5IG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZQogICAgICBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIHNwZWNpZmllZCBpbiB0aGUKICAgICAgZGVzY3JpcHRpb24gb2YgYSBzY2hlbWEgbm9kZSB1c2luZyB0aGlzIHR5cGUuICBJZiBzdWNoCiAgICAgIG90aGVyIHRpbWVzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHRoZSBjcmVhdGlvbiBvZgogICAgICBhIHNjaGVtYSBub2RlIG9mIHR5cGUgY291bnRlcjMyIGF0IHRpbWVzIG90aGVyIHRoYW4KICAgICAgcmUtaW5pdGlhbGl6YXRpb24sIHRoZW4gYSBjb3JyZXNwb25kaW5nIHNjaGVtYSBub2RlCiAgICAgIHNob3VsZCBiZSBkZWZpbmVkLCB3aXRoIGFuIGFwcHJvcHJpYXRlIHR5cGUsIHRvIGluZGljYXRlCiAgICAgIHRoZSBsYXN0IGRpc2NvbnRpbnVpdHkuCgogICAgICBUaGUgY291bnRlcjMyIHR5cGUgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjb25maWd1cmF0aW9uCiAgICAgIHNjaGVtYSBub2Rlcy4gIEEgZGVmYXVsdCBzdGF0ZW1lbnQgU0hPVUxEIE5PVCBiZSB1c2VkIGluCiAgICAgIGNvbWJpbmF0aW9uIHdpdGggdGhlIHR5cGUgY291bnRlcjMyLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIENvdW50ZXIzMiB0eXBlIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyNTc4OiBTdHJ1Y3R1cmUgb2YgTWFuYWdlbWVudCBJbmZvcm1hdGlvbiBWZXJzaW9uIDIKICAgICAgICAgICAgICAgIChTTUl2MikiOwogIH0KCiAgdHlwZWRlZiB6ZXJvLWJhc2VkLWNvdW50ZXIzMiB7CiAgICB0eXBlIHlhbmc6Y291bnRlcjMyOwogICAgZGVmYXVsdCAiMCI7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgemVyby1iYXNlZC1jb3VudGVyMzIgdHlwZSByZXByZXNlbnRzIGEgY291bnRlcjMyCiAgICAgIHRoYXQgaGFzIHRoZSBkZWZpbmVkICdpbml0aWFsJyB2YWx1ZSB6ZXJvLgoKICAgICAgQSBzY2hlbWEgbm9kZSBvZiB0aGlzIHR5cGUgd2lsbCBiZSBzZXQgdG8gemVybyAoMCkgb24gY3JlYXRpb24KICAgICAgYW5kIHdpbGwgdGhlcmVhZnRlciBpbmNyZWFzZSBtb25vdG9uaWNhbGx5IHVudGlsIGl0IHJlYWNoZXMKICAgICAgYSBtYXhpbXVtIHZhbHVlIG9mIDJeMzItMSAoNDI5NDk2NzI5NSBkZWNpbWFsKSwgd2hlbiBpdAogICAgICB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIFByb3ZpZGVkIHRoYXQgYW4gYXBwbGljYXRpb24gZGlzY292ZXJzIGEgbmV3IHNjaGVtYSBub2RlCiAgICAgIG9mIHRoaXMgdHlwZSB3aXRoaW4gdGhlIG1pbmltdW0gdGltZSB0byB3cmFwLCBpdCBjYW4gdXNlIHRoZQogICAgICAnaW5pdGlhbCcgdmFsdWUgYXMgYSBkZWx0YS4gIEl0IGlzIGltcG9ydGFudCBmb3IgYSBtYW5hZ2VtZW50CiAgICAgIHN0YXRpb24gdG8gYmUgYXdhcmUgb2YgdGhpcyBtaW5pbXVtIHRpbWUgYW5kIHRoZSBhY3R1YWwgdGltZQogICAgICBiZXR3ZWVuIHBvbGxzLCBhbmQgdG8gZGlzY2FyZCBkYXRhIGlmIHRoZSBhY3R1YWwgdGltZSBpcyB0b28KICAgICAgbG9uZyBvciB0aGVyZSBpcyBubyBkZWZpbmVkIG1pbmltdW0gdGltZS4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBaZXJvQmFzZWRDb3VudGVyMzIgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgICJSRkMgNDUwMjogUmVtb3RlIE5ldHdvcmsgTW9uaXRvcmluZyBNYW5hZ2VtZW50IEluZm9ybWF0aW9uCiAgICAgICAgICAgICAgICAgQmFzZSBWZXJzaW9uIDIiOwogIH0KCiAgdHlwZWRlZiBjb3VudGVyNjQgewogICAgdHlwZSB1aW50NjQ7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgY291bnRlcjY0IHR5cGUgcmVwcmVzZW50cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyCiAgICAgIHRoYXQgbW9ub3RvbmljYWxseSBpbmNyZWFzZXMgdW50aWwgaXQgcmVhY2hlcyBhCiAgICAgIG1heGltdW0gdmFsdWUgb2YgMl42NC0xICgxODQ0Njc0NDA3MzcwOTU1MTYxNSBkZWNpbWFsKSwKICAgICAgd2hlbiBpdCB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIENvdW50ZXJzIGhhdmUgbm8gZGVmaW5lZCAnaW5pdGlhbCcgdmFsdWUsIGFuZCB0aHVzLCBhCiAgICAgIHNpbmdsZSB2YWx1ZSBvZiBhIGNvdW50ZXIgaGFzIChpbiBnZW5lcmFsKSBubyBpbmZvcm1hdGlvbgogICAgICBjb250ZW50LiAgRGlzY29udGludWl0aWVzIGluIHRoZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcKICAgICAgdmFsdWUgbm9ybWFsbHkgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlCiAgICAgIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgc3BlY2lmaWVkIGluIHRoZQogICAgICBkZXNjcmlwdGlvbiBvZiBhIHNjaGVtYSBub2RlIHVzaW5nIHRoaXMgdHlwZS4gIElmIHN1Y2gKICAgICAgb3RoZXIgdGltZXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgdGhlIGNyZWF0aW9uIG9mCiAgICAgIGEgc2NoZW1hIG5vZGUgb2YgdHlwZSBjb3VudGVyNjQgYXQgdGltZXMgb3RoZXIgdGhhbgogICAgICByZS1pbml0aWFsaXphdGlvbiwgdGhlbiBhIGNvcnJlc3BvbmRpbmcgc2NoZW1hIG5vZGUKICAgICAgc2hvdWxkIGJlIGRlZmluZWQsIHdpdGggYW4gYXBwcm9wcmlhdGUgdHlwZSwgdG8gaW5kaWNhdGUKICAgICAgdGhlIGxhc3QgZGlzY29udGludWl0eS4KCiAgICAgIFRoZSBjb3VudGVyNjQgdHlwZSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24KICAgICAgc2NoZW1hIG5vZGVzLiAgQSBkZWZhdWx0IHN0YXRlbWVudCBTSE9VTEQgTk9UIGJlIHVzZWQgaW4KICAgICAgY29tYmluYXRpb24gd2l0aCB0aGUgdHlwZSBjb3VudGVyNjQuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgQ291bnRlcjY0IHR5cGUgb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDI1Nzg6IFN0cnVjdHVyZSBvZiBNYW5hZ2VtZW50IEluZm9ybWF0aW9uIFZlcnNpb24gMgogICAgICAgICAgICAgICAgKFNNSXYyKSI7CiAgfQoKICB0eXBlZGVmIHplcm8tYmFzZWQtY291bnRlcjY0IHsKICAgIHR5cGUgeWFuZzpjb3VudGVyNjQ7CiAgICBkZWZhdWx0ICIwIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSB6ZXJvLWJhc2VkLWNvdW50ZXI2NCB0eXBlIHJlcHJlc2VudHMgYSBjb3VudGVyNjQgdGhhdAogICAgICBoYXMgdGhlIGRlZmluZWQgJ2luaXRpYWwnIHZhbHVlIHplcm8uCgogICAgICBBIHNjaGVtYSBub2RlIG9mIHRoaXMgdHlwZSB3aWxsIGJlIHNldCB0byB6ZXJvICgwKSBvbiBjcmVhdGlvbgogICAgICBhbmQgd2lsbCB0aGVyZWFmdGVyIGluY3JlYXNlIG1vbm90b25pY2FsbHkgdW50aWwgaXQgcmVhY2hlcwogICAgICBhIG1heGltdW0gdmFsdWUgb2YgMl42NC0xICgxODQ0Njc0NDA3MzcwOTU1MTYxNSBkZWNpbWFsKSwKICAgICAgd2hlbiBpdCB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIFByb3ZpZGVkIHRoYXQgYW4gYXBwbGljYXRpb24gZGlzY292ZXJzIGEgbmV3IHNjaGVtYSBub2RlCiAgICAgIG9mIHRoaXMgdHlwZSB3aXRoaW4gdGhlIG1pbmltdW0gdGltZSB0byB3cmFwLCBpdCBjYW4gdXNlIHRoZQogICAgICAnaW5pdGlhbCcgdmFsdWUgYXMgYSBkZWx0YS4gIEl0IGlzIGltcG9ydGFudCBmb3IgYSBtYW5hZ2VtZW50CiAgICAgIHN0YXRpb24gdG8gYmUgYXdhcmUgb2YgdGhpcyBtaW5pbXVtIHRpbWUgYW5kIHRoZSBhY3R1YWwgdGltZQogICAgICBiZXR3ZWVuIHBvbGxzLCBhbmQgdG8gZGlzY2FyZCBkYXRhIGlmIHRoZSBhY3R1YWwgdGltZSBpcyB0b28KICAgICAgbG9uZyBvciB0aGVyZSBpcyBubyBkZWZpbmVkIG1pbmltdW0gdGltZS4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBaZXJvQmFzZWRDb3VudGVyNjQgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyODU2OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBBZGRpdGlvbmFsIEhpZ2ggQ2FwYWNpdHkKICAgICAgICAgICAgICAgIERhdGEgVHlwZXMiOwogIH0KCiAgdHlwZWRlZiBnYXVnZTMyIHsKICAgIHR5cGUgdWludDMyOwogICAgZGVzY3JpcHRpb24KICAgICAiVGhlIGdhdWdlMzIgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHdoaWNoCiAgICAgIG1heSBpbmNyZWFzZSBvciBkZWNyZWFzZSwgYnV0IHNoYWxsIG5ldmVyIGV4Y2VlZCBhIG1heGltdW0KICAgICAgdmFsdWUsIG5vciBmYWxsIGJlbG93IGEgbWluaW11bSB2YWx1ZS4gIFRoZSBtYXhpbXVtIHZhbHVlCiAgICAgIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMl4zMi0xICg0Mjk0OTY3Mjk1IGRlY2ltYWwpLCBhbmQKICAgICAgdGhlIG1pbmltdW0gdmFsdWUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLiAgVGhlIHZhbHVlIG9mCiAgICAgIGEgZ2F1Z2UzMiBoYXMgaXRzIG1heGltdW0gdmFsdWUgd2hlbmV2ZXIgdGhlIGluZm9ybWF0aW9uCiAgICAgIGJlaW5nIG1vZGVsZWQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGl0cyBtYXhpbXVtCiAgICAgIHZhbHVlLCBhbmQgaGFzIGl0cyBtaW5pbXVtIHZhbHVlIHdoZW5ldmVyIHRoZSBpbmZvcm1hdGlvbgogICAgICBiZWluZyBtb2RlbGVkIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBpdHMgbWluaW11bSB2YWx1ZS4KICAgICAgSWYgdGhlIGluZm9ybWF0aW9uIGJlaW5nIG1vZGVsZWQgc3Vic2VxdWVudGx5IGRlY3JlYXNlcwogICAgICBiZWxvdyAoaW5jcmVhc2VzIGFib3ZlKSB0aGUgbWF4aW11bSAobWluaW11bSkgdmFsdWUsIHRoZQogICAgICBnYXVnZTMyIGFsc28gZGVjcmVhc2VzIChpbmNyZWFzZXMpLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIEdhdWdlMzIgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgZ2F1Z2U2NCB7CiAgICB0eXBlIHVpbnQ2NDsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBnYXVnZTY0IHR5cGUgcmVwcmVzZW50cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB3aGljaAogICAgICBtYXkgaW5jcmVhc2Ugb3IgZGVjcmVhc2UsIGJ1dCBzaGFsbCBuZXZlciBleGNlZWQgYSBtYXhpbXVtCiAgICAgIHZhbHVlLCBub3IgZmFsbCBiZWxvdyBhIG1pbmltdW0gdmFsdWUuICBUaGUgbWF4aW11bSB2YWx1ZQogICAgICBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDJeNjQtMSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUpLCBhbmQKICAgICAgdGhlIG1pbmltdW0gdmFsdWUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLiAgVGhlIHZhbHVlIG9mCiAgICAgIGEgZ2F1Z2U2NCBoYXMgaXRzIG1heGltdW0gdmFsdWUgd2hlbmV2ZXIgdGhlIGluZm9ybWF0aW9uCiAgICAgIGJlaW5nIG1vZGVsZWQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGl0cyBtYXhpbXVtCiAgICAgIHZhbHVlLCBhbmQgaGFzIGl0cyBtaW5pbXVtIHZhbHVlIHdoZW5ldmVyIHRoZSBpbmZvcm1hdGlvbgogICAgICBiZWluZyBtb2RlbGVkIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBpdHMgbWluaW11bSB2YWx1ZS4KICAgICAgSWYgdGhlIGluZm9ybWF0aW9uIGJlaW5nIG1vZGVsZWQgc3Vic2VxdWVudGx5IGRlY3JlYXNlcwogICAgICBiZWxvdyAoaW5jcmVhc2VzIGFib3ZlKSB0aGUgbWF4aW11bSAobWluaW11bSkgdmFsdWUsIHRoZQogICAgICBnYXVnZTY0IGFsc28gZGVjcmVhc2VzIChpbmNyZWFzZXMpLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIENvdW50ZXJCYXNlZEdhdWdlNjQgU01JdjIgdGV4dHVhbCBjb252ZW50aW9uIGRlZmluZWQKICAgICAgaW4gUkZDIDI4NTYiOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyODU2OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBBZGRpdGlvbmFsIEhpZ2ggQ2FwYWNpdHkKICAgICAgICAgICAgICAgIERhdGEgVHlwZXMiOwogIH0KCiAgLyoqKiBjb2xsZWN0aW9uIG9mIGlkZW50aWZpZXItcmVsYXRlZCB0eXBlcyAqKiovCgogIHR5cGVkZWYgb2JqZWN0LWlkZW50aWZpZXIgewogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICcoKFswLTFdKFwuWzEtM10/WzAtOV0pKXwoMlwuKDB8KFsxLTldXGQqKSkpKScKICAgICAgICAgICAgKyAnKFwuKDB8KFsxLTldXGQqKSkpKic7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgb2JqZWN0LWlkZW50aWZpZXIgdHlwZSByZXByZXNlbnRzIGFkbWluaXN0cmF0aXZlbHkKICAgICAgYXNzaWduZWQgbmFtZXMgaW4gYSByZWdpc3RyYXRpb24taGllcmFyY2hpY2FsLW5hbWUgdHJlZS4KCiAgICAgIFZhbHVlcyBvZiB0aGlzIHR5cGUgYXJlIGRlbm90ZWQgYXMgYSBzZXF1ZW5jZSBvZiBudW1lcmljYWwKICAgICAgbm9uLW5lZ2F0aXZlIHN1Yi1pZGVudGlmaWVyIHZhbHVlcy4gIEVhY2ggc3ViLWlkZW50aWZpZXIKICAgICAgdmFsdWUgTVVTVCBOT1QgZXhjZWVkIDJeMzItMSAoNDI5NDk2NzI5NSkuICBTdWItaWRlbnRpZmllcnMKICAgICAgYXJlIHNlcGFyYXRlZCBieSBzaW5nbGUgZG90cyBhbmQgd2l0aG91dCBhbnkgaW50ZXJtZWRpYXRlCiAgICAgIHdoaXRlc3BhY2UuCgogICAgICBUaGUgQVNOLjEgc3RhbmRhcmQgcmVzdHJpY3RzIHRoZSB2YWx1ZSBzcGFjZSBvZiB0aGUgZmlyc3QKICAgICAgc3ViLWlkZW50aWZpZXIgdG8gMCwgMSwgb3IgMi4gIEZ1cnRoZXJtb3JlLCB0aGUgdmFsdWUgc3BhY2UKICAgICAgb2YgdGhlIHNlY29uZCBzdWItaWRlbnRpZmllciBpcyByZXN0cmljdGVkIHRvIHRoZSByYW5nZQogICAgICAwIHRvIDM5IGlmIHRoZSBmaXJzdCBzdWItaWRlbnRpZmllciBpcyAwIG9yIDEuICBGaW5hbGx5LAogICAgICB0aGUgQVNOLjEgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBhbiBvYmplY3QgaWRlbnRpZmllcgogICAgICBoYXMgYWx3YXlzIGF0IGxlYXN0IHR3byBzdWItaWRlbnRpZmllcnMuICBUaGUgcGF0dGVybgogICAgICBjYXB0dXJlcyB0aGVzZSByZXN0cmljdGlvbnMuCgogICAgICBBbHRob3VnaCB0aGUgbnVtYmVyIG9mIHN1Yi1pZGVudGlmaWVycyBpcyBub3QgbGltaXRlZCwKICAgICAgbW9kdWxlIGRlc2lnbmVycyBzaG91bGQgcmVhbGl6ZSB0aGF0IHRoZXJlIG1heSBiZQogICAgICBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdGljayB3aXRoIHRoZSBTTUl2MiBsaW1pdCBvZiAxMjgKICAgICAgc3ViLWlkZW50aWZpZXJzLgoKICAgICAgVGhpcyB0eXBlIGlzIGEgc3VwZXJzZXQgb2YgdGhlIFNNSXYyIE9CSkVDVCBJREVOVElGSUVSIHR5cGUKICAgICAgc2luY2UgaXQgaXMgbm90IHJlc3RyaWN0ZWQgdG8gMTI4IHN1Yi1pZGVudGlmaWVycy4gIEhlbmNlLAogICAgICB0aGlzIHR5cGUgU0hPVUxEIE5PVCBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgU01JdjIgT0JKRUNUCiAgICAgIElERU5USUZJRVIgdHlwZTsgdGhlIG9iamVjdC1pZGVudGlmaWVyLTEyOCB0eXBlIFNIT1VMRCBiZQogICAgICB1c2VkIGluc3RlYWQuIjsKICAgIHJlZmVyZW5jZQogICAgICJJU085ODM0LTE6IEluZm9ybWF0aW9uIHRlY2hub2xvZ3kgLS0gT3BlbiBTeXN0ZW1zCiAgICAgIEludGVyY29ubmVjdGlvbiAtLSBQcm9jZWR1cmVzIGZvciB0aGUgb3BlcmF0aW9uIG9mIE9TSQogICAgICBSZWdpc3RyYXRpb24gQXV0aG9yaXRpZXM6IEdlbmVyYWwgcHJvY2VkdXJlcyBhbmQgdG9wCiAgICAgIGFyY3Mgb2YgdGhlIEFTTi4xIE9iamVjdCBJZGVudGlmaWVyIHRyZWUiOwogIH0KCiAgdHlwZWRlZiBvYmplY3QtaWRlbnRpZmllci0xMjggewogICAgdHlwZSBvYmplY3QtaWRlbnRpZmllciB7CiAgICAgIHBhdHRlcm4gJ1xkKihcLlxkKil7MSwxMjd9JzsKICAgIH0KICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoaXMgdHlwZSByZXByZXNlbnRzIG9iamVjdC1pZGVudGlmaWVycyByZXN0cmljdGVkIHRvIDEyOAogICAgICBzdWItaWRlbnRpZmllcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgT0JKRUNUIElERU5USUZJRVIgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgeWFuZy1pZGVudGlmaWVyIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgbGVuZ3RoICIxLi5tYXgiOwogICAgICBwYXR0ZXJuICdbYS16QS1aX11bYS16QS1aMC05XC1fLl0qJzsKICAgICAgcGF0dGVybiAnLnwuLnxbXnhYXS4qfC5bXm1NXS4qfC4uW15sTF0uKic7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICAiQSBZQU5HIGlkZW50aWZpZXIgc3RyaW5nIGFzIGRlZmluZWQgYnkgdGhlICdpZGVudGlmaWVyJwogICAgICAgcnVsZSBpbiBTZWN0aW9uIDEyIG9mIFJGQyA2MDIwLiAgQW4gaWRlbnRpZmllciBtdXN0CiAgICAgICBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyIG9yIGFuIHVuZGVyc2NvcmUKICAgICAgIGZvbGxvd2VkIGJ5IGFuIGFyYml0cmFyeSBzZXF1ZW5jZSBvZiBhbHBoYWJldGljIG9yCiAgICAgICBudW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBoeXBoZW5zLCBvciBkb3RzLgoKICAgICAgIEEgWUFORyBpZGVudGlmaWVyIE1VU1QgTk9UIHN0YXJ0IHdpdGggYW55IHBvc3NpYmxlCiAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgbG93ZXJjYXNlIG9yIHVwcGVyY2FzZSBjaGFyYWN0ZXIKICAgICAgIHNlcXVlbmNlICd4bWwnLiI7CiAgICByZWZlcmVuY2UKICAgICAgIlJGQyA2MDIwOiBZQU5HIC0gQSBEYXRhIE1vZGVsaW5nIExhbmd1YWdlIGZvciB0aGUgTmV0d29yawogICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gUHJvdG9jb2wgKE5FVENPTkYpIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiB0eXBlcyByZWxhdGVkIHRvIGRhdGUgYW5kIHRpbWUqKiovCgogIHR5cGVkZWYgZGF0ZS1hbmQtdGltZSB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJ1xkezR9LVxkezJ9LVxkezJ9VFxkezJ9OlxkezJ9OlxkezJ9KFwuXGQrKT8nCiAgICAgICAgICAgICsgJyhafFtcK1wtXVxkezJ9OlxkezJ9KSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgZGF0ZS1hbmQtdGltZSB0eXBlIGlzIGEgcHJvZmlsZSBvZiB0aGUgSVNPIDg2MDEKICAgICAgc3RhbmRhcmQgZm9yIHJlcHJlc2VudGF0aW9uIG9mIGRhdGVzIGFuZCB0aW1lcyB1c2luZyB0aGUKICAgICAgR3JlZ29yaWFuIGNhbGVuZGFyLiAgVGhlIHByb2ZpbGUgaXMgZGVmaW5lZCBieSB0aGUKICAgICAgZGF0ZS10aW1lIHByb2R1Y3Rpb24gaW4gU2VjdGlvbiA1LjYgb2YgUkZDIDMzMzkuCgogICAgICBUaGUgZGF0ZS1hbmQtdGltZSB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZGF0ZVRpbWUgWE1MCiAgICAgIHNjaGVtYSB0eXBlIHdpdGggdGhlIGZvbGxvd2luZyBub3RhYmxlIGV4Y2VwdGlvbnM6CgogICAgICAoYSkgVGhlIGRhdGUtYW5kLXRpbWUgdHlwZSBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSB5ZWFycy4KCiAgICAgIChiKSBUaGUgZGF0ZS1hbmQtdGltZSB0aW1lLW9mZnNldCAtMDA6MDAgaW5kaWNhdGVzIGFuIHVua25vd24KICAgICAgICAgIHRpbWUgem9uZSAoc2VlIFJGQyAzMzM5KSB3aGlsZSAtMDA6MDAgYW5kICswMDowMCBhbmQgWgogICAgICAgICAgYWxsIHJlcHJlc2VudCB0aGUgc2FtZSB0aW1lIHpvbmUgaW4gZGF0ZVRpbWUuCgogICAgICAoYykgVGhlIGNhbm9uaWNhbCBmb3JtYXQgKHNlZSBiZWxvdykgb2YgZGF0YS1hbmQtdGltZSB2YWx1ZXMKICAgICAgICAgIGRpZmZlcnMgZnJvbSB0aGUgY2Fub25pY2FsIGZvcm1hdCB1c2VkIGJ5IHRoZSBkYXRlVGltZSBYTUwKICAgICAgICAgIHNjaGVtYSB0eXBlLCB3aGljaCByZXF1aXJlcyBhbGwgdGltZXMgdG8gYmUgaW4gVVRDIHVzaW5nCiAgICAgICAgICB0aGUgdGltZS1vZmZzZXQgJ1onLgoKICAgICAgVGhpcyB0eXBlIGlzIG5vdCBlcXVpdmFsZW50IHRvIHRoZSBEYXRlQW5kVGltZSB0ZXh0dWFsCiAgICAgIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyIHNpbmNlIFJGQyAzMzM5IHVzZXMgYSBkaWZmZXJlbnQKICAgICAgc2VwYXJhdG9yIGJldHdlZW4gZnVsbC1kYXRlIGFuZCBmdWxsLXRpbWUgYW5kIHByb3ZpZGVzCiAgICAgIGhpZ2hlciByZXNvbHV0aW9uIG9mIHRpbWUtc2VjZnJhYy4KCiAgICAgIFRoZSBjYW5vbmljYWwgZm9ybWF0IGZvciBkYXRlLWFuZC10aW1lIHZhbHVlcyB3aXRoIGEga25vd24gdGltZQogICAgICB6b25lIHVzZXMgYSBudW1lcmljIHRpbWUgem9uZSBvZmZzZXQgdGhhdCBpcyBjYWxjdWxhdGVkIHVzaW5nCiAgICAgIHRoZSBkZXZpY2UncyBjb25maWd1cmVkIGtub3duIG9mZnNldCB0byBVVEMgdGltZS4gIEEgY2hhbmdlIG9mCiAgICAgIHRoZSBkZXZpY2UncyBvZmZzZXQgdG8gVVRDIHRpbWUgd2lsbCBjYXVzZSBkYXRlLWFuZC10aW1lIHZhbHVlcwogICAgICB0byBjaGFuZ2UgYWNjb3JkaW5nbHkuICBTdWNoIGNoYW5nZXMgbWlnaHQgaGFwcGVuIHBlcmlvZGljYWxseQogICAgICBpbiBjYXNlIGEgc2VydmVyIGZvbGxvd3MgYXV0b21hdGljYWxseSBkYXlsaWdodCBzYXZpbmcgdGltZQogICAgICAoRFNUKSB0aW1lIHpvbmUgb2Zmc2V0IGNoYW5nZXMuICBUaGUgY2Fub25pY2FsIGZvcm1hdCBmb3IKICAgICAgZGF0ZS1hbmQtdGltZSB2YWx1ZXMgd2l0aCBhbiB1bmtub3duIHRpbWUgem9uZSAodXN1YWxseQogICAgICByZWZlcnJpbmcgdG8gdGhlIG5vdGlvbiBvZiBsb2NhbCB0aW1lKSB1c2VzIHRoZSB0aW1lLW9mZnNldAogICAgICAtMDA6MDAuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMzMzOTogRGF0ZSBhbmQgVGltZSBvbiB0aGUgSW50ZXJuZXQ6IFRpbWVzdGFtcHMKICAgICAgUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyCiAgICAgIFhTRC1UWVBFUzogWE1MIFNjaGVtYSBQYXJ0IDI6IERhdGF0eXBlcyBTZWNvbmQgRWRpdGlvbiI7CiAgfQoKICB0eXBlZGVmIHRpbWV0aWNrcyB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSB0aW1ldGlja3MgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdGhhdAogICAgICByZXByZXNlbnRzIHRoZSB0aW1lLCBtb2R1bG8gMl4zMiAoNDI5NDk2NzI5NiBkZWNpbWFsKSwgaW4KICAgICAgaHVuZHJlZHRocyBvZiBhIHNlY29uZCBiZXR3ZWVuIHR3byBlcG9jaHMuICBXaGVuIGEgc2NoZW1hCiAgICAgIG5vZGUgaXMgZGVmaW5lZCB0aGF0IHVzZXMgdGhpcyB0eXBlLCB0aGUgZGVzY3JpcHRpb24gb2YKICAgICAgdGhlIHNjaGVtYSBub2RlIGlkZW50aWZpZXMgYm90aCBvZiB0aGUgcmVmZXJlbmNlIGVwb2Nocy4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBUaW1lVGlja3MgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgdGltZXN0YW1wIHsKICAgIHR5cGUgeWFuZzp0aW1ldGlja3M7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgdGltZXN0YW1wIHR5cGUgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2YgYW4gYXNzb2NpYXRlZAogICAgICB0aW1ldGlja3Mgc2NoZW1hIG5vZGUgYXQgd2hpY2ggYSBzcGVjaWZpYyBvY2N1cnJlbmNlCiAgICAgIGhhcHBlbmVkLiAgVGhlIHNwZWNpZmljIG9jY3VycmVuY2UgbXVzdCBiZSBkZWZpbmVkIGluIHRoZQogICAgICBkZXNjcmlwdGlvbiBvZiBhbnkgc2NoZW1hIG5vZGUgZGVmaW5lZCB1c2luZyB0aGlzIHR5cGUuICBXaGVuCiAgICAgIHRoZSBzcGVjaWZpYyBvY2N1cnJlbmNlIG9jY3VycmVkIHByaW9yIHRvIHRoZSBsYXN0IHRpbWUgdGhlCiAgICAgIGFzc29jaWF0ZWQgdGltZXRpY2tzIGF0dHJpYnV0ZSB3YXMgemVybywgdGhlbiB0aGUgdGltZXN0YW1wCiAgICAgIHZhbHVlIGlzIHplcm8uICBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBhbGwgdGltZXN0YW1wIHZhbHVlcwogICAgICB0byBiZSByZXNldCB0byB6ZXJvIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIHRpbWV0aWNrcwogICAgICBhdHRyaWJ1dGUgcmVhY2hlcyA0OTcrIGRheXMgYW5kIHdyYXBzIGFyb3VuZCB0byB6ZXJvLgoKICAgICAgVGhlIGFzc29jaWF0ZWQgdGltZXRpY2tzIHNjaGVtYSBub2RlIG11c3QgYmUgc3BlY2lmaWVkCiAgICAgIGluIHRoZSBkZXNjcmlwdGlvbiBvZiBhbnkgc2NoZW1hIG5vZGUgdXNpbmcgdGhpcyB0eXBlLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIFRpbWVTdGFtcCB0ZXh0dWFsIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiBnZW5lcmljIGFkZHJlc3MgdHlwZXMgKioqLwoKICB0eXBlZGVmIHBoeXMtYWRkcmVzcyB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJyhbMC05YS1mQS1GXXsyfSg6WzAtOWEtZkEtRl17Mn0pKik/JzsKICAgIH0KCiAgICBkZXNjcmlwdGlvbgogICAgICJSZXByZXNlbnRzIG1lZGlhLSBvciBwaHlzaWNhbC1sZXZlbCBhZGRyZXNzZXMgcmVwcmVzZW50ZWQKICAgICAgYXMgYSBzZXF1ZW5jZSBvY3RldHMsIGVhY2ggb2N0ZXQgcmVwcmVzZW50ZWQgYnkgdHdvIGhleGFkZWNpbWFsCiAgICAgIG51bWJlcnMuICBPY3RldHMgYXJlIHNlcGFyYXRlZCBieSBjb2xvbnMuICBUaGUgY2Fub25pY2FsCiAgICAgIHJlcHJlc2VudGF0aW9uIHVzZXMgbG93ZXJjYXNlIGNoYXJhY3RlcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgUGh5c0FkZHJlc3MgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyNTc5OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBTTUl2MiI7CiAgfQoKICB0eXBlZGVmIG1hYy1hZGRyZXNzIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnWzAtOWEtZkEtRl17Mn0oOlswLTlhLWZBLUZdezJ9KXs1fSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgbWFjLWFkZHJlc3MgdHlwZSByZXByZXNlbnRzIGFuIElFRUUgODAyIE1BQyBhZGRyZXNzLgogICAgICBUaGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIHVzZXMgbG93ZXJjYXNlIGNoYXJhY3RlcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgTWFjQWRkcmVzcyB0ZXh0dWFsIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiSUVFRSA4MDI6IElFRUUgU3RhbmRhcmQgZm9yIExvY2FsIGFuZCBNZXRyb3BvbGl0YW4gQXJlYQogICAgICAgICAgICAgICAgTmV0d29ya3M6IE92ZXJ2aWV3IGFuZCBBcmNoaXRlY3R1cmUKICAgICAgUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiBYTUwtc3BlY2lmaWMgdHlwZXMgKioqLwoKICB0eXBlZGVmIHhwYXRoMS4wIHsKICAgIHR5cGUgc3RyaW5nOwogICAgZGVzY3JpcHRpb24KICAgICAiVGhpcyB0eXBlIHJlcHJlc2VudHMgYW4gWFBBVEggMS4wIGV4cHJlc3Npb24uCgogICAgICBXaGVuIGEgc2NoZW1hIG5vZGUgaXMgZGVmaW5lZCB0aGF0IHVzZXMgdGhpcyB0eXBlLCB0aGUKICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIHNjaGVtYSBub2RlIE1VU1Qgc3BlY2lmeSB0aGUgWFBhdGgKICAgICAgY29udGV4dCBpbiB3aGljaCB0aGUgWFBhdGggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuIjsKICAgIHJlZmVyZW5jZQogICAgICJYUEFUSDogWE1MIFBhdGggTGFuZ3VhZ2UgKFhQYXRoKSBWZXJzaW9uIDEuMCI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2Ygc3RyaW5nIHR5cGVzICoqKi8KCiAgdHlwZWRlZiBoZXgtc3RyaW5nIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnKFswLTlhLWZBLUZdezJ9KDpbMC05YS1mQS1GXXsyfSkqKT8nOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAiQSBoZXhhZGVjaW1hbCBzdHJpbmcgd2l0aCBvY3RldHMgcmVwcmVzZW50ZWQgYXMgaGV4IGRpZ2l0cwogICAgICBzZXBhcmF0ZWQgYnkgY29sb25zLiAgVGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiB1c2VzCiAgICAgIGxvd2VyY2FzZSBjaGFyYWN0ZXJzLiI7CiAgfQoKICB0eXBlZGVmIHV1aWQgewogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS0nCiAgICAgICAgICAgICsgJ1swLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJBIFVuaXZlcnNhbGx5IFVuaXF1ZSBJRGVudGlmaWVyIGluIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAgZGVmaW5lZCBpbiBSRkMgNDEyMi4gIFRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gdXNlcwogICAgICBsb3dlcmNhc2UgY2hhcmFjdGVycy4KCiAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFVVSUQgaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9uOgogICAgICBmODFkNGZhZS03ZGVjLTExZDAtYTc2NS0wMGEwYzkxZTZiZjYKICAgICAgIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNDEyMjogQSBVbml2ZXJzYWxseSBVbmlxdWUgSURlbnRpZmllciAoVVVJRCkgVVJOCiAgICAgICAgICAgICAgICBOYW1lc3BhY2UiOwogIH0KCiAgdHlwZWRlZiBkb3R0ZWQtcXVhZCB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4KICAgICAgICAnKChbMC05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pXC4pezN9JwogICAgICArICcoWzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICAiQW4gdW5zaWduZWQgMzItYml0IG51bWJlciBleHByZXNzZWQgaW4gdGhlIGRvdHRlZC1xdWFkCiAgICAgICBub3RhdGlvbiwgaS5lLiwgZm91ciBvY3RldHMgd3JpdHRlbiBhcyBkZWNpbWFsIG51bWJlcnMKICAgICAgIGFuZCBzZXBhcmF0ZWQgd2l0aCB0aGUgJy4nIChmdWxsIHN0b3ApIGNoYXJhY3Rlci4iOwogIH0KfQo=
-o-ran-smo-teiv-cloud urn:o-ran:smo-teiv-cloud CLOUD [] 2024-07-15 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNsb3VkIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jbG91ZCI7CiAgICBwcmVmaXggb3ItdGVpdi1jbG91ZDsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gewogICAgICAgIHByZWZpeCBnZW87CiAgICAgICAgcmVmZXJlbmNlICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgICB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBDbG91ZCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gQ0xPVUQgZG9tYWluLCB3aGljaCBjb21wcmlzZXMgY2xvdWQgaW5mcmFzdHJ1Y3R1cmUgYW5kCiAgICAgICAgZGVwbG95bWVudCBhc3BlY3RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTA1LTAyIiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDctMTUiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyByZXZpc2lvbiBhbGlnbnMgTy1SQU4gV29yayBHcm91cCAxMCBTdGFnZSAyIFNwZWNpZmljYXRpb24gKE8tUkFOLldHMTAuVEUmSVYtQ0lNSS4wLVIwMDQudjAyLjAwKSI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gQ0xPVUQ7CgogICAgbGlzdCBDbG91ZGlmaWVkTkYgewogICAgICAgIGRlc2NyaXB0aW9uICJBIFJBTiBOZXR3b3JrIEZ1bmN0aW9uIHNvZnR3YXJlIHRoYXQgaXMgZGVwbG95ZWQgaW4gdGhlIE8tQ2xvdWQgdmlhIG9uZSBvciBtb3JlIE5GIERlcGxveW1lbnRzLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBDbG91ZGlmaWVkIE5GIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTkZEZXBsb3ltZW50IHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBzb2Z0d2FyZSBkZXBsb3ltZW50IG9uIE8tQ2xvdWQgcmVzb3VyY2VzIHRoYXQgcmVhbGl6ZXMsIGFsbCBvciBwYXJ0IG9mLCBhIENsb3VkaWZpZWQgTkYuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIE5GIERlcGxveW1lbnQiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBPQ2xvdWROYW1lc3BhY2UgewogICAgICAgIGRlc2NyaXB0aW9uICJPQ2xvdWROYW1lc3BhY2UgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3IgaXNvbGF0aW5nCiAgICAgICAgZ3JvdXBzIG9mIHJlc291cmNlcyB3aXRoaW4gYSBzaW5nbGUgY2x1c3Rlci4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWQgTmFtZXNwYWNlIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTm9kZUNsdXN0ZXIgewogICAgICAgIGRlc2NyaXB0aW9uICJBIE5vZGVDbHVzdGVyIG1hbmFnZXMgYSBjb2xsZWN0aW9uIG9mIE5vZGVzLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBOb2RlIENsdXN0ZXIiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBPQ2xvdWRTaXRlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdGhhdAogICAgICAgIGhvc3RzIHRoZSBORiBEZXBsb3ltZW50LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBDbG91ZCBTaXRlIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2VzIGdlbzpnZW8tbG9jYXRpb247CiAgICAgICAgfQogICAgfQoKCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIENMT1VESUZJRURORl9DT01QUklTRVNfTkZERVBMT1lNRU5UIHsgLy8gMSB0byAxLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgY29tcHJpc2VkLW5GRGVwbG95bWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJDbG91ZGlmaWVkIE5GIGNvbXByaXNlcyBvZiB0aGVzZSBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBDbG91ZGlmaWVkTkY7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQoKICAgICAgICBsZWFmIGNvbXByaXNlZC1ieS1jbG91ZGlmaWVkTkYgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCBwYXJ0IG9mIENsb3VkaWZpZWQgTkYuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBORkRFUExPWU1FTlRfREVQTE9ZRURfT05fT0NMT1VETkFNRVNQQUNFIHsgLy8gMS4ubiB0byAxLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgZGVwbG95ZWQtb24tb2Nsb3VkTmFtZXNwYWNlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgZGVwbG95ZWQgb24gTy1DbG91ZCBOYW1lc3BhY2UuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBkZXBsb3llZC1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiT0Nsb3VkIE5hbWVzcGFjZSBkZXBsb3lzIE5GIERlcGxveW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE9DbG91ZE5hbWVzcGFjZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBPQ0xPVUROQU1FU1BBQ0VfREVQTE9ZRURfT05fTk9ERUNMVVNURVIgeyAvLyAxLi5uIHRvIDEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgZGVwbG95ZWQtb24tbm9kZUNsdXN0ZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1DbG91ZCBOYW1lc3BhY2UgZGVwbG95ZWQgb24gTm9kZSBDbHVzdGVyLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBPQ2xvdWROYW1lc3BhY2U7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgZGVwbG95ZWQtb2Nsb3VkTmFtZXNwYWNlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5vZGUgQ2x1c3RlciBkZXBsb3lzIE8tQ2xvdWQgTmFtZXNwYWNlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOb2RlQ2x1c3RlcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBOT0RFQ0xVU1RFUl9MT0NBVEVEX0FUX09DTE9VRFNJVEUgeyAvLyAxLi5uIHRvIDEuLm4KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBsb2NhdGVkLWF0LW9jbG91ZFNpdGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTm9kZSBDbHVzdGVyIGxvY2F0ZWQgYXQgTy1DbG91ZCBTaXRlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBOb2RlQ2x1c3RlcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBsb2NhdGlvbi1vZi1vbm9kZUNsdXN0ZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1DbG91ZCBTaXRlIGlzIGxvY2F0aW9uIG9mIE5vZGUgQ2x1c3Rlci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgT0Nsb3VkU2l0ZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9Cn0=
+o-ran-smo-teiv-cloud urn:o-ran:smo-teiv-cloud CLOUD [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNsb3VkIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jbG91ZCI7CiAgICBwcmVmaXggb3ItdGVpdi1jbG91ZDsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gewogICAgICAgIHByZWZpeCBnZW87CiAgICAgICAgcmVmZXJlbmNlICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgICB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBDbG91ZCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gQ0xPVUQgZG9tYWluLCB3aGljaCBjb21wcmlzZXMgY2xvdWQgaW5mcmFzdHJ1Y3R1cmUgYW5kCiAgICAgICAgZGVwbG95bWVudCBhc3BlY3RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFkZGVkIGdyb3VwaW5ncywgT3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycCBvciBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgb2JqZWN0cy4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA3LTE1IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcmV2aXNpb24gYWxpZ25zIE8tUkFOIFdvcmsgR3JvdXAgMTAgU3RhZ2UgMiBTcGVjaWZpY2F0aW9uIChPLVJBTi5XRzEwLlRFJklWLUNJTUkuMC1SMDA0LnYwMi4wMCkiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIENMT1VEOwoKICAgIGxpc3QgQ2xvdWRpZmllZE5GIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBSQU4gTmV0d29yayBGdW5jdGlvbiBzb2Z0d2FyZSB0aGF0IGlzIGRlcGxveWVkIGluIHRoZSBPLUNsb3VkIHZpYSBvbmUgb3IgbW9yZSBORiBEZXBsb3ltZW50cy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWRpZmllZCBORiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5GRGVwbG95bWVudCB7CiAgICAgICAgZGVzY3JpcHRpb24gIkEgc29mdHdhcmUgZGVwbG95bWVudCBvbiBPLUNsb3VkIHJlc291cmNlcyB0aGF0IHJlYWxpemVzLCBhbGwgb3IgcGFydCBvZiwgYSBDbG91ZGlmaWVkIE5GLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBORiBEZXBsb3ltZW50IjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0Nsb3VkTmFtZXNwYWNlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiT0Nsb3VkTmFtZXNwYWNlIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIGlzb2xhdGluZwogICAgICAgIGdyb3VwcyBvZiByZXNvdXJjZXMgd2l0aGluIGEgc2luZ2xlIGNsdXN0ZXIuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIENsb3VkIE5hbWVzcGFjZSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5vZGVDbHVzdGVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBOb2RlQ2x1c3RlciBtYW5hZ2VzIGEgY29sbGVjdGlvbiBvZiBOb2Rlcy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgTm9kZSBDbHVzdGVyIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0Nsb3VkU2l0ZSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgdGhlIGluZnJhc3RydWN0dXJlIHRoYXQKICAgICAgICBob3N0cyB0aGUgTkYgRGVwbG95bWVudC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWQgU2l0ZSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwogICAgICAgIH0KICAgIH0KCgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBDTE9VRElGSUVETkZfQ09NUFJJU0VTX05GREVQTE9ZTUVOVCB7IC8vIDEgdG8gMS4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGNvbXByaXNlZC1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2xvdWRpZmllZCBORiBjb21wcmlzZXMgb2YgdGhlc2UgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQ2xvdWRpZmllZE5GOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAxOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBjb21wcmlzZWQtYnktY2xvdWRpZmllZE5GIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgcGFydCBvZiBDbG91ZGlmaWVkIE5GLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX0RFUExPWUVEX09OX09DTE9VRE5BTUVTUEFDRSB7IC8vIDEuLm4gdG8gMS4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGRlcGxveWVkLW9uLW9jbG91ZE5hbWVzcGFjZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IGRlcGxveWVkIG9uIE8tQ2xvdWQgTmFtZXNwYWNlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgZGVwbG95ZWQtbkZEZXBsb3ltZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk9DbG91ZCBOYW1lc3BhY2UgZGVwbG95cyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBPQ2xvdWROYW1lc3BhY2U7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgT0NMT1VETkFNRVNQQUNFX0RFUExPWUVEX09OX05PREVDTFVTVEVSIHsgLy8gMS4ubiB0byAxCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGRlcGxveWVkLW9uLW5vZGVDbHVzdGVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tQ2xvdWQgTmFtZXNwYWNlIGRlcGxveWVkIG9uIE5vZGUgQ2x1c3Rlci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0Nsb3VkTmFtZXNwYWNlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGRlcGxveWVkLW9jbG91ZE5hbWVzcGFjZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOb2RlIENsdXN0ZXIgZGVwbG95cyBPLUNsb3VkIE5hbWVzcGFjZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTm9kZUNsdXN0ZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTk9ERUNMVVNURVJfTE9DQVRFRF9BVF9PQ0xPVURTSVRFIHsgLy8gMS4ubiB0byAxLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbG9jYXRlZC1hdC1vY2xvdWRTaXRlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5vZGUgQ2x1c3RlciBsb2NhdGVkIGF0IE8tQ2xvdWQgU2l0ZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTm9kZUNsdXN0ZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgbG9jYXRpb24tb2Ytb25vZGVDbHVzdGVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tQ2xvdWQgU2l0ZSBpcyBsb2NhdGlvbiBvZiBOb2RlIENsdXN0ZXIuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE9DbG91ZFNpdGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQp9
o-ran-smo-teiv-common-yang-extensions urn:o-ran:smo-teiv-common-yang-extensions \N [] 2024-05-24 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewoKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogIHByZWZpeCBvci10ZWl2LXlleHQ7CgogIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogIGRlc2NyaXB0aW9uCiAgIlRvcG9sb2d5IGFuZCBJbnZlbnRvcnkgWUFORyBleHRlbnNpb25zIG1vZGVsCgogIFRoaXMgbW9kZWwgY29udGFpbnMgZXh0ZW5zaW9ucyB0byB0aGUgWUFORyBsYW5ndWFnZSB0aGF0IHRvcG9sb2d5IGFuZAogIGludmVudG9yeSBtb2RlbHMgd2lsbCB1c2UgdG8gZGVmaW5lIGFuZCBhbm5vdGF0ZSB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIGV4dGVuc2lvbiBiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJEZWZpbmVzIGEgYmktZGlyZWN0aW9uYWwgcmVsYXRpb25zaGlwIGluIHRoZSB0b3BvbG9neS4KCiAgICAgICAgICAgIEEgYmktZGlyZWN0aW9uYWwtYXNzb2NpYXRpb24gKEJEQSkgaXMgYSByZWxhdGlvbnNoaXAgY29tcHJpc2luZyBvZgogICAgICAgICAgICBhbiBBLXNpZGUgYW5kIGEgQi1zaWRlLiBUaGUgQS1zaWRlIGlzIGNvbnNpZGVyZWQgdGhlIG9yaWdpbmF0aW5nCiAgICAgICAgICAgIHNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcDsgdGhlIEItc2lkZSBpcyBjb25zaWRlcmVkIHRoZSB0ZXJtaW5hdGluZwogICAgICAgICAgICBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBvcmRlciBvZiBBLXNpZGUgYW5kIEItc2lkZSBpcyBvZgogICAgICAgICAgICBpbXBvcnRhbmNlIGFuZCBNVVNUIE5PVCBiZSBjaGFuZ2VkIG9uY2UgZGVmaW5lZC4KCiAgICAgICAgICAgIEJvdGggQS1zaWRlIGFuZCBCLXNpZGUgYXJlIGRlZmluZWQgb24gYSB0eXBlLCBhbmQgYXJlIGdpdmVuIGEgcm9sZS4KICAgICAgICAgICAgQSB0eXBlIG1heSBoYXZlIG11bHRpcGxlIG9yaWdpbmF0aW5nIGFuZC9vciB0ZXJtaW5hdGluZyBzaWRlcyBvZiBhCiAgICAgICAgICAgIHJlbGF0aW9uc2hpcCwgYWxsIGRpc3Rpbmd1aXNoZWQgYnkgcm9sZSBuYW1lLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlICdtb2R1bGUnIHN0YXRlbWVudC4KICAgICAgICAgICAgTXVsdGlwbGUgJ2JpLWRpcmVjdGlvbmFsLXRvcG9sb2d5LXJlbGF0aW9uc2hpcCcgc3RhdGVtZW50cyBhcmUKICAgICAgICAgICAgYWxsb3dlZCBwZXIgcGFyZW50IHN0YXRlbWVudC4KCiAgICAgICAgICAgIFN1YnN0YXRlbWVudHMgdG8gdGhlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIGRlZmluZQogICAgICAgICAgICB0aGUgQS1zaWRlIGFuZCB0aGUgQi1zaWRlLCByZXNwZWN0aXZlbHksIGFuZCBvcHRpb25hbGx5IHByb3BlcnRpZXMKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcC4gRGF0YSBub2RlcyBvZiB0eXBlcyAnbGVhZicgYW5kICdsZWFmLWxpc3QnIGFyZQogICAgICAgICAgICB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIE9uZSBvZiB0aGUgZGF0YSBub2RlcyBNVVNUIGJlIGFubm90YXRlZCB3aXRoCiAgICAgICAgICAgIHRoZSAnYS1zaWRlJyBleHRlbnNpb247IGFub3RoZXIgZGF0YSBub2RlIE1VU1QgYmUgYW5ub3RhdGVkIHdpdGggdGhlCiAgICAgICAgICAgICdiLXNpZGUnIGV4dGVuc2lvbi4gT3RoZXIgZGF0YSBub2RlcyBkZWZpbmUgcHJvcGVydGllcyBvZiB0aGUKICAgICAgICAgICAgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSByZWxhdGlvbnNoaXAgbmFtZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIG5hbWVzcGFjZSBvZiB0aGUgZGVjbGFyaW5nIG1vZHVsZSBhbmQgTVVTVCBiZQogICAgICAgICAgICB1bmlxdWUgd2l0aGluIHRoZSBzY29wZS4iOwoKICAgICAgICBhcmd1bWVudCByZWxhdGlvbnNoaXBOYW1lOwogICAgfQoKICAgIGV4dGVuc2lvbiBhU2lkZSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkRlZmluZXMgdGhlIEEtc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICAgICAgIHN0YXRlbWVudCwgd2hpY2ggaXRzZWxmIG11c3QgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICAgICAgJ2luc3RhbmNlLWlkZW50aWZpZXInLiBDb25zdHJhaW50cyBNQVkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQKICAgICAgICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUKICAgICAgICAgICAgb2YgdGhlIHJvbGUgb2YgdGhlIEEtc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgbmFtZSBvZiB0aGUgcm9sZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEEtc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlCiAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgICAgICAgV2hpbGUgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgZG9lcyBub3QgcmVzdWx0IGluIGEgcHJvcGVydHkKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICAgICAgIGJldHdlZW4gcHJvcGVydGllcyBvZiBhIHR5cGUsIGFuZCByb2xlcyBvZiBhIHJlbGF0aW9uc2hpcCBvbiB0aGUKICAgICAgICAgICAgdHlwZS4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQS1zaWRlIHJlc2lkZXMuCiAgICAgICAgICAgIElmIHRoZSB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlCiAgICAgICAgICAgIHByZWZpeGVkLCBhbmQgYSBjb3JyZXNwb25kaW5nICdpbXBvcnQnIHN0YXRlbWVudCBiZSB1c2VkIHRvIGRlY2xhcmUKICAgICAgICAgICAgdGhlIHByZWZpeC4iOwoKICAgICAgICBhcmd1bWVudCBhU2lkZVR5cGU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGJTaWRlIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiRGVmaW5lcyB0aGUgQi1zaWRlIG9mIGEgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgYSAnbGVhZicgb3IgJ2xlYWYtbGlzdCcKICAgICAgICAgICAgc3RhdGVtZW50LCB3aGljaCBpdHNlbGYgbXVzdCBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUKICAgICAgICAgICAgJ3VuaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudC4KCiAgICAgICAgICAgIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgTVVTVCBiZQogICAgICAgICAgICAnaW5zdGFuY2UtaWRlbnRpZmllcicuIENvbnN0cmFpbnRzIE1BWSBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHBhcmVudAogICAgICAgICAgICAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgdG8gZW5mb3JjZSBjYXJkaW5hbGl0eS4KCiAgICAgICAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGlzIHVzZWQgYXMgbmFtZQogICAgICAgICAgICBvZiB0aGUgcm9sZSBvZiB0aGUgQi1zaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBuYW1lIG9mIHRoZSByb2xlCiAgICAgICAgICAgIGlzIHNjb3BlZCB0byB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIGlzIGRlZmluZWQgYW5kIE1VU1QgYmUKICAgICAgICAgICAgdW5pcXVlIHdpdGhpbiB0aGUgc2NvcGUuCgogICAgICAgICAgICBXaGlsZSB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBkb2VzIG5vdCByZXN1bHQgaW4gYSBwcm9wZXJ0eQogICAgICAgICAgICBvZiB0aGUgcmVsYXRpb25zaGlwLCBpdCBpcyBSRUNPTU1FTkRFRCB0byBhdm9pZCB1c2luZyB0aGUgbmFtZSBvZiBhbgogICAgICAgICAgICBleGlzdGluZyB0eXBlIHByb3BlcnR5IGFzIHJvbGUgbmFtZSB0byBhdm9pZCBwb3RlbnRpYWwgYW1iaWd1aXRpZXMKICAgICAgICAgICAgYmV0d2VlbiBwcm9wZXJ0aWVzIG9mIGEgdHlwZSwgYW5kIHJvbGVzIG9mIGEgcmVsYXRpb25zaGlwIG9uIHRoZQogICAgICAgICAgICB0eXBlLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBCLXNpZGUgcmVzaWRlcy4KICAgICAgICAgICAgSWYgdGhlIHR5cGUgaXMgZGVjbGFyZWQgaW4gYW5vdGhlciBtb2R1bGUsIHRoZSB0eXBlIG11c3QgYmUKICAgICAgICAgICAgcHJlZml4ZWQsIGFuZCBhIGNvcnJlc3BvbmRpbmcgJ2ltcG9ydCcgc3RhdGVtZW50IGJlIHVzZWQgdG8gZGVjbGFyZQogICAgICAgICAgICB0aGUgcHJlZml4LiI7CgogICAgICAgIGFyZ3VtZW50IGJTaWRlVHlwZTsKICAgIH0KCiAgICBleHRlbnNpb24gZG9tYWluIHsKICAgICAgICBkZXNjcmlwdGlvbiAiS2V5d29yZCB1c2VkIHRvIGNhcnJ5IGRvbWFpbiBpbmZvcm1hdGlvbi4iOwogICAgICAgIGFyZ3VtZW50IGRvbWFpbk5hbWU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGxhYmVsIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGxhYmVsIGNhbiBiZSB1c2VkIHRvIGdpdmUgbW9kdWxlcyBhbmQgc3VibW9kdWxlcyBhIHNlbWFudGljCiAgICAgICAgICAgIHZlcnNpb24sIGluIGFkZGl0aW9uIHRvIHRoZWlyIHJldmlzaW9uLgoKICAgICAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbGFiZWwgaXMgJ3gueS56JyAtIGV4cHJlc3NlZCBhcyBwYXR0ZXJuLCBpdCBpcwogICAgICAgICAgICBbMC05XStcXC5bMC05XStcXC5bMC05XSsKCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSByZXZpc2lvbiBzdGF0ZW1lbnQuCiAgICAgICAgICAgIFplcm8gb3Igb25lIHJldmlzaW9uIGxhYmVsIHN0YXRlbWVudHMgcGVyIHBhcmVudCBzdGF0ZW1lbnQgYXJlCiAgICAgICAgICAgIGFsbG93ZWQuCgogICAgICAgICAgICBSZXZpc2lvbiBsYWJlbHMgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCBhbGwgcmV2aXNpb25zIG9mIGEgbW9kdWxlIG9yCiAgICAgICAgICAgIHN1Ym1vZHVsZS4iOwoKICAgICAgICBhcmd1bWVudCBzZW12ZXJzaW9uOwogICAgfQp9
-o-ran-smo-teiv-common-yang-types urn:o-ran:smo-teiv-common-yang-types \N [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICBwcmVmaXggb3ItdGVpdi10eXBlczsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHJlLXVzYWJsZSBkYXRhIHR5cGVzIHRoYXQgdG9wb2xvZ3kgYW5kIGludmVudG9yeSBtb2RlbHMKICAgIHdpbGwgZnJlcXVlbnRseSB1c2UgYXMgcGFydCBvZiB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0xMC0wNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIGFuZCBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgZm9yIHNvdXJjZUlkcyBhbmQgcmVsaWFiaWxpdHlJbmRpY2F0b3IgdG8gbWV0YWRhdGEuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBncm91cGluZyBUb3BfR3JwX1R5cGUgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyBjb250YWluaW5nIHRoZSBrZXkgYXR0cmlidXRlIGNvbW1vbiB0byBhbGwgdHlwZXMuCiAgICAgICAgICAgIEFsbCB0eXBlcyBNVVNUIHVzZSB0aGlzIGdyb3VwaW5nLiI7CgogICAgICAgIGxlYWYgaWQgewogICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRvcG9sb2d5IGVudGl0aWVzLiBSZXByZXNlbnRzIHRoZQogICAgICAgICAgICAgICAgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgICAgICB9CiAgICB9CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IGZvciBhcHBsaWNhdGlvbnMgd2lzaGluZwogICAgICAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGRlY29yYXRvcnMuIFRoaXMgaXMgZG9uZSB2aWEgYXVnbWVudGF0aW9ucy4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpci4KCiAgICAgICAgICAgIFRoaXMgaXMgYSBjb25zdW1lciBkYXRhIGFuZCBjYW4gYmUgYXR0YWNoZWQgdG8gVG9wb2xvZ3kgRW50aXR5IG9yCiAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkKICAgICAgICAgICAgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLAogICAgICAgICAgICBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQKICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CiAgICB9CgogICAgbGVhZi1saXN0IGNsYXNzaWZpZXJzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBpZGVudGl0eXJlZiB7IGJhc2UgY2xhc3NpZmllcjsgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSBlbnRpdHkuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMuCgogICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGF0dGFjaGVkIHRvIHRoZSBUb3BvbG9neSBFbnRpdHkgaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAgICAgICBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkncyBhdHRyaWJ1dGVzLiBUaGlzIGlzIGV4cG9zZWQgdG8gdGhlCiAgICAgICAgICAgICAgICBjb25zdW1lcnMgYW5kIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgcmVzcG9uc2libGUgYWRhcHRlci4gVGhpcwogICAgICAgICAgICAgICAgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZAogICAgICAgICAgICAgICAgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgICAgIHR5cGUgc291cmNlSWQ7CiAgICAgICAgICAgIG9yZGVyZWQtYnkgdXNlcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSByZWxhdGlvbnNoaXAuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgZGVjbGFyZWQgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBpcyBleHBvc2VkIHRvIHRoZQogICAgICAgICAgICAgICAgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMKICAgICAgICAgICAgICAgIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4KICAgICAgICAgICAgICAgIGFueSB3YXksIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLiI7CgogICAgICAgICAgICB0eXBlIHNvdXJjZUlkOwogICAgICAgICAgICBvcmRlcmVkLWJ5IHVzZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAyOwogICAgICAgIH0KICAgIH0KCiAgICBjb250YWluZXIgbWV0YWRhdGEgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgYW4gZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpcnMuCgogICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IEVudGl0eSBvciBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwKICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5IG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzCiAgICAgICAgICAgIGF0dHJpYnV0ZXMuIFRoaXMgaXMgZXhwb3NlZCB0byB0aGUgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkKICAgICAgICAgICAgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlCiAgICAgICAgICAgIGF1Z21lbnRlZCBvciBkZXZpYXRlZCBpbiBhbnkgd2F5LCB1bmxlc3Mgc3RhdGVkIG90aGVyd2lzZS4iOwoKICAgICAgICBsZWFmIHJlbGlhYmlsaXR5SW5kaWNhdG9yIHsKICAgICAgICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICAgICAgICBlbnVtIE9LIHsKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGRhdGEgaXMgaW4gYWxpZ25tZW50IHdpdGggdGhlIHNvdXJjZSBvZiB0cnV0aCwKICAgICAgICAgICAgICAgICAgICBhcyBmYXIgYXMgVG9wb2xvZ3kgRXhwb3N1cmUgSGFuZGxpbmcgaXMgYXdhcmUuIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZW51bSBSRVNUT1JFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIHdhcyByZXN0b3JlZCBmcm9tIGJhY2t1cCBhbmQgdGhlIHJlc3BvbnNpYmxlCiAgICAgICAgICAgICAgICAgICAgYWRhcHRlcnMgYXJlIGNoZWNraW5nIHRvIGVuc3VyZSB0aGUgZGF0YSBpcyBjdXJyZW50LiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVudW0gQURWSVNFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVudGl0eSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgVG9wb2xvZ3kgRXhwb3N1cmUgSGFuZGxpbmcgYW5kCiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsbHkgbm90IGFsaWduZWQgd2l0aCB0aGUgc291cmNlIG9mIHRydXRoLiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZGVudGl0eSBjbGFzc2lmaWVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMKICAgICAgICB3aXRoIGlkZW50aXR5LiAiOwogICAgfQoKICAgIHR5cGVkZWYgc291cmNlSWQgewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBpZGVudGl0eSB0aGF0IHJlcHJlc2VudHMgYSBuYXRpdmUgaWRlbnRpZmllciBvZiBhIHRvcG9sb2d5IGVudGl0eS4iOwogICAgICAgIHR5cGUgc3RyaW5nOwogICAgfQp9
+o-ran-smo-teiv-common-yang-types urn:o-ran:smo-teiv-common-yang-types \N [] 2025-01-17 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICBwcmVmaXggb3ItdGVpdi10eXBlczsKCiAgICBpbXBvcnQgaWV0Zi15YW5nLXR5cGVzIHsgcHJlZml4IHlhbmc7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHJlLXVzYWJsZSBkYXRhIHR5cGVzIHRoYXQgdG9wb2xvZ3kgYW5kIGludmVudG9yeSBtb2RlbHMKICAgIHdpbGwgZnJlcXVlbnRseSB1c2UgYXMgcGFydCBvZiB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNS0wMS0xNyIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBmaXJzdERpc2NvdmVyZWQgYW5kIGxhc3RNb2RpZmllZCB0byBtZXRhZGF0YSBjb250YWluZXIiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjUuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0xMC0wNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIGFuZCBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgZm9yIHNvdXJjZUlkcyBhbmQgcmVsaWFiaWxpdHlJbmRpY2F0b3IgdG8gbWV0YWRhdGEuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBncm91cGluZyBUb3BfR3JwX1R5cGUgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyBjb250YWluaW5nIHRoZSBrZXkgYXR0cmlidXRlIGNvbW1vbiB0byBhbGwgdHlwZXMuCiAgICAgICAgICAgIEFsbCB0eXBlcyBNVVNUIHVzZSB0aGlzIGdyb3VwaW5nLiI7CgogICAgICAgIGxlYWYgaWQgewogICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRvcG9sb2d5IGVudGl0aWVzLiBSZXByZXNlbnRzIHRoZQogICAgICAgICAgICAgICAgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgICAgICB9CiAgICB9CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IGZvciBhcHBsaWNhdGlvbnMgd2lzaGluZwogICAgICAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGRlY29yYXRvcnMuIFRoaXMgaXMgZG9uZSB2aWEgYXVnbWVudGF0aW9ucy4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpci4KCiAgICAgICAgICAgIFRoaXMgaXMgYSBjb25zdW1lciBkYXRhIGFuZCBjYW4gYmUgYXR0YWNoZWQgdG8gVG9wb2xvZ3kgRW50aXR5IG9yCiAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkKICAgICAgICAgICAgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLAogICAgICAgICAgICBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQKICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CiAgICB9CgogICAgbGVhZi1saXN0IGNsYXNzaWZpZXJzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBpZGVudGl0eXJlZiB7IGJhc2UgY2xhc3NpZmllcjsgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSBlbnRpdHkuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMuCgogICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGF0dGFjaGVkIHRvIHRoZSBUb3BvbG9neSBFbnRpdHkgaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAgICAgICBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkncyBhdHRyaWJ1dGVzLiBUaGlzIGlzIGV4cG9zZWQgdG8gdGhlCiAgICAgICAgICAgICAgICBjb25zdW1lcnMgYW5kIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgcmVzcG9uc2libGUgYWRhcHRlci4gVGhpcwogICAgICAgICAgICAgICAgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZAogICAgICAgICAgICAgICAgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgICAgIHR5cGUgc291cmNlSWQ7CiAgICAgICAgICAgIG9yZGVyZWQtYnkgdXNlcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSByZWxhdGlvbnNoaXAuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgZGVjbGFyZWQgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBpcyBleHBvc2VkIHRvIHRoZQogICAgICAgICAgICAgICAgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMKICAgICAgICAgICAgICAgIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4KICAgICAgICAgICAgICAgIGFueSB3YXksIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLiI7CgogICAgICAgICAgICB0eXBlIHNvdXJjZUlkOwogICAgICAgICAgICBvcmRlcmVkLWJ5IHVzZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAyOwogICAgICAgIH0KICAgIH0KCiAgICBjb250YWluZXIgbWV0YWRhdGEgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgYW4gZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpcnMuCgogICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IEVudGl0eSBvciBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwKICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5IG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzCiAgICAgICAgICAgIGF0dHJpYnV0ZXMuIFRoaXMgaXMgZXhwb3NlZCB0byB0aGUgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkKICAgICAgICAgICAgVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZSBIYW5kbGluZyBhbmQgRGlzY292ZXJ5IGFuZCBSZWNvbmNpbGlhdGlvbiBBZGFwdGVyLgogICAgICAgICAgICBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwKICAgICAgICAgICAgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgbGVhZiByZWxpYWJpbGl0eUluZGljYXRvciB7CiAgICAgICAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgICAgICAgICAgZW51bSBPSyB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIGlzIGluIGFsaWdubWVudCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsCiAgICAgICAgICAgICAgICAgICAgYXMgZmFyIGFzIFRvcG9sb2d5IGFuZCBJbnZlbnRvcnkgRXhwb3N1cmUgSGFuZGxpbmcgaXMgYXdhcmUuIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZW51bSBSRVNUT1JFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIHdhcyByZXN0b3JlZCBmcm9tIGJhY2t1cCBhbmQgdGhlIHJlc3BvbnNpYmxlCiAgICAgICAgICAgICAgICAgICAgYWRhcHRlcnMgYXJlIGNoZWNraW5nIHRvIGVuc3VyZSB0aGUgZGF0YSBpcyBjdXJyZW50LiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVudW0gQURWSVNFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVudGl0eSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZQogICAgICAgICAgICAgICAgICAgIEhhbmRsaW5nIGFuZCBwb3RlbnRpYWxseSBub3QgYWxpZ25lZCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGguIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxlYWYgZmlyc3REaXNjb3ZlcmVkIHsKICAgICAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaW1lc3RhbXAgaW5kaWNhdGluZyB3aGVuIGFuIGluc3RhbmNlIG9mIFRvcG9sb2d5IEVudGl0eSBvciBSZWxhdGlvbgogICAgICAgICAgICB3YXMgZmlyc3QgcmVwcmVzZW50ZWQgaW4gVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZSBIYW5kbGluZyB2aWEgZGlzY292ZXJ5LiI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIGxhc3RNb2RpZmllZCB7CiAgICAgICAgICAgIHR5cGUgeWFuZzpkYXRlLWFuZC10aW1lOwogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGltZXN0YW1wIGluZGljYXRpbmcgd2hlbiBhbiBpbnN0YW5jZSBvZiBUb3BvbG9neSBFbnRpdHkgb3IgUmVsYXRpb24KICAgICAgICAgICAgd2FzIGxhc3QgdXBkYXRlZCAoZXhjbHVkaW5nIGNsYXNzaWZpZXJzIGFuZCBkZWNvcmF0b3JzKS4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZGVudGl0eSBjbGFzc2lmaWVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMKICAgICAgICB3aXRoIGlkZW50aXR5LiAiOwogICAgfQoKICAgIHR5cGVkZWYgc291cmNlSWQgewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBpZGVudGl0eSB0aGF0IHJlcHJlc2VudHMgYSBuYXRpdmUgaWRlbnRpZmllciBvZiBhIHRvcG9sb2d5IGVudGl0eS4iOwogICAgICAgIHR5cGUgc3RyaW5nOwogICAgfQp9
o-ran-smo-teiv-equipment urn:o-ran:smo-teiv-equipment EQUIPMENT [] 2024-10-21 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudCB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtZXF1aXBtZW50IjsKICAgIHByZWZpeCBvci10ZWl2LWVxdWlwOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7cHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7cHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIGltcG9ydCBpZXRmLWdlby1sb2NhdGlvbiB7CiAgICAgICAgcHJlZml4IGdlbzsKICAgICAgICByZWZlcmVuY2UgIlJGQyA5MTc5OiBBIFlBTkcgR3JvdXBpbmcgZm9yIEdlb2dyYXBoaWMgTG9jYXRpb25zIjsKICAgIH0KCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICJSQU4gRXF1aXBtZW50IHRvcG9sb2d5IG1vZGVsLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlCiAgICBSQU4gRXF1aXBtZW50IGRvbWFpbiwgd2hpY2ggaXMgbW9kZWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgcGh5c2ljYWwKICAgIGxvY2F0aW9uIG9mIGVxdWlwbWVudCBzdWNoIGFzIGFudGVubmFzIGFzc29jaWF0ZWQgd2l0aCBhIGNlbGwvY2FycmllcgogICAgYW5kIHRoZWlyIHJlbGV2YW50IHByb3BlcnRpZXMgZS5nLiB0aWx0LCBtYXggcG93ZXIgZXRjLgoKICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMjEiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiRGVwcmVjYXRlIEFudGVubmFNb2R1bGUgYXR0cmlidXRlIGFudGVubmFCZWFtV2lkdGguCiAgICAgICAgVG8gYmUgcmVwbGFjZWQgYnkgaG9yaXpvbnRhbEJlYW1XaWR0aCBhbmQgdmVydGljYWxCZWFtV2lkdGguIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC42LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDgiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgYXppbXV0aCBhdHRyaWJ1dGUgZm9yIEFudGVubmFNb2R1bGUuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmdzLCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIG9yIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAKICAgICAgICB0byB0aGUgY29ycmVzcG9uZGluZyB0b3BvbG9neSBvYmplY3RzLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBFUVVJUE1FTlQ7CgogICAgbGlzdCBBbnRlbm5hTW9kdWxlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQW4gQW50ZW5uYSBNb2R1bGUgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgYXNwZWN0IG9mIGFuCiAgICAgICAgYW50ZW5uYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGFudGVubmFNb2RlbE51bWJlciB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVmVuZG9yLXNwZWNpZmljIGFudGVubmEgbW9kZWwgaWRlbnRpZmllci4gVGhpcwogICAgICAgICAgICAgICAgYXR0cmlidXRlIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcyBubwogICAgICAgICAgICAgICAgb3BlcmF0aW9uYWwgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBtZWNoYW5pY2FsQW50ZW5uYUJlYXJpbmcgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgYmVhcmluZyBvbiBhbnRlbm5hIHN1YnVuaXQgd2hlcmUgYW50ZW5uYQogICAgICAgICAgICAgICAgdW5pdCBpcyBpbnN0YWxsZWQuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbWVjaGFuaWNhbEFudGVubmFUaWx0IHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgZml4ZWQgYW50ZW5uYSB0aWx0IG9mIHRoZSBpbnN0YWxsYXRpb24sIGRlZmluZWQKICAgICAgICAgICAgICAgIGFzIHRoZSBpbmNsaW5hdGlvbiBvZiB0aGUgYW50ZW5uYSBlbGVtZW50IHJlc3BlY3QgdG8gdGhlCiAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBwbGFuZS4gSXQgaXMgYSBzaWduZWQgdmFsdWUuIFBvc2l0aXZlIGluZGljYXRlcwogICAgICAgICAgICAgICAgZG93bnRpbHQsIGFuZCBuZWdhdGl2ZSBpbmRpY2F0ZXMgdXB0aWx0LiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIHBvc2l0aW9uV2l0aGluU2VjdG9yIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIHVuaXQgcG9zaXRpb24gd2l0aGluIHNlY3Rvci4gVGhpcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcyBubyBvcGVyYXRpb25hbAogICAgICAgICAgICAgICAgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiB0b3RhbFRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRvdGFsIGFudGVubmEgZWxldmF0aW9uIGluY2x1ZGluZyB0aGUgaW5zdGFsbGVkCiAgICAgICAgICAgICAgICB0aWx0IGFuZCB0aGUgdGlsdCBhcHBsaWVkIGJ5IHRoZSBSZW1vdGUgRWxlY3RyaWNhbAogICAgICAgICAgICAgICAgVGlsdCAoUkVUKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBlbGVjdHJpY2FsQW50ZW5uYVRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVsZWN0cmljYWxseS1jb250cm9sbGVkIHRpbHQgb2YgbWFpbiBiZWFtIG1heGltdW0KICAgICAgICAgICAgICAgIHdpdGggcmVzcGVjdCB0byBkaXJlY3Rpb24gb3J0aG9nb25hbCB0byBhbnRlbm5hIGVsZW1lbnQKICAgICAgICAgICAgICAgIGF4aXMgKHNlZSAzR1BQIFRTIDI1LjQ2NikuIFZhbHVlIGlzIHNpZ25lZDsgdGlsdCBkb3duIGlzCiAgICAgICAgICAgICAgICBwb3NpdGl2ZSwgdGlsdCB1cCBpcyBuZWdhdGl2ZS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGFudGVubmFCZWFtV2lkdGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIGhvcml6b250YWwgcGxhbmUuIE1lYXN1cmVkIGluCiAgICAgICAgICAgICAgICBkZWdyZWVzLgoKICAgICAgICAgICAgICAgIERlcHJlY2F0ZWQ6IFNpbmNlIDI0LlE0LiBSZXBsYWNlZCBieSBBbnRlbm5hTW9kdWxlOjpob3Jpem9udGFsQmVhbVdpZHRoCiAgICAgICAgICAgICAgICBhbmQgQW50ZW5uYU1vZHVsZTo6dmVydGljYWxCZWFtV2lkdGguIFBsYW5uZWQgdG8gYmUgcmVtb3ZlZC4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgaG9yaXpvbnRhbEJlYW1XaWR0aCAgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIGhvcml6b250YWwgcGxhbmUuIjsKICAgICAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTsKICAgICAgICAgICAgICAgICAgICByYW5nZSAiMC4uMzYwIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuaXRzICJkZWNpbWFsIGRlZ3JlZXMiOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIHZlcnRpY2FsQmVhbVdpZHRoICAgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIHZlcnRpY2FsIHBsYW5lLiI7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgIjAuLjM2MCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhemltdXRoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgdmFsdWUgb2YgdGhlIGF6aW11dGggb2YgdGhlIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgIjAuLjM2MCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IFNpdGUgewogICAgICAgIGRlc2NyaXB0aW9uICJBIHNpdGUgaXMgYSBwaHlzaWNhbCBsb2NhdGlvbiB3aGVyZSBhbiBlcXVpcG1lbnQgY2FuIGJlCiAgICAgICAgaW5zdGFsbGVkLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBTaXRlIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2VzIGdlbzpnZW8tbG9jYXRpb247CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9JTlNUQUxMRURfQVRfU0lURSB7IC8vIDAuLm4gdG8gMC4uMQoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBBbnRlbm5hTW9kdWxlIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU2l0ZSB0eXBlLgogICAgICAgICAgICBUaGUgU2l0ZSByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB3aGVyZSB0aGUgQW50ZW5uYU1vZHVsZSBpcyBpbnN0YWxsZWQuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIG9ubHkgYmUgaW5zdGFsbGVkIGF0IG9uZSBTaXRlLgogICAgICAgICAgICBBIFNpdGUgaW5zdGFuY2UgY2FuIGhhdmUgbWFueSBpbnN0YWxsZWQgQW50ZW5uYU1vZHVsZXMuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGluc3RhbGxlZC1hdC1zaXRlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgTW9kdWxlIGluc3RhbGxlZCBhdCBTaXRlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBBbnRlbm5hTW9kdWxlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgaW5zdGFsbGVkLWFudGVubmFNb2R1bGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiU2l0ZSB3aGVyZSBBbnRlbm5hIE1vZHVsZSBpcyBpbnN0YWxsZWQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIFNpdGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9Cn0=
o-ran-smo-teiv-oam urn:o-ran:smo-teiv-oam OAM [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LW9hbSB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtb2FtIjsKICAgIHByZWZpeCBvci10ZWl2LW9hbTsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbiAKICAgICJSQU4gTyZNIHRvcG9sb2d5IG1vZGVsLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlCiAgICBSQU4gTyZNIGRvbWFpbiwgd2hpY2ggYXJlIGludGVuZGVkIHRvIHJlcHJlc2VudCBtYW5hZ2VtZW50IHN5c3RlbXMKICAgIGFuZCBtYW5hZ2VtZW50IGludGVyZmFjZXMuCgogICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gT0FNOwoKICAgIGxpc3QgTWFuYWdlZEVsZW1lbnQgewogICAgICAgIGRlc2NyaXB0aW9uICJBIE1hbmFnZWQgRWxlbWVudCAoTUUpIGlzIGEgbm9kZSBpbnRvIGEgdGVsZWNvbW11bmljYXRpb24KICAgICAgICBuZXR3b3JrIHByb3ZpZGluZyBzdXBwb3J0IGFuZC9vciBzZXJ2aWNlIHRvIHN1YnNjcmliZXJzLiBBbiBNRQogICAgICAgIGNvbW11bmljYXRlcyB3aXRoIGEgbWFuYWdlciBhcHBsaWNhdGlvbiAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkKICAgICAgICBvdmVyIG9uZSBvciBtb3JlIGludGVyZmFjZXMgZm9yIHRoZSBwdXJwb3NlIG9mIGJlaW5nIG1vbml0b3JlZAogICAgICAgIGFuZC9vciBjb250cm9sbGVkLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwogICAgfQp9
-o-ran-smo-teiv-ran urn:o-ran:smo-teiv-ran RAN [] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbgogICAgICAgICJSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gTG9naWNhbCBkb21haW4sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGZ1bmN0aW9uYWwgY2FwYWJpbGl0eQogICAgICAgIG9mIHRoZSBkZXBsb3llZCBSQU4gdGhhdCBhcmUgcmVsZXZhbnQgdG8gckFwcHMgdXNlIGNhc2VzLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFkZGVkIHJhbmdlIGZvciBhemltdXRoIGF0dHJpYnV0ZSBvZiBTZWN0b3IuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC42LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmdzLCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIG9yIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAKICAgICAgICB0byB0aGUgY29ycmVzcG9uZGluZyB0b3BvbG9neSBvYmplY3QuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDctMTUiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyByZXZpc2lvbiBhbGlnbnMgTy1SQU4gV29yayBHcm91cCAxMCBTdGFnZSAyIFNwZWNpZmljYXRpb24gKE8tUkFOLldHMTAuVEUmSVYtQ0lNSS4wLVIwMDQudjAyLjAwKSI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBSQU47CgogICAgbGlzdCBPUlVGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIFJhZGlvIFVuaXQgKE8tUlUpLgoKICAgICAgICBBIGxvZ2ljYWwgbm9kZSBob3N0aW5nIExvdy1QSFkgbGF5ZXIgYW5kIFJGIHByb2Nlc3NpbmcgYmFzZWQgb24gYQogICAgICAgIGxvd2VyIGxheWVyIGZ1bmN0aW9uYWwgc3BsaXQuICBUaGlzIGlzIHNpbWlsYXIgdG8gM0dQUOKAmXMg4oCcVFJQ4oCdIG9yCiAgICAgICAg4oCcUlJI4oCdIGJ1dCBtb3JlIHNwZWNpZmljIGluIGluY2x1ZGluZyB0aGUgTG93LVBIWSBsYXllciAoRkZUL2lGRlQsCiAgICAgICAgUFJBQ0ggZXh0cmFjdGlvbikuIFRoZSBPLVJVIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIGludGVyZmFjZQogICAgICAgIChhbHNvIGtub3duIGFzIExMUyBpbnRlcmZhY2UpIGFzIHdlbGwgYXMgTG93LVBIWSBmdW5jdGlvbnMgb2YgdGhlCiAgICAgICAgcmFkaW8gaW50ZXJmYWNlIHRvd2FyZHMgdGhlIFVFLiBUaGlzIGlzIGRlcGxveWVkIGFzIGEgUE5GLiBUaGUgTy1SVQogICAgICAgIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIE0tUGxhbmUgaW50ZXJmYWNlIHRvd2FyZHMgdGhlIE8tRFUKICAgICAgICBhbmQgU01PLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBPLVJVIG9iamVjdC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG9ydUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE8tUlUgd2l0aGluIGEgT1JVRnVuY3Rpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5lYXJSVFJJQ0Z1bmN0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbiAiTmVhci1SZWFsLVRpbWUgUkFOIEludGVsbGlnZW50IENvbnRyb2xsZXIgKE5lYXItUlQgUklDKS4KCiAgICAgICAgQW4gTy1SQU4gTmV0d29yayBGdW5jdGlvbiAoTkYpIHRoYXQgZW5hYmxlcyBuZWFyLXJlYWwtdGltZSBjb250cm9sCiAgICAgICAgYW5kIG9wdGltaXphdGlvbiBvZiBSQU4gZWxlbWVudHMgYW5kIHJlc291cmNlcyB2aWEgZmluZS1ncmFpbmVkCiAgICAgICAgZGF0YSBjb2xsZWN0aW9uIGFuZCBhY3Rpb25zIG92ZXIgRTIgaW50ZXJmYWNlLiBJdCBtYXkgaW5jbHVkZQogICAgICAgIEFJL01MIChBcnRpZmljaWFsIEludGVsbGlnZW5jZSAvIE1hY2hpbmUgTGVhcm5pbmcpIHdvcmtmbG93CiAgICAgICAgaW5jbHVkaW5nIG1vZGVsIHRyYWluaW5nLCBpbmZlcmVuY2UsIGFuZCB1cGRhdGVzLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBOZWFyLVJUIFJJQyBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuZWFyUnRSaWNJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBOZWFyLVJUIFJJQyB3aXRoaW4gYSBOZWFyUlRSSUNGdW5jdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4KICAgICAgICAgICAgICAgIG5vZGUgaWRlbnRpdHkiOwogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0RVRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBEaXN0cmlidXRlZCBVbml0IChPLURVKS4KCiAgICAgICAgVGhlIE8tRFUgaXMgYW4gTy1SQU4gTkYgaW4gdGhlIE8tUkFOIEFyY2hpdGVjdHVyZS4gQW4gTy1EVSwgY29tYmluZWQKICAgICAgICB3aXRoIG9uZSBvciBtb3JlIE8tUlUocykgY29ubmVjdGVkIHRvIGl0LCBzdXBwb3J0cyBhbmQgaXMgZnVsbHkKICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGZ1bmN0aW9ucyBvZiBhIGdOQi1EVSBhcyBkZWZpbmVkIGJ5IDNHUFAgVFMgMzguNDAxLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1EVToKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tQ1UtQ1AgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzCiAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEYxLVUgaW50ZXJmYWNlLiBPbmUgTy1EVSBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmx5IG9uZSBPLUNVLUNQLiBPbmUgTy1EVSBjYW4gYmUgY29ubmVjdGVkIHRvCiAgICAgICAgbXVsdGlwbGUgTy1DVS1VUHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gTy1EVSBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgTkctUkFOCiAgICAgICAgbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlCiAgICAgICAgdGhlIGdOQi1EVSBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgY29udGFpbmVyIGRVcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdXNlZCBhcyBwYXJ0IG9mIFBNIEV2ZW50cyBkYXRhIjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJEVUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIERVIHdpdGhpbiBhIGdOb2RlQiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJZGVudGl0eSBvZiBnTm9kZUIgd2l0aGluIGEgUExNTiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkTGVuZ3RoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZW5ndGggb2YgZ05CSWQgYml0IHN0cmluZyByZXByZXNlbnRhdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0NVQ1BGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIENlbnRyYWxpemVkIFVuaXQgQ29udHJvbCBQbGFuZSAoTy1DVS1DUCkKCiAgICAgICAgVGhpcyBpcyBhIGxvZ2ljYWwgbm9kZSBob3N0aW5nIHRoZSBSYWRpbyBSZXNvdXJjZSBDb250cm9sIChSUkMpIGFuZAogICAgICAgIHRoZSBjb250cm9sIHBsYW5lIHBhcnQgb2YgdGhlIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sCiAgICAgICAgKFBEQ1ApLiBUaGUgTy1DVS1DUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UgY29ubmVjdGVkIHdpdGgKICAgICAgICB0aGUgTy1DVS1VUCBhbmQgdGhlIEYxLUMgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoIHRoZSBPLVJBTgogICAgICAgIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1DUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25seSBvbmUgTy1DVS1DUCBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmUgTy1EVS4gT25seSBvbmUgTy1DVS1DUCBpcyBjb25uZWN0ZWQgdG8gb25lCiAgICAgICAgTy1DVS1VUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBPLUNVLVVQcyB1bmRlcgogICAgICAgIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZSBPLUNVLVVQIGNhbiBiZSBjb25uZWN0ZWQgdG8KICAgICAgICBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1DUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtQ1Agb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CQ1VOYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIGdOb2RlQi1DVSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZExlbmd0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVuZ3RoIG9mIGdOQklkIGJpdCBzdHJpbmcgcmVwcmVzZW50YXRpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIHBMTU5JZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUExNTiBpZGVudGlmaWVyIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBnbG9iYWwgUkFOCiAgICAgICAgICAgICAgICBub2RlIGlkZW50aXR5IjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE9DVVVQRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBDZW50cmFsaXplZCBVbml0IFVzZXIgUGxhbmUgKE8tQ1UtVVApCgogICAgICAgIEFuIE8tQ1UtVVAgaXMgYSBsb2dpY2FsIG5vZGUgaG9zdGluZyB0aGUgVXNlciBQbGFuZSBwYXJ0IG9mIHRoZQogICAgICAgIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sIChQRENQKSBhbmQgdGhlIFNlcnZpY2UgRGF0YQogICAgICAgIEFkYXB0YXRpb24gUHJvdG9jb2wgKFNEQVApLiBUaGUgTy1DVS1VUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UKICAgICAgICBjb25uZWN0ZWQgd2l0aCB0aGUgTy1DVS1DUCBhbmQgdGhlIEYxLVUgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoCiAgICAgICAgdGhlIE8tUkFOIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1VUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtVSBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLUNQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25lIE8tQ1UtVVAgaXMKICAgICAgICBjb25uZWN0ZWQgdG8gb25seSBvbmUgTy1DVS1DUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0bwogICAgICAgIG11bHRpcGxlIE8tQ1UtVVBzIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZQogICAgICAgIE8tQ1UtVVAgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCiAgICAgICAgc2FtZSBPLUNVLUNQLgoKICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhbiBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1VUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtVVAgb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIklkZW50aXR5IG9mIGdOb2RlQiB3aXRoaW4gYSBQTE1OIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpc3QgcExNTklkTGlzdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4gbm9kZSBpZGVudGl0eSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBOUkNlbGxDVSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgYW4gTlIgQ2VsbCBpbiBnTm9kZUItQ1UuCgogICAgICAgIDVHIE5SIGlzIGEgbmV3IHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IChSQVQpIGRldmVsb3BlZCBieSAzR1BQIGZvcgogICAgICAgIHRoZSA1RyAoZmlmdGggZ2VuZXJhdGlvbikgbW9iaWxlIG5ldHdvcmsuIEl0IGlzIGRlc2lnbmVkIHRvIGJlIHRoZQogICAgICAgIGdsb2JhbCBzdGFuZGFyZCBmb3IgdGhlIGFpciBpbnRlcmZhY2Ugb2YgNUcgbmV0d29ya3MuCgogICAgICAgIDVHIE5SIGhhcyBzeW5jaHJvbml6YXRpb24gc2lnbmFsIHRoYXQgaXMga25vd24gYXMgUHJpbWFyeQogICAgICAgIFN5bmNocm9uaXphdGlvbiBTaWduYWwgKFBTUykgYW5kIFNlY29uZGFyeSBTeW5jaHJvbml6YXRpb24KICAgICAgICBTaWduYWwgKFNTUykuIFRoZXNlIHNpZ25hbHMgYXJlIHNwZWNpZmljIHRvIE5SIHBoeXNpY2FsIGxheWVyIGFuZAogICAgICAgIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBVRSBmb3IgZG93bmxpbmsKICAgICAgICBzeW5jaHJvbml6YXRpb246IFBTUyBwcm92aWRlcyBSYWRpbyBGcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YgMXN0CiAgICAgICAgU3ltYm9sIGluIGEgUmFkaW8gZnJhbWUpIFNTUyBwcm92aWRlcyBTdWJmcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YKICAgICAgICAxc3QgU3ltYm9sIGluIGEgU3ViZnJhbWUpIFBoeXNpY2FsIExheWVyIENlbGwgSUQgKFBDSSkgaW5mb3JtYXRpb24KICAgICAgICB1c2luZyBib3RoIFBTUyBhbmQgU1NTLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgY2VsbExvY2FsSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVzZWQgdG9nZXRoZXIgd2l0aCBnTm9kZUIgaWRlbnRpZmllciB0byBpZGVudGlmeSBOUgogICAgICAgICAgICAgICAgY2VsbCBpbiBQTE1OLiBVc2VkIHRvZ2V0aGVyIHdpdGggZ05CSWQgdG8gZm9ybSBOQ0kuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBwbG1uSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlBMTU4gSUQgZm9yIE5SIENHSS4gSWYgZW1wdHksCiAgICAgICAgICAgICAgICBHTkJDVUNQRnVuY3Rpb246OnBMTU5JZCBpcyB1c2VkIGZvciBQTE1OIElEIGluIE5SIENHSSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbkNJIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsIElkZW50aXR5IjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKSI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTlJDZWxsRFUgewogICAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIGFuIE5SIENlbGwgaW4gZ05vZGVCLURVLgoKICAgICAgICA1RyBOUiBpcyBhIG5ldyByYWRpbyBhY2Nlc3MgdGVjaG5vbG9neSAoUkFUKSBkZXZlbG9wZWQgYnkgM0dQUCBmb3IKICAgICAgICB0aGUgNUcgKGZpZnRoIGdlbmVyYXRpb24pIG1vYmlsZSBuZXR3b3JrLiBJdCBpcyBkZXNpZ25lZCB0byBiZSB0aGUKICAgICAgICBnbG9iYWwgc3RhbmRhcmQgZm9yIHRoZSBhaXIgaW50ZXJmYWNlIG9mIDVHIG5ldHdvcmtzLgoKICAgICAgICA1RyBOUiBoYXMgc3luY2hyb25pemF0aW9uIHNpZ25hbCB0aGF0IGlzIGtub3duIGFzIFByaW1hcnkKICAgICAgICBTeW5jaHJvbml6YXRpb24gc2lnbmFsIChQU1MpIGFuZCBTZWNvbmRhcnkgU3luY2hyb25pemF0aW9uIHNpZ25hbAogICAgICAgIChTU1MpLiBUaGVzZSBzaWduYWxzIGFyZSBzcGVjaWZpYyB0byBOUiBwaHlzaWNhbCBsYXllciBhbmQgcHJvdmlkZQogICAgICAgIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgVUUgZm9yIGRvd25saW5rCiAgICAgICAgc3luY2hyb25pemF0aW9uOiBQU1MgcHJvdmlkZXMgUmFkaW8gRnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mIDFzdAogICAgICAgIFN5bWJvbCBpbiBhIFJhZGlvIGZyYW1lKSBTU1MgcHJvdmlkZXMgU3ViZnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mCiAgICAgICAgMXN0IFN5bWJvbCBpbiBhIFN1YmZyYW1lKSBQaHlzaWNhbCBMYXllciBDZWxsIElEIChQQ0kpIGluZm9ybWF0aW9uCiAgICAgICAgdXNpbmcgYm90aCBQU1MgYW5kIFNTUy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGNlbGxMb2NhbElkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVc2VkIHRvZ2V0aGVyIHdpdGggZ05vZGVCIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgTlIKICAgICAgICAgICAgICAgIGNlbGwgaW4gUExNTi4gVXNlZCB0b2dldGhlciB3aXRoIGdOQklkIHRvIGZvcm0gTkNJLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG5DSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBuUlBDSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIFBoeXNpY2FsIENlbGwgSWRlbnRpdHkgKFBDSSkgb2YgdGhlIE5SIGNlbGwuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5SU2VjdG9yQ2FycmllciB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBOUiBTZWN0b3IgQ2FycmllciBvYmplY3QgcHJvdmlkZXMgdGhlIGF0dHJpYnV0ZXMgZm9yCiAgICAgICAgZGVmaW5pbmcgdGhlIGxvZ2ljYWwgY2hhcmFjdGVyaXN0aWNzIG9mIGEgY2FycmllciAoY2VsbCkgaW4gYQogICAgICAgIHNlY3Rvci4gQSBzZWN0b3IgaXMgYSBjb3ZlcmFnZSBhcmVhIGFzc29jaWF0ZWQgd2l0aCBhIGJhc2Ugc3RhdGlvbgogICAgICAgIGhhdmluZyBpdHMgb3duIGFudGVubmFzLCByYWRpbyBwb3J0cywgYW5kIGNvbnRyb2wgY2hhbm5lbHMuIFRoZQogICAgICAgIGNvbmNlcHQgb2Ygc2VjdG9ycyB3YXMgZGV2ZWxvcGVkIHRvIGltcHJvdmUgY28tY2hhbm5lbCBpbnRlcmZlcmVuY2UKICAgICAgICBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcyBzeXN0ZW1zIHVzZSB0aHJlZSBzZWN0b3IKICAgICAgICBjZWxscy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGFyZmNuREwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIEFic29sdXRlIFJhZGlvIEZyZXF1ZW5jeSBDaGFubmVsIE51bWJlcgogICAgICAgICAgICAgICAgKE5SLUFSRkNOKSBmb3IgZG93bmxpbmsiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhcmZjblVMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBBYnNvbHV0ZSBSYWRpbyBmcmVxdWVuY3kgQ2hhbm5lbCBOdW1iZXIKICAgICAgICAgICAgICAgIChOUi1BUkZDTikgZm9yIHVwbGluay4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBmcmVxdWVuY3lETCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUkYgUmVmZXJlbmNlIEZyZXF1ZW5jeSBvZiBkb3dubGluayBjaGFubmVsIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZnJlcXVlbmN5VUwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJGIFJlZmVyZW5jZSBGcmVxdWVuY3kgb2YgdXBsaW5rIGNoYW5uZWwiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBiU0NoYW5uZWxCd0RMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJCUyBDaGFubmVsIGJhbmR3aWR0aCBpbiBNSHogZm9yIGRvd25saW5rLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgQW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIE1PIHNlcnZlcyBhcyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUgY2VsbCBhbmQgdGhlIFJCUwogICAgICAgIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UgaW4gYSBjZXJ0YWluIGdlb2dyYXBoaWNhbCBhcmVhLgogICAgICAgIFRoZSBNTyBhbHNvIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG91dHB1dCBwb3dlciBvZiB0aGUgc2VjdG9yLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYtbGlzdCBlVXRyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIExURSBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGdlcmFuRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBHRVJBTiBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IG5SRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBOUiBmcmVxdWVuY3kgYmFuZHMgYXNzb2NpYXRlZCBoYXJkd2FyZQogICAgICAgICAgICAgICAgc3VwcG9ydHMiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBTZWN0b3IgewogICAgICAgIGRlc2NyaXB0aW9uICJBIGdyb3VwIG9mIGNvLWxvY2F0ZWQgQ2VsbHMgdGhhdCBoYXZlIGEgc2hhcmVkCiAgICAgICAgY292ZXJhZ2UgYXJlYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIHNlY3RvcklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbml2ZXJzYWxseSB1bmlxdWUgSUQgZ2VuZXJhdGVkIGJ5IHRoZSBzZWN0b3IncwogICAgICAgICAgICAgICAgZGlzY292ZXJ5IG1lY2hhbmlzbS4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzZXMgZ2VvOmdlby1sb2NhdGlvbjsKCiAgICAgICAgICAgIGxlYWYgYXppbXV0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiQXZlcmFnZSB2YWx1ZSBvZiB0aGUgYXppbXV0aHMgb2YgdGhlIGNlbGxzCiAgICAgICAgICAgICAgICBjb21wcmlzaW5nIHRoZSBzZWN0b3IsIGRldGVybWluZWQgZHVyaW5nIHNlY3RvciBkaXNjb3ZlcnkuIjsKICAgICAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0ewogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxOwogICAgICAgICAgICAgICAgICAgIHJhbmdlICIwLi4zNjAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgT0RVRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMRFUgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgT0RVRnVuY3Rpb24gcmVwcmVzZW50cyB0aGUgRFUgY29tcG9uZW50IG9mIGEgZ05CIHRoYXQgcHJvdmlkZXMgdGhlIE5SQ2VsbERVLgogICAgICAgICAgICBBIE9EVUZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBtdXN0IGJlIHByb3ZpZGVkIGJ5IGFuIE9EVUZ1bmN0aW9uLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHByb3ZpZGVkLW5yQ2VsbER1IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tRFUgRnVuY3Rpb24gcHJvdmlkZXMgTlIgQ2VsbC1EVS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbC1EVSBwcm92aWRlZCBieSBPLURVIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBPRFVGVU5DVElPTl9QUk9WSURFU19OUlNFQ1RPUkNBUlJJRVIgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUlNlY3RvckNhcnJpZXIgdHlwZS4KICAgICAgICAgICAgVGhlIE9EVUZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIERVIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUlNlY3RvckNhcnJpZXIuCiAgICAgICAgICAgIEEgT0RVRnVuY3Rpb24gaW5zdGFuY2UgY2FuIHByb3ZpZGUgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgbXVzdCBiZSBwcm92aWRlZCBieSBhbiBPRFVGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uclNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBwcm92aWRlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgTy1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTlJTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE9DVUNQRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMQ1UgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbENVIHR5cGUuCiAgICAgICAgICAgIFRoZSBPQ1VDUEZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIENVLUNQIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUkNlbGxDVS4KICAgICAgICAgICAgQSBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsQ1UuCiAgICAgICAgICAgIEFuIE5SQ2VsbENVIGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQgYnkgYW4gT0NVQ1BGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uckNlbGxDdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLUNQIEZ1bmN0aW9uIHByb3ZpZGVzIE5SIENlbGwtQ1UuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE9DVUNQRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2N1Y3BGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLUNVIHByb3ZpZGVkIGJ5IE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SQ2VsbENVOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SQ0VMTERVX1VTRVNfTlJTRUNUT1JDQVJSSUVSIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTlJTZWN0b3JDYXJyaWVyIHR5cGUuCiAgICAgICAgICAgIFRoZSBOUkNlbGxEVSByZXByZXNlbnRzIHRoZSBjZWxsIHRoYXQgdXNlcyB0aGUgTlJTZWN0b3JDYXJyaWVyLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gdXNlIG1hbnkgTlJTZWN0b3JDYXJyaWVycy4KICAgICAgICAgICAgQW4gTlJTZWN0b3JDYXJyaWVyIGluc3RhbmNlIGNhbiBvbmx5IGJlIHVzZWQgYnkgb25lIE5SQ2VsbERVLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHVzZWQtbnJTZWN0b3JDYXJyaWVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIENlbGwtRFUgdXNlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTlJDZWxsRFU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdXNlZC1ieS1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBTZWN0b3IgQ2FycmllciB1c2VkIGJ5IE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SU0VDVE9SQ0FSUklFUl9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SU2VjdG9yQ2FycmllciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFDYXBhYmlsaXR5IHR5cGUuCiAgICAgICAgICAgIFRoZSBOUlNlY3RvckNhcnJpZXIgcmVwcmVzZW50cyB0aGUgY2FycmllciB0aGF0IHVzZXMgdGhlIEFudGVubmFDYXBhYmlsaXR5LgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgY2FuIHVzZSBvbmx5IG9uZSBBbnRlbm5hQ2FwYWJpbGl0eS4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHVzZWQgYnkgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiB1c2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFNlY3RvciBDYXJyaWVyIHVzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBOUlNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCB1c2VkLWJ5LW5yU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgdXNlZCBieSBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX05SQ0VMTERVIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNlY3RvciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBTZWN0b3IgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGFyZWEgdGhhdCBncm91cHMgdGhlIE5SQ2VsbERVcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gb25seSBiZSBncm91cGVkIGJ5IG9uZSBTZWN0b3IuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgZ3JvdXBlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIFNlY3RvcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBncm91cGVkLWJ5LXNlY3RvciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIGdyb3VwZWQgYnkgU2VjdG9yLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
-o-ran-smo-teiv-rel-cloud-ran urn:o-ran:smo-teiv-rel-cloud-ran REL_CLOUD_RAN ["o-ran-smo-teiv-cloud", "o-ran-smo-teiv-ran"] 2024-07-15 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1jbG91ZC1yYW4gewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LXJlbC1jbG91ZC1yYW4iOwogICAgcHJlZml4IG9yLXRlaXYtY2xvdWR0b3JhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY2xvdWQge3ByZWZpeCBvci10ZWl2LWNsb3VkOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LXJhbiB7cHJlZml4IG9yLXRlaXYtcmFuOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBDbG91ZCB0byBSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIENsb3VkIHRvIFJBTiBMb2dpY2FsIHRvcG9sb2d5IHJlbGF0aW9ucy4KCiAgICAgICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICAgICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogICAgICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA3LTE1IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcmV2aXNpb24gYWxpZ25zIE8tUkFOIFdvcmsgR3JvdXAgMTAgU3RhZ2UgMiBTcGVjaWZpY2F0aW9uIChPLVJBTi5XRzEwLlRFJklWLUNJTUkuMC1SMDA0LnYwMi4wMCkiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9DTE9VRF9SQU47CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBORkRFUExPWU1FTlRfU0VSVkVTX09EVUZVTkNUSU9OIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBzZXJ2aWNlZCBieSB0aGlzIE5GIERlcGxveW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtY2xvdWQ6TkZEZXBsb3ltZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCB0aGF0IHNlcnZlcyB0aGlzIE8tRFUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOk9EVUZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX1NFUlZFU19PQ1VDUEZVTkNUSU9OIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtb2N1Y3BGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLUNQIEZ1bmN0aW9uIHNlcnZpY2VkIGJ5IHRoaXMgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1jbG91ZDpORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLW5GRGVwbG95bWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IHRoYXQgc2VydmVzIHRoaXMgTy1DVS1DUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0NVQ1BGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfT0NVVVBGVU5DVElPTiB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHNlcnZpY2VkLW9jdXVwRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1DVS1VUCBGdW5jdGlvbiBzZXJ2aWNlZCBieSB0aGlzIE5GIERlcGxveW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtY2xvdWQ6TkZEZXBsb3ltZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCB0aGF0IHNlcnZlcyB0aGlzIE8tQ1UtVVAgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOk9DVVVQRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBORkRFUExPWU1FTlRfU0VSVkVTX05FQVJSVFJJQ0ZVTkNUSU9OIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtbmVhclJUUklDRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmVhclJUUklDRnVuY3Rpb24gc2VydmljZWQgYnkgdGhpcyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWNsb3VkOk5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctbkZEZXBsb3ltZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgdGhhdCBzZXJ2ZXMgdGhpcyBOZWFyUlRSSUNGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46TmVhclJUUklDRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9Cn0=
-o-ran-smo-teiv-rel-equipment-ran urn:o-ran:smo-teiv-rel-equipment-ran REL_EQUIPMENT_RAN ["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1lcXVpcG1lbnQtcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtZXF1aXBtZW50LXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtZXF1aXByYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHsgcHJlZml4IG9yLXRlaXYtZXF1aXA7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtcmFuIHsgcHJlZml4IG9yLXRlaXYtcmFuOyB9CgoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbiAKICAgICJSQU4gRXF1aXBtZW50IHRvIExvZ2ljYWwgdG9wb2xvZ3kgbW9kZWwuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIEVxdWlwbWVudCB0byBMb2dpY2FsIHRvcG9sb2d5CiAgICBlbnRpdGllcyBhbmQgcmVsYXRpb25zLgoKICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9TRVJWRVNfTlJDRUxMRFUuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkVMX0VRVUlQTUVOVF9SQU47CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BTU9EVUxFX1NFUlZFU19BTlRFTk5BQ0FQQUJJTElUWSB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBBbnRlbm5hTW9kdWxlIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYUNhcGFiaWxpdHkgdHlwZS4KICAgICAgICAgICAgVGhlIEFudGVubmFNb2R1bGUgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgYW50ZW5uYSB0aGF0IHNlcnZlcyB0aGUgQW50ZW5uYUNhcGFiaWxpdHkuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIHNlcnZlIG1hbnkgQW50ZW5uYUNhcGFiaWxpdGllcy4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHNlcnZlZCBieSBtYW55IEFudGVubmFNb2R1bGVzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHNlcnZpY2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSBzZXJ2aWNlZCBieSB0aGlzIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWVxdWlwOkFudGVubmFNb2R1bGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLWFudGVubmFNb2R1bGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgc2VydmVzIHRoaXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpBbnRlbm5hQ2FwYWJpbGl0eTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFNT0RVTEVfU0VSVkVTX05SQ0VMTERVIHsgLy8gMS4ubiB0byAwLi5tCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFNb2R1bGUgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgQW50ZW5uYU1vZHVsZSByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBhbnRlbm5hIHRoYXQgc2VydmVzIHRoZSBOUkNlbGxEVS4KICAgICAgICAgICAgQW4gQW50ZW5uYU1vZHVsZSBpbnN0YW5jZSBjYW4gc2VydmUgbWFueSBOUkNlbGxEVXMuCiAgICAgICAgICAgIEFuIE5SQ2VsbERVIGluc3RhbmNlIGNhbiBiZSBzZXJ2ZWQgYnkgbWFueSBBbnRlbm5hTW9kdWxlcy4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIHNlcnZpY2VkIGJ5IHRoaXMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBzZXJ2ZXMgdGhpcyBOUiBDZWxsLURVLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX0FOVEVOTkFNT0RVTEUgeyAvLyAwLi4xIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU2VjdG9yIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYU1vZHVsZSB0eXBlLgogICAgICAgICAgICBUaGUgU2VjdG9yIHJlcHJlc2VudHMgdGhlIGdlb2dyYXBoaWNhbCBhcmVhIHRoYXQgZ3JvdXBzIHRoZSBBbnRlbm5hTW9kdWxlcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgQW50ZW5uYU1vZHVsZXMuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIG9ubHkgYmUgZ3JvdXBlZCBieSBvbmUgU2VjdG9yLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGdyb3VwZWQtYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LXJhbjpTZWN0b3I7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgZ3JvdXBlZC1ieS1zZWN0b3IgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgZ3JvdXBlZCBieSBTZWN0b3IuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
-o-ran-smo-teiv-rel-oam-cloud urn:o-ran:smo-teiv-rel-oam-cloud REL_OAM_CLOUD ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-cloud"] 2024-07-15 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1vYW0tY2xvdWQgewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LXJlbC1vYW0tY2xvdWQiOwogICAgcHJlZml4IG9yLXRlaXYtb2FtdG9jbG91ZDsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtb2FtIHtwcmVmaXggb3ItdGVpdi1vYW07IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY2xvdWQge3ByZWZpeCBvci10ZWl2LWNsb3VkOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBPJk0gdG8gQ2xvdWQgdG9wb2xvZ3kgbW9kZWwuCgogICAgICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIFJBTiBPJk0gdG8gQ2xvdWQgdG9wb2xvZ3kgcmVsYXRpb25zCgogICAgICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMDIiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNy0xNSIgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHJldmlzaW9uIGFsaWducyBPLVJBTiBXb3JrIEdyb3VwIDEwIFN0YWdlIDIgU3BlY2lmaWNhdGlvbiAoTy1SQU4uV0cxMC5URSZJVi1DSU1JLjAtUjAwNC52MDIuMDApIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBSRUxfT0FNX0NMT1VEOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfREVQTE9ZRURfQVNfQ0xPVURJRklFRE5GIHsgIC8vIDAuLjEgdG8gMQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiBkZXBsb3llZC1hcy1jbG91ZGlmaWVkTkYgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IGRlcGxveWVkIGFzIENsb3VkaWZpZWQgTkYuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIGRlcGxveWVkLW1hbmFnZWRFbGVtZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkNsb3VkaWZpZWQgTkYgZGVwbG95cyBNYW5hZ2VkIEVsZW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtY2xvdWQ6Q2xvdWRpZmllZE5GOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfTUFOQUdFREVMRU1FTlQgeyAvLyAxLi5uIHRvIDEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgc2VydmljZWQtbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IHNlcnZpY2VkIGJ5IHRoaXMgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1jbG91ZDpORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCB0aGF0IHNlcnZlcyB0aGlzIE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQp9
-o-ran-smo-teiv-rel-oam-ran urn:o-ran:smo-teiv-rel-oam-ran REL_OAM_RAN ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-ran"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1vYW0tcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtb2FtLXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtb2FtcmFuOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LW9hbSB7IHByZWZpeCBvci10ZWl2LW9hbTsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1yYW4geyBwcmVmaXggb3ItdGVpdi1yYW47IH0KCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICAgICAiUkFOIE8mTSB0byBMb2dpY2FsIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBSQU4gTyZNIHRvIExvZ2ljYWwgdG9wb2xvZ3kgcmVsYXRpb25zCgogICAgICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjUuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNy0xNSIgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHJldmlzaW9uIGFsaWducyBPLVJBTiBXb3JrIEdyb3VwIDEwIFN0YWdlIDIgU3BlY2lmaWNhdGlvbiAoTy1SQU4uV0cxMC5URSZJVi1DSU1JLjAtUjAwNC52MDIuMDApIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9PQU1fUkFOOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PRFVGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE9EVUZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0RVRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9EVUZ1bmN0aW9ucy4KICAgICAgICAgICAgQW4gT0RVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9kdUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tRFUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PQ1VDUEZVTkNUSU9OIHsgICAgLy8gMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE1hbmFnZWRFbGVtZW50IHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9DVUNQRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9DVUNQRnVuY3Rpb25zLgogICAgICAgICAgICBBbiBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIG11c3QgYmUgbWFuYWdlZCBieSBvbmUgTWFuYWdlZEVsZW1lbnQuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbWFuYWdlZC1vY3VjcEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1DVS1DUCBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0NVQ1BGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBNQU5BR0VERUxFTUVOVF9NQU5BR0VTX09DVVVQRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPQ1VVUEZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0NVVVBGdW5jdGlvbi4KICAgICAgICAgICAgQSBNYW5hZ2VkRWxlbWVudCBpbnN0YW5jZSBjYW4gbWFuYWdlIG1hbnkgT0NVVVBGdW5jdGlvbnMuCiAgICAgICAgICAgIEFuIE9DVVVQRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9jdXVwRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTy1DVS1VUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgbWFuYWdlZC1ieS1tYW5hZ2VkRWxlbWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLVVQIEZ1bmN0aW9uIG1hbmFnZWQgYnkgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpPQ1VVUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE1BTkFHRURFTEVNRU5UX01BTkFHRVNfT1JVRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPUlVGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9SVUZ1bmN0aW9uLgogICAgICAgICAgICBBIE1hbmFnZWRFbGVtZW50IGluc3RhbmNlIGNhbiBtYW5hZ2UgbWFueSBPUlVGdW5jdGlvbi4KICAgICAgICAgICAgQW4gT1JVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9ydUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tUlUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1SVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T1JVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19ORUFSUlRSSUNGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5lYXJSVFJJQ0Z1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgTmVhclJUUklDRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE5lYXJSVFJJQ0Z1bmN0aW9uLgogICAgICAgICAgICBBbiBOZWFyUlRSSUNGdW5jdGlvbiBpbnN0YW5jZSBtdXN0IGJlIG1hbmFnZWQgYnkgb25lIE1hbmFnZWRFbGVtZW50LgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IG1hbmFnZWQtbmVhclJUUklDRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTmVhciBSVCBSSUMgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmVhciBSVCBSSUMgRnVuY3Rpb24gbWFuYWdlZCBieSBNYW5hZ2VkIEVsZW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOk5lYXJSVFJJQ0Z1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KfQ==
+o-ran-smo-teiv-ran urn:o-ran:smo-teiv-ran RAN [] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbgogICAgICAgICJSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gTG9naWNhbCBkb21haW4sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGZ1bmN0aW9uYWwgY2FwYWJpbGl0eQogICAgICAgIG9mIHRoZSBkZXBsb3llZCBSQU4gdGhhdCBhcmUgcmVsZXZhbnQgdG8gckFwcHMgdXNlIGNhc2VzLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFkZGVkIHJhbmdlIGZvciBhemltdXRoIGF0dHJpYnV0ZSBvZiBTZWN0b3IuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC42LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmdzLCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIG9yIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAKICAgICAgICB0byB0aGUgY29ycmVzcG9uZGluZyB0b3BvbG9neSBvYmplY3QuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDctMTUiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyByZXZpc2lvbiBhbGlnbnMgTy1SQU4gV29yayBHcm91cCAxMCBTdGFnZSAyIFNwZWNpZmljYXRpb24gKE8tUkFOLldHMTAuVEUmSVYtQ0lNSS4wLVIwMDQudjAyLjAwKSI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBSQU47CgogICAgbGlzdCBPUlVGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIFJhZGlvIFVuaXQgKE8tUlUpLgoKICAgICAgICBBIGxvZ2ljYWwgbm9kZSBob3N0aW5nIExvdy1QSFkgbGF5ZXIgYW5kIFJGIHByb2Nlc3NpbmcgYmFzZWQgb24gYQogICAgICAgIGxvd2VyIGxheWVyIGZ1bmN0aW9uYWwgc3BsaXQuICBUaGlzIGlzIHNpbWlsYXIgdG8gM0dQUOKAmXMg4oCcVFJQ4oCdIG9yCiAgICAgICAg4oCcUlJI4oCdIGJ1dCBtb3JlIHNwZWNpZmljIGluIGluY2x1ZGluZyB0aGUgTG93LVBIWSBsYXllciAoRkZUL2lGRlQsCiAgICAgICAgUFJBQ0ggZXh0cmFjdGlvbikuIFRoZSBPLVJVIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIGludGVyZmFjZQogICAgICAgIChhbHNvIGtub3duIGFzIExMUyBpbnRlcmZhY2UpIGFzIHdlbGwgYXMgTG93LVBIWSBmdW5jdGlvbnMgb2YgdGhlCiAgICAgICAgcmFkaW8gaW50ZXJmYWNlIHRvd2FyZHMgdGhlIFVFLiBUaGlzIGlzIGRlcGxveWVkIGFzIGEgUE5GLiBUaGUgTy1SVQogICAgICAgIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIE0tUGxhbmUgaW50ZXJmYWNlIHRvd2FyZHMgdGhlIE8tRFUKICAgICAgICBhbmQgU01PLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBPLVJVIG9iamVjdC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG9ydUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE8tUlUgd2l0aGluIGEgT1JVRnVuY3Rpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5lYXJSVFJJQ0Z1bmN0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbiAiTmVhci1SZWFsLVRpbWUgUkFOIEludGVsbGlnZW50IENvbnRyb2xsZXIgKE5lYXItUlQgUklDKS4KCiAgICAgICAgQW4gTy1SQU4gTmV0d29yayBGdW5jdGlvbiAoTkYpIHRoYXQgZW5hYmxlcyBuZWFyLXJlYWwtdGltZSBjb250cm9sCiAgICAgICAgYW5kIG9wdGltaXphdGlvbiBvZiBSQU4gZWxlbWVudHMgYW5kIHJlc291cmNlcyB2aWEgZmluZS1ncmFpbmVkCiAgICAgICAgZGF0YSBjb2xsZWN0aW9uIGFuZCBhY3Rpb25zIG92ZXIgRTIgaW50ZXJmYWNlLiBJdCBtYXkgaW5jbHVkZQogICAgICAgIEFJL01MIChBcnRpZmljaWFsIEludGVsbGlnZW5jZSAvIE1hY2hpbmUgTGVhcm5pbmcpIHdvcmtmbG93CiAgICAgICAgaW5jbHVkaW5nIG1vZGVsIHRyYWluaW5nLCBpbmZlcmVuY2UsIGFuZCB1cGRhdGVzLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBOZWFyLVJUIFJJQyBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuZWFyUnRSaWNJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBOZWFyLVJUIFJJQyB3aXRoaW4gYSBOZWFyUlRSSUNGdW5jdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4KICAgICAgICAgICAgICAgIG5vZGUgaWRlbnRpdHkiOwogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0RVRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBEaXN0cmlidXRlZCBVbml0IChPLURVKS4KCiAgICAgICAgVGhlIE8tRFUgaXMgYW4gTy1SQU4gTkYgaW4gdGhlIE8tUkFOIEFyY2hpdGVjdHVyZS4gQW4gTy1EVSwgY29tYmluZWQKICAgICAgICB3aXRoIG9uZSBvciBtb3JlIE8tUlUocykgY29ubmVjdGVkIHRvIGl0LCBzdXBwb3J0cyBhbmQgaXMgZnVsbHkKICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGZ1bmN0aW9ucyBvZiBhIGdOQi1EVSBhcyBkZWZpbmVkIGJ5IDNHUFAgVFMgMzguNDAxLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1EVToKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tQ1UtQ1AgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzCiAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEYxLVUgaW50ZXJmYWNlLiBPbmUgTy1EVSBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmx5IG9uZSBPLUNVLUNQLiBPbmUgTy1EVSBjYW4gYmUgY29ubmVjdGVkIHRvCiAgICAgICAgbXVsdGlwbGUgTy1DVS1VUHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gTy1EVSBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgTkctUkFOCiAgICAgICAgbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlCiAgICAgICAgdGhlIGdOQi1EVSBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgY29udGFpbmVyIGRVcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdXNlZCBhcyBwYXJ0IG9mIFBNIEV2ZW50cyBkYXRhIjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJEVUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIERVIHdpdGhpbiBhIGdOb2RlQiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJZGVudGl0eSBvZiBnTm9kZUIgd2l0aGluIGEgUExNTiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkTGVuZ3RoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZW5ndGggb2YgZ05CSWQgYml0IHN0cmluZyByZXByZXNlbnRhdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0NVQ1BGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIENlbnRyYWxpemVkIFVuaXQgQ29udHJvbCBQbGFuZSAoTy1DVS1DUCkKCiAgICAgICAgVGhpcyBpcyBhIGxvZ2ljYWwgbm9kZSBob3N0aW5nIHRoZSBSYWRpbyBSZXNvdXJjZSBDb250cm9sIChSUkMpIGFuZAogICAgICAgIHRoZSBjb250cm9sIHBsYW5lIHBhcnQgb2YgdGhlIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sCiAgICAgICAgKFBEQ1ApLiBUaGUgTy1DVS1DUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UgY29ubmVjdGVkIHdpdGgKICAgICAgICB0aGUgTy1DVS1VUCBhbmQgdGhlIEYxLUMgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoIHRoZSBPLVJBTgogICAgICAgIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1DUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25seSBvbmUgTy1DVS1DUCBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmUgTy1EVS4gT25seSBvbmUgTy1DVS1DUCBpcyBjb25uZWN0ZWQgdG8gb25lCiAgICAgICAgTy1DVS1VUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBPLUNVLVVQcyB1bmRlcgogICAgICAgIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZSBPLUNVLVVQIGNhbiBiZSBjb25uZWN0ZWQgdG8KICAgICAgICBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1DUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtQ1Agb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CQ1VOYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIGdOb2RlQi1DVSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZExlbmd0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVuZ3RoIG9mIGdOQklkIGJpdCBzdHJpbmcgcmVwcmVzZW50YXRpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIHBMTU5JZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUExNTiBpZGVudGlmaWVyIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBnbG9iYWwgUkFOCiAgICAgICAgICAgICAgICBub2RlIGlkZW50aXR5IjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE9DVVVQRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBDZW50cmFsaXplZCBVbml0IFVzZXIgUGxhbmUgKE8tQ1UtVVApCgogICAgICAgIEFuIE8tQ1UtVVAgaXMgYSBsb2dpY2FsIG5vZGUgaG9zdGluZyB0aGUgVXNlciBQbGFuZSBwYXJ0IG9mIHRoZQogICAgICAgIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sIChQRENQKSBhbmQgdGhlIFNlcnZpY2UgRGF0YQogICAgICAgIEFkYXB0YXRpb24gUHJvdG9jb2wgKFNEQVApLiBUaGUgTy1DVS1VUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UKICAgICAgICBjb25uZWN0ZWQgd2l0aCB0aGUgTy1DVS1DUCBhbmQgdGhlIEYxLVUgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoCiAgICAgICAgdGhlIE8tUkFOIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1VUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtVSBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLUNQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25lIE8tQ1UtVVAgaXMKICAgICAgICBjb25uZWN0ZWQgdG8gb25seSBvbmUgTy1DVS1DUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0bwogICAgICAgIG11bHRpcGxlIE8tQ1UtVVBzIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZQogICAgICAgIE8tQ1UtVVAgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCiAgICAgICAgc2FtZSBPLUNVLUNQLgoKICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhbiBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1VUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtVVAgb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIklkZW50aXR5IG9mIGdOb2RlQiB3aXRoaW4gYSBQTE1OIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpc3QgcExNTklkTGlzdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4gbm9kZSBpZGVudGl0eSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBOUkNlbGxDVSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgYW4gTlIgQ2VsbCBpbiBnTm9kZUItQ1UuCgogICAgICAgIDVHIE5SIGlzIGEgbmV3IHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IChSQVQpIGRldmVsb3BlZCBieSAzR1BQIGZvcgogICAgICAgIHRoZSA1RyAoZmlmdGggZ2VuZXJhdGlvbikgbW9iaWxlIG5ldHdvcmsuIEl0IGlzIGRlc2lnbmVkIHRvIGJlIHRoZQogICAgICAgIGdsb2JhbCBzdGFuZGFyZCBmb3IgdGhlIGFpciBpbnRlcmZhY2Ugb2YgNUcgbmV0d29ya3MuCgogICAgICAgIDVHIE5SIGhhcyBzeW5jaHJvbml6YXRpb24gc2lnbmFsIHRoYXQgaXMga25vd24gYXMgUHJpbWFyeQogICAgICAgIFN5bmNocm9uaXphdGlvbiBTaWduYWwgKFBTUykgYW5kIFNlY29uZGFyeSBTeW5jaHJvbml6YXRpb24KICAgICAgICBTaWduYWwgKFNTUykuIFRoZXNlIHNpZ25hbHMgYXJlIHNwZWNpZmljIHRvIE5SIHBoeXNpY2FsIGxheWVyIGFuZAogICAgICAgIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBVRSBmb3IgZG93bmxpbmsKICAgICAgICBzeW5jaHJvbml6YXRpb246IFBTUyBwcm92aWRlcyBSYWRpbyBGcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YgMXN0CiAgICAgICAgU3ltYm9sIGluIGEgUmFkaW8gZnJhbWUpIFNTUyBwcm92aWRlcyBTdWJmcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YKICAgICAgICAxc3QgU3ltYm9sIGluIGEgU3ViZnJhbWUpIFBoeXNpY2FsIExheWVyIENlbGwgSUQgKFBDSSkgaW5mb3JtYXRpb24KICAgICAgICB1c2luZyBib3RoIFBTUyBhbmQgU1NTLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgY2VsbExvY2FsSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVzZWQgdG9nZXRoZXIgd2l0aCBnTm9kZUIgaWRlbnRpZmllciB0byBpZGVudGlmeSBOUgogICAgICAgICAgICAgICAgY2VsbCBpbiBQTE1OLiBVc2VkIHRvZ2V0aGVyIHdpdGggZ05CSWQgdG8gZm9ybSBOQ0kuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBwbG1uSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlBMTU4gSUQgZm9yIE5SIENHSS4gSWYgZW1wdHksCiAgICAgICAgICAgICAgICBHTkJDVUNQRnVuY3Rpb246OnBMTU5JZCBpcyB1c2VkIGZvciBQTE1OIElEIGluIE5SIENHSSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbkNJIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsIElkZW50aXR5IjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKSI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTlJDZWxsRFUgewogICAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIGFuIE5SIENlbGwgaW4gZ05vZGVCLURVLgoKICAgICAgICA1RyBOUiBpcyBhIG5ldyByYWRpbyBhY2Nlc3MgdGVjaG5vbG9neSAoUkFUKSBkZXZlbG9wZWQgYnkgM0dQUCBmb3IKICAgICAgICB0aGUgNUcgKGZpZnRoIGdlbmVyYXRpb24pIG1vYmlsZSBuZXR3b3JrLiBJdCBpcyBkZXNpZ25lZCB0byBiZSB0aGUKICAgICAgICBnbG9iYWwgc3RhbmRhcmQgZm9yIHRoZSBhaXIgaW50ZXJmYWNlIG9mIDVHIG5ldHdvcmtzLgoKICAgICAgICA1RyBOUiBoYXMgc3luY2hyb25pemF0aW9uIHNpZ25hbCB0aGF0IGlzIGtub3duIGFzIFByaW1hcnkKICAgICAgICBTeW5jaHJvbml6YXRpb24gc2lnbmFsIChQU1MpIGFuZCBTZWNvbmRhcnkgU3luY2hyb25pemF0aW9uIHNpZ25hbAogICAgICAgIChTU1MpLiBUaGVzZSBzaWduYWxzIGFyZSBzcGVjaWZpYyB0byBOUiBwaHlzaWNhbCBsYXllciBhbmQgcHJvdmlkZQogICAgICAgIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgVUUgZm9yIGRvd25saW5rCiAgICAgICAgc3luY2hyb25pemF0aW9uOiBQU1MgcHJvdmlkZXMgUmFkaW8gRnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mIDFzdAogICAgICAgIFN5bWJvbCBpbiBhIFJhZGlvIGZyYW1lKSBTU1MgcHJvdmlkZXMgU3ViZnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mCiAgICAgICAgMXN0IFN5bWJvbCBpbiBhIFN1YmZyYW1lKSBQaHlzaWNhbCBMYXllciBDZWxsIElEIChQQ0kpIGluZm9ybWF0aW9uCiAgICAgICAgdXNpbmcgYm90aCBQU1MgYW5kIFNTUy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGNlbGxMb2NhbElkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVc2VkIHRvZ2V0aGVyIHdpdGggZ05vZGVCIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgTlIKICAgICAgICAgICAgICAgIGNlbGwgaW4gUExNTi4gVXNlZCB0b2dldGhlciB3aXRoIGdOQklkIHRvIGZvcm0gTkNJLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG5DSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBuUlBDSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIFBoeXNpY2FsIENlbGwgSWRlbnRpdHkgKFBDSSkgb2YgdGhlIE5SIGNlbGwuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5SU2VjdG9yQ2FycmllciB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBOUiBTZWN0b3IgQ2FycmllciBvYmplY3QgcHJvdmlkZXMgdGhlIGF0dHJpYnV0ZXMgZm9yCiAgICAgICAgZGVmaW5pbmcgdGhlIGxvZ2ljYWwgY2hhcmFjdGVyaXN0aWNzIG9mIGEgY2FycmllciAoY2VsbCkgaW4gYQogICAgICAgIHNlY3Rvci4gQSBzZWN0b3IgaXMgYSBjb3ZlcmFnZSBhcmVhIGFzc29jaWF0ZWQgd2l0aCBhIGJhc2Ugc3RhdGlvbgogICAgICAgIGhhdmluZyBpdHMgb3duIGFudGVubmFzLCByYWRpbyBwb3J0cywgYW5kIGNvbnRyb2wgY2hhbm5lbHMuIFRoZQogICAgICAgIGNvbmNlcHQgb2Ygc2VjdG9ycyB3YXMgZGV2ZWxvcGVkIHRvIGltcHJvdmUgY28tY2hhbm5lbCBpbnRlcmZlcmVuY2UKICAgICAgICBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcyBzeXN0ZW1zIHVzZSB0aHJlZSBzZWN0b3IKICAgICAgICBjZWxscy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGFyZmNuREwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIEFic29sdXRlIFJhZGlvIEZyZXF1ZW5jeSBDaGFubmVsIE51bWJlcgogICAgICAgICAgICAgICAgKE5SLUFSRkNOKSBmb3IgZG93bmxpbmsiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhcmZjblVMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBBYnNvbHV0ZSBSYWRpbyBmcmVxdWVuY3kgQ2hhbm5lbCBOdW1iZXIKICAgICAgICAgICAgICAgIChOUi1BUkZDTikgZm9yIHVwbGluay4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBmcmVxdWVuY3lETCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUkYgUmVmZXJlbmNlIEZyZXF1ZW5jeSBvZiBkb3dubGluayBjaGFubmVsIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZnJlcXVlbmN5VUwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJGIFJlZmVyZW5jZSBGcmVxdWVuY3kgb2YgdXBsaW5rIGNoYW5uZWwiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBiU0NoYW5uZWxCd0RMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJCUyBDaGFubmVsIGJhbmR3aWR0aCBpbiBNSHogZm9yIGRvd25saW5rLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgQW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIE1PIHNlcnZlcyBhcyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUgY2VsbCBhbmQgdGhlIFJCUwogICAgICAgIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UgaW4gYSBjZXJ0YWluIGdlb2dyYXBoaWNhbCBhcmVhLgogICAgICAgIFRoZSBNTyBhbHNvIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG91dHB1dCBwb3dlciBvZiB0aGUgc2VjdG9yLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYtbGlzdCBlVXRyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIExURSBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGdlcmFuRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBHRVJBTiBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IG5SRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBOUiBmcmVxdWVuY3kgYmFuZHMgYXNzb2NpYXRlZCBoYXJkd2FyZQogICAgICAgICAgICAgICAgc3VwcG9ydHMiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBTZWN0b3IgewogICAgICAgIGRlc2NyaXB0aW9uICJBIGdyb3VwIG9mIGNvLWxvY2F0ZWQgQ2VsbHMgdGhhdCBoYXZlIGEgc2hhcmVkCiAgICAgICAgY292ZXJhZ2UgYXJlYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIHNlY3RvcklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbml2ZXJzYWxseSB1bmlxdWUgSUQgZ2VuZXJhdGVkIGJ5IHRoZSBzZWN0b3IncwogICAgICAgICAgICAgICAgZGlzY292ZXJ5IG1lY2hhbmlzbS4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzZXMgZ2VvOmdlby1sb2NhdGlvbjsKCiAgICAgICAgICAgIGxlYWYgYXppbXV0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiQXZlcmFnZSB2YWx1ZSBvZiB0aGUgYXppbXV0aHMgb2YgdGhlIGNlbGxzCiAgICAgICAgICAgICAgICBjb21wcmlzaW5nIHRoZSBzZWN0b3IsIGRldGVybWluZWQgZHVyaW5nIHNlY3RvciBkaXNjb3ZlcnkuIjsKICAgICAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0ewogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxOwogICAgICAgICAgICAgICAgICAgIHJhbmdlICIwLi4zNjAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgT0RVRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMRFUgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgT0RVRnVuY3Rpb24gcmVwcmVzZW50cyB0aGUgRFUgY29tcG9uZW50IG9mIGEgZ05CIHRoYXQgcHJvdmlkZXMgdGhlIE5SQ2VsbERVLgogICAgICAgICAgICBBIE9EVUZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBtdXN0IGJlIHByb3ZpZGVkIGJ5IGFuIE9EVUZ1bmN0aW9uLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHByb3ZpZGVkLW5yQ2VsbER1IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tRFUgRnVuY3Rpb24gcHJvdmlkZXMgTlIgQ2VsbC1EVS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbC1EVSBwcm92aWRlZCBieSBPLURVIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBPRFVGVU5DVElPTl9QUk9WSURFU19OUlNFQ1RPUkNBUlJJRVIgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUlNlY3RvckNhcnJpZXIgdHlwZS4KICAgICAgICAgICAgVGhlIE9EVUZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIERVIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUlNlY3RvckNhcnJpZXIuCiAgICAgICAgICAgIEEgT0RVRnVuY3Rpb24gaW5zdGFuY2UgY2FuIHByb3ZpZGUgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgbXVzdCBiZSBwcm92aWRlZCBieSBhbiBPRFVGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uclNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBwcm92aWRlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgTy1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTlJTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE9DVUNQRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMQ1UgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbENVIHR5cGUuCiAgICAgICAgICAgIFRoZSBPQ1VDUEZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIENVLUNQIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUkNlbGxDVS4KICAgICAgICAgICAgQSBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsQ1UuCiAgICAgICAgICAgIEFuIE5SQ2VsbENVIGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQgYnkgYW4gT0NVQ1BGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uckNlbGxDdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLUNQIEZ1bmN0aW9uIHByb3ZpZGVzIE5SIENlbGwtQ1UuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE9DVUNQRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2N1Y3BGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLUNVIHByb3ZpZGVkIGJ5IE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SQ2VsbENVOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SQ0VMTERVX1VTRVNfTlJTRUNUT1JDQVJSSUVSIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTlJTZWN0b3JDYXJyaWVyIHR5cGUuCiAgICAgICAgICAgIFRoZSBOUkNlbGxEVSByZXByZXNlbnRzIHRoZSBjZWxsIHRoYXQgdXNlcyB0aGUgTlJTZWN0b3JDYXJyaWVyLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gdXNlIG1hbnkgTlJTZWN0b3JDYXJyaWVycy4KICAgICAgICAgICAgQW4gTlJTZWN0b3JDYXJyaWVyIGluc3RhbmNlIGNhbiBvbmx5IGJlIHVzZWQgYnkgb25lIE5SQ2VsbERVLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHVzZWQtbnJTZWN0b3JDYXJyaWVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIENlbGwtRFUgdXNlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTlJDZWxsRFU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdXNlZC1ieS1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBTZWN0b3IgQ2FycmllciB1c2VkIGJ5IE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SU0VDVE9SQ0FSUklFUl9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SU2VjdG9yQ2FycmllciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFDYXBhYmlsaXR5IHR5cGUuCiAgICAgICAgICAgIFRoZSBOUlNlY3RvckNhcnJpZXIgcmVwcmVzZW50cyB0aGUgY2FycmllciB0aGF0IHVzZXMgdGhlIEFudGVubmFDYXBhYmlsaXR5LgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgY2FuIHVzZSBvbmx5IG9uZSBBbnRlbm5hQ2FwYWJpbGl0eS4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHVzZWQgYnkgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiB1c2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFNlY3RvciBDYXJyaWVyIHVzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBOUlNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCB1c2VkLWJ5LW5yU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgdXNlZCBieSBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX05SQ0VMTERVIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNlY3RvciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBTZWN0b3IgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGFyZWEgdGhhdCBncm91cHMgdGhlIE5SQ2VsbERVcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gb25seSBiZSBncm91cGVkIGJ5IG9uZSBTZWN0b3IuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgZ3JvdXBlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIFNlY3RvcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBncm91cGVkLWJ5LXNlY3RvciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIGdyb3VwZWQgYnkgU2VjdG9yLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
+o-ran-smo-teiv-rel-cloud-ran urn:o-ran:smo-teiv-rel-cloud-ran REL_CLOUD_RAN ["o-ran-smo-teiv-cloud", "o-ran-smo-teiv-ran"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1jbG91ZC1yYW4gewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LXJlbC1jbG91ZC1yYW4iOwogICAgcHJlZml4IG9yLXRlaXYtY2xvdWR0b3JhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY2xvdWQge3ByZWZpeCBvci10ZWl2LWNsb3VkOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LXJhbiB7cHJlZml4IG9yLXRlaXYtcmFuOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBDbG91ZCB0byBSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIENsb3VkIHRvIFJBTiBMb2dpY2FsIHRvcG9sb2d5IHJlbGF0aW9ucy4KCiAgICAgICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICAgICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogICAgICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0xMC0wNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBncm91cGluZywgT3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycCB0byB0aGUgdG9wb2xvZ3kgb2JqZWN0LiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTAyIiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDctMTUiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyByZXZpc2lvbiBhbGlnbnMgTy1SQU4gV29yayBHcm91cCAxMCBTdGFnZSAyIFNwZWNpZmljYXRpb24gKE8tUkFOLldHMTAuVEUmSVYtQ0lNSS4wLVIwMDQudjAyLjAwKSI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkVMX0NMT1VEX1JBTjsKCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfT0RVRlVOQ1RJT04geyAvLyAwLi5uIHRvIDAuLm0KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1vZHVGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLURVIEZ1bmN0aW9uIHNlcnZpY2VkIGJ5IHRoaXMgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1jbG91ZDpORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLW5GRGVwbG95bWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IHRoYXQgc2VydmVzIHRoaXMgTy1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBORkRFUExPWU1FTlRfU0VSVkVTX09DVUNQRlVOQ1RJT04geyAvLyAwLi5uIHRvIDAuLm0KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1vY3VjcEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tQ1UtQ1AgRnVuY3Rpb24gc2VydmljZWQgYnkgdGhpcyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWNsb3VkOk5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctbkZEZXBsb3ltZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgdGhhdCBzZXJ2ZXMgdGhpcyBPLUNVLUNQIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpPQ1VDUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX1NFUlZFU19PQ1VVUEZVTkNUSU9OIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtb2N1dXBGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLVVQIEZ1bmN0aW9uIHNlcnZpY2VkIGJ5IHRoaXMgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1jbG91ZDpORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLW5GRGVwbG95bWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IHRoYXQgc2VydmVzIHRoaXMgTy1DVS1VUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0NVVVBGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfTkVBUlJUUklDRlVOQ1RJT04geyAvLyAwLi5uIHRvIDAuLm0KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1uZWFyUlRSSUNGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOZWFyUlRSSUNGdW5jdGlvbiBzZXJ2aWNlZCBieSB0aGlzIE5GIERlcGxveW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtY2xvdWQ6TkZEZXBsb3ltZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCB0aGF0IHNlcnZlcyB0aGlzIE5lYXJSVFJJQ0Z1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpOZWFyUlRSSUNGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
+o-ran-smo-teiv-rel-equipment-ran urn:o-ran:smo-teiv-rel-equipment-ran REL_EQUIPMENT_RAN ["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1lcXVpcG1lbnQtcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtZXF1aXBtZW50LXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtZXF1aXByYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHsgcHJlZml4IG9yLXRlaXYtZXF1aXA7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtcmFuIHsgcHJlZml4IG9yLXRlaXYtcmFuOyB9CgoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbiAKICAgICJSQU4gRXF1aXBtZW50IHRvIExvZ2ljYWwgdG9wb2xvZ3kgbW9kZWwuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIEVxdWlwbWVudCB0byBMb2dpY2FsIHRvcG9sb2d5CiAgICBlbnRpdGllcyBhbmQgcmVsYXRpb25zLgoKICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9TRVJWRVNfTlJDRUxMRFUuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkVMX0VRVUlQTUVOVF9SQU47CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BTU9EVUxFX1NFUlZFU19BTlRFTk5BQ0FQQUJJTElUWSB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBBbnRlbm5hTW9kdWxlIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYUNhcGFiaWxpdHkgdHlwZS4KICAgICAgICAgICAgVGhlIEFudGVubmFNb2R1bGUgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgYW50ZW5uYSB0aGF0IHNlcnZlcyB0aGUgQW50ZW5uYUNhcGFiaWxpdHkuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIHNlcnZlIG1hbnkgQW50ZW5uYUNhcGFiaWxpdGllcy4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHNlcnZlZCBieSBtYW55IEFudGVubmFNb2R1bGVzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHNlcnZpY2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSBzZXJ2aWNlZCBieSB0aGlzIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWVxdWlwOkFudGVubmFNb2R1bGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLWFudGVubmFNb2R1bGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgc2VydmVzIHRoaXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpBbnRlbm5hQ2FwYWJpbGl0eTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFNT0RVTEVfU0VSVkVTX05SQ0VMTERVIHsgLy8gMS4ubiB0byAwLi5tCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFNb2R1bGUgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgQW50ZW5uYU1vZHVsZSByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBhbnRlbm5hIHRoYXQgc2VydmVzIHRoZSBOUkNlbGxEVS4KICAgICAgICAgICAgQW4gQW50ZW5uYU1vZHVsZSBpbnN0YW5jZSBjYW4gc2VydmUgbWFueSBOUkNlbGxEVXMuCiAgICAgICAgICAgIEFuIE5SQ2VsbERVIGluc3RhbmNlIGNhbiBiZSBzZXJ2ZWQgYnkgbWFueSBBbnRlbm5hTW9kdWxlcy4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIHNlcnZpY2VkIGJ5IHRoaXMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBzZXJ2ZXMgdGhpcyBOUiBDZWxsLURVLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX0FOVEVOTkFNT0RVTEUgeyAvLyAwLi4xIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU2VjdG9yIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYU1vZHVsZSB0eXBlLgogICAgICAgICAgICBUaGUgU2VjdG9yIHJlcHJlc2VudHMgdGhlIGdlb2dyYXBoaWNhbCBhcmVhIHRoYXQgZ3JvdXBzIHRoZSBBbnRlbm5hTW9kdWxlcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgQW50ZW5uYU1vZHVsZXMuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIG9ubHkgYmUgZ3JvdXBlZCBieSBvbmUgU2VjdG9yLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGdyb3VwZWQtYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LXJhbjpTZWN0b3I7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgZ3JvdXBlZC1ieS1zZWN0b3IgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgZ3JvdXBlZCBieSBTZWN0b3IuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
+o-ran-smo-teiv-rel-oam-cloud urn:o-ran:smo-teiv-rel-oam-cloud REL_OAM_CLOUD ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-cloud"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1vYW0tY2xvdWQgewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LXJlbC1vYW0tY2xvdWQiOwogICAgcHJlZml4IG9yLXRlaXYtb2FtdG9jbG91ZDsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtb2FtIHtwcmVmaXggb3ItdGVpdi1vYW07IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY2xvdWQge3ByZWZpeCBvci10ZWl2LWNsb3VkOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBPJk0gdG8gQ2xvdWQgdG9wb2xvZ3kgbW9kZWwuCgogICAgICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIFJBTiBPJk0gdG8gQ2xvdWQgdG9wb2xvZ3kgcmVsYXRpb25zCgogICAgICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA3LTE1IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcmV2aXNpb24gYWxpZ25zIE8tUkFOIFdvcmsgR3JvdXAgMTAgU3RhZ2UgMiBTcGVjaWZpY2F0aW9uIChPLVJBTi5XRzEwLlRFJklWLUNJTUkuMC1SMDA0LnYwMi4wMCkiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9PQU1fQ0xPVUQ7CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBNQU5BR0VERUxFTUVOVF9ERVBMT1lFRF9BU19DTE9VRElGSUVETkYgeyAgLy8gMC4uMSB0byAxCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGRlcGxveWVkLWFzLWNsb3VkaWZpZWRORiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYW5hZ2VkIEVsZW1lbnQgZGVwbG95ZWQgYXMgQ2xvdWRpZmllZCBORi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgZGVwbG95ZWQtbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2xvdWRpZmllZCBORiBkZXBsb3lzIE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1jbG91ZDpDbG91ZGlmaWVkTkY7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX1NFUlZFU19NQU5BR0VERUxFTUVOVCB7IC8vIDEuLm4gdG8gMQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiBzZXJ2aWNlZC1tYW5hZ2VkRWxlbWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYW5hZ2VkIEVsZW1lbnQgc2VydmljZWQgYnkgdGhpcyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWNsb3VkOk5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLW5GRGVwbG95bWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IHRoYXQgc2VydmVzIHRoaXMgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LW9hbTpNYW5hZ2VkRWxlbWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9Cn0=
+o-ran-smo-teiv-rel-oam-ran urn:o-ran:smo-teiv-rel-oam-ran REL_OAM_RAN ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-ran"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1vYW0tcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtb2FtLXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtb2FtcmFuOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LW9hbSB7IHByZWZpeCBvci10ZWl2LW9hbTsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1yYW4geyBwcmVmaXggb3ItdGVpdi1yYW47IH0KCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICAgICAiUkFOIE8mTSB0byBMb2dpY2FsIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBSQU4gTyZNIHRvIExvZ2ljYWwgdG9wb2xvZ3kgcmVsYXRpb25zCgogICAgICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjUuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNy0xNSIgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHJldmlzaW9uIGFsaWducyBPLVJBTiBXb3JrIEdyb3VwIDEwIFN0YWdlIDIgU3BlY2lmaWNhdGlvbiAoTy1SQU4uV0cxMC5URSZJVi1DSU1JLjAtUjAwNC52MDIuMDApIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9PQU1fUkFOOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PRFVGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE9EVUZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0RVRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9EVUZ1bmN0aW9ucy4KICAgICAgICAgICAgQW4gT0RVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9kdUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tRFUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PQ1VDUEZVTkNUSU9OIHsgICAgLy8gMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE1hbmFnZWRFbGVtZW50IHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9DVUNQRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9DVUNQRnVuY3Rpb25zLgogICAgICAgICAgICBBbiBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIG11c3QgYmUgbWFuYWdlZCBieSBvbmUgTWFuYWdlZEVsZW1lbnQuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbWFuYWdlZC1vY3VjcEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1DVS1DUCBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0NVQ1BGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBNQU5BR0VERUxFTUVOVF9NQU5BR0VTX09DVVVQRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPQ1VVUEZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0NVVVBGdW5jdGlvbi4KICAgICAgICAgICAgQSBNYW5hZ2VkRWxlbWVudCBpbnN0YW5jZSBjYW4gbWFuYWdlIG1hbnkgT0NVVVBGdW5jdGlvbnMuCiAgICAgICAgICAgIEFuIE9DVVVQRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9jdXVwRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTy1DVS1VUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgbWFuYWdlZC1ieS1tYW5hZ2VkRWxlbWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLVVQIEZ1bmN0aW9uIG1hbmFnZWQgYnkgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpPQ1VVUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE1BTkFHRURFTEVNRU5UX01BTkFHRVNfT1JVRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPUlVGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9SVUZ1bmN0aW9uLgogICAgICAgICAgICBBIE1hbmFnZWRFbGVtZW50IGluc3RhbmNlIGNhbiBtYW5hZ2UgbWFueSBPUlVGdW5jdGlvbi4KICAgICAgICAgICAgQW4gT1JVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9ydUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tUlUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1SVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T1JVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19ORUFSUlRSSUNGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5lYXJSVFJJQ0Z1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgTmVhclJUUklDRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE5lYXJSVFJJQ0Z1bmN0aW9uLgogICAgICAgICAgICBBbiBOZWFyUlRSSUNGdW5jdGlvbiBpbnN0YW5jZSBtdXN0IGJlIG1hbmFnZWQgYnkgb25lIE1hbmFnZWRFbGVtZW50LgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IG1hbmFnZWQtbmVhclJUUklDRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTmVhciBSVCBSSUMgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmVhciBSVCBSSUMgRnVuY3Rpb24gbWFuYWdlZCBieSBNYW5hZ2VkIEVsZW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOk5lYXJSVFJJQ0Z1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KfQ==
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
o-ran-smo-teiv-cloud_CloudifiedNF CloudifiedNF o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-cloud_NFDeployment NFDeployment o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-cloud_NodeCluster NodeCluster o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-ran_Sector Sector o-ran-smo-teiv-ran ["azimuth", "geo-location", "sectorId"]
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
ANTENNAMODULE_INSTALLED_AT_SITE installed-at-site AntennaModule o-ran-smo-teiv-equipment 0 9223372036854775807 installed-antennaModule Site o-ran-smo-teiv-equipment 0 1 BI_DIRECTIONAL false A_SIDE o-ran-smo-teiv-equipment_AntennaModule o-ran-smo-teiv-equipment
ANTENNAMODULE_SERVES_ANTENNACAPABILITY serviced-antennaCapability AntennaModule o-ran-smo-teiv-equipment 0 9223372036854775807 serving-antennaModule AntennaCapability o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY o-ran-smo-teiv-rel-equipment-ran
ANTENNAMODULE_SERVES_NRCELLDU serviced-nrCellDu AntennaModule o-ran-smo-teiv-equipment 1 9223372036854775807 serving-antennaModule NRCellDU o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU o-ran-smo-teiv-rel-equipment-ran
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO topology_exposure_user;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO topology_exposure_user;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO topology_exposure_user;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO topology_exposure_user;
SET default_tablespace = '';
SET default_table_access_method = heap;
-SET ROLE 'topology_exposure_user';
+SET ROLE topology_exposure_user;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE OR REPLACE FUNCTION ties_data.create_enum_type(
+CREATE OR REPLACE FUNCTION teiv_data.create_enum_type(
schema_name TEXT, type_name TEXT, enum_values TEXT[]
) RETURNS VOID AS $$
BEGIN
END;
$$ language 'plpgsql';
-SELECT ties_data.create_enum_type('ties_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
+SELECT teiv_data.create_enum_type('teiv_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
-CREATE TABLE IF NOT EXISTS ties_data."responsible_adapter" (
+CREATE TABLE IF NOT EXISTS teiv_data."responsible_adapter" (
"id" TEXT,
"hashed_id" BYTEA
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'PK_responsible_adapter_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'UNIQUE_responsible_adapter_hashed_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
-);CREATE TABLE IF NOT EXISTS ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" (
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
+);CREATE TABLE IF NOT EXISTS teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_NearRTRICFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
+CREATE TABLE IF NOT EXISTS teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
"id" TEXT,
"aSide_AntennaModule" TEXT,
"bSide_AntennaCapability" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCloudNamespace" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NFDeployment" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NFDeployment" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"REL_metadata_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" (
"id" TEXT,
"aSide_NodeCluster" TEXT,
"bSide_OCloudSite" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NodeCluster" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NodeCluster" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"REL_metadata_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_OCloudSite" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_OCloudSite" (
"id" TEXT,
"geo-location" geography,
"name" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_AntennaModule" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-equipment_AntennaModule" (
"id" TEXT,
"antennaBeamWidth" jsonb,
"antennaModelNumber" TEXT,
"REL_metadata_SECTOR_GROUPS_ANTENNAMODULE" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_Site" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-equipment_Site" (
"id" TEXT,
"geo-location" geography,
"name" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-oam_ManagedElement" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-oam_ManagedElement" (
"id" TEXT,
"CD_sourceIds" jsonb,
"CD_classifiers" jsonb,
"REL_metadata_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_AntennaCapability" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_AntennaCapability" (
"id" TEXT,
"eUtranFqBands" jsonb,
"geranFqBands" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRCellCU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRCellCU" (
"id" TEXT,
"cellLocalId" INTEGER,
"nCI" BIGINT,
"REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRCellDU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRCellDU" (
"id" TEXT,
"cellLocalId" INTEGER,
"nCI" BIGINT,
"REL_metadata_SECTOR_GROUPS_NRCELLDU" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" (
"id" TEXT,
"arfcnDL" INTEGER,
"arfcnUL" INTEGER,
"REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" (
"id" TEXT,
"nearRtRicId" BIGINT,
"pLMNId" jsonb,
"REL_metadata_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_OCUCPFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" (
"id" TEXT,
"gNBCUName" TEXT,
"gNBId" BIGINT,
"REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_OCUUPFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" (
"id" TEXT,
"gNBId" BIGINT,
"gNBIdLength" INTEGER,
"REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ODUFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ODUFunction" (
"id" TEXT,
"dUpLMNId" jsonb,
"gNBDUId" BIGINT,
"REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ORUFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ORUFunction" (
"id" TEXT,
"oruId" BIGINT,
"CD_sourceIds" jsonb,
"REL_metadata_MANAGEDELEMENT_MANAGES_ORUFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"geo-location" geography,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCUCPFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCUUPFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_ODUFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" (
"id" TEXT,
"aSide_AntennaModule" TEXT,
"bSide_NRCellDU" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_CloudifiedNF',
'PK_o-ran-smo-teiv-cloud_CloudifiedNF_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_CloudifiedNF_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_CloudifiedNF_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'PK_o-ran-smo-teiv-cloud_NFDeployment_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NFDeployment_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NFDeployment_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NodeCluster',
'PK_o-ran-smo-teiv-cloud_NodeCluster_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NodeCluster" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NodeCluster_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NodeCluster_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'PK_o-ran-smo-teiv-cloud_OCloudNamespace_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudNamespace_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudNamespace_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudSite',
'PK_o-ran-smo-teiv-cloud_OCloudSite_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudSite" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudSite_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudSite_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'PK_o-ran-smo-teiv-equipment_AntennaModule_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_Site',
'PK_o-ran-smo-teiv-equipment_Site_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_Site" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_Site_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_Site" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_Site_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'PK_o-ran-smo-teiv-oam_ManagedElement_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "PK_o-ran-smo-teiv-oam_ManagedElement_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "PK_o-ran-smo-teiv-oam_ManagedElement_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_AntennaCapability',
'PK_o-ran-smo-teiv-ran_AntennaCapability_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'PK_o-ran-smo-teiv-ran_NRCellCU_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellCU_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellCU_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'PK_o-ran-smo-teiv-ran_NRCellDU_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellDU_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellDU_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'PK_o-ran-smo-teiv-ran_NRSectorCarrier_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRSectorCarrier_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRSectorCarrier_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'PK_o-ran-smo-teiv-ran_NearRTRICFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NearRTRICFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NearRTRICFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'PK_o-ran-smo-teiv-ran_OCUCPFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUCPFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUCPFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'PK_o-ran-smo-teiv-ran_OCUUPFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUUPFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUUPFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'PK_o-ran-smo-teiv-ran_ODUFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ODUFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ODUFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'PK_o-ran-smo-teiv-ran_ORUFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ORUFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ORUFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_Sector',
'PK_o-ran-smo-teiv-ran_Sector_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_Sector" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_Sector" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'PK_E551D02D14B3C04A565DC73A386BEB29627D3C08',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "PK_E551D02D14B3C04A565DC73A386BEB29627D3C08" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "PK_E551D02D14B3C04A565DC73A386BEB29627D3C08" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'PK_F41873285F3BD831F63C6041B4356A063403406D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "PK_F41873285F3BD831F63C6041B4356A063403406D" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "PK_F41873285F3BD831F63C6041B4356A063403406D" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5" FOREIGN KEY ("bSide_NearRTRICFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5" FOREIGN KEY ("bSide_NearRTRICFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."o-ran-smo-teiv-equipment_AntennaModule" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'FK_A08D274894ECB6799E56C2089A494AF0345B9B16',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_A08D274894ECB6799E56C2089A494AF0345B9B16" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_A08D274894ECB6799E56C2089A494AF0345B9B16" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F" FOREIGN KEY ("bSide_OCloudNamespace") REFERENCES ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F" FOREIGN KEY ("bSide_OCloudNamespace") REFERENCES teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0" FOREIGN KEY ("REL_FK_comprised-by-cloudifiedNF") REFERENCES ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0" FOREIGN KEY ("REL_FK_comprised-by-cloudifiedNF") REFERENCES teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC" UNIQUE ("REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC" UNIQUE ("REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9" FOREIGN KEY ("REL_FK_serviced-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9" FOREIGN KEY ("REL_FK_serviced-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC" UNIQUE ("REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC" UNIQUE ("REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92" FOREIGN KEY ("aSide_NodeCluster") REFERENCES ties_data."o-ran-smo-teiv-cloud_NodeCluster" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92" FOREIGN KEY ("aSide_NodeCluster") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'FK_888BF6FF782916E61B3FE80643A549A1CFDB6117',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_888BF6FF782916E61B3FE80643A549A1CFDB6117" FOREIGN KEY ("bSide_OCloudSite") REFERENCES ties_data."o-ran-smo-teiv-cloud_OCloudSite" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_888BF6FF782916E61B3FE80643A549A1CFDB6117" FOREIGN KEY ("bSide_OCloudSite") REFERENCES teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF" FOREIGN KEY ("REL_FK_deployed-on-nodeCluster") REFERENCES ties_data."o-ran-smo-teiv-cloud_NodeCluster" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF" FOREIGN KEY ("REL_FK_deployed-on-nodeCluster") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0" UNIQUE ("REL_ID_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0" UNIQUE ("REL_ID_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC" FOREIGN KEY ("REL_FK_installed-at-site") REFERENCES ties_data."o-ran-smo-teiv-equipment_Site" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC" FOREIGN KEY ("REL_FK_installed-at-site") REFERENCES teiv_data."o-ran-smo-teiv-equipment_Site" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1" UNIQUE ("REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1" UNIQUE ("REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'FK_078764B2F3D613D44CC6E3586F564C83164D2481',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_078764B2F3D613D44CC6E3586F564C83164D2481" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."o-ran-smo-teiv-ran_Sector" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_078764B2F3D613D44CC6E3586F564C83164D2481" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES teiv_data."o-ran-smo-teiv-ran_Sector" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0" UNIQUE ("REL_ID_SECTOR_GROUPS_ANTENNAMODULE");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0" UNIQUE ("REL_ID_SECTOR_GROUPS_ANTENNAMODULE");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'FK_899B8130A861D1450FC49D3159D8B29C0628A717',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "FK_899B8130A861D1450FC49D3159D8B29C0628A717" FOREIGN KEY ("REL_FK_deployed-as-cloudifiedNF") REFERENCES ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "FK_899B8130A861D1450FC49D3159D8B29C0628A717" FOREIGN KEY ("REL_FK_deployed-as-cloudifiedNF") REFERENCES teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708" UNIQUE ("REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708" UNIQUE ("REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction" FOREIGN KEY ("REL_FK_provided-by-ocucpFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUCPFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction" FOREIGN KEY ("REL_FK_provided-by-ocucpFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497" UNIQUE ("REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497" UNIQUE ("REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."o-ran-smo-teiv-ran_Sector" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES teiv_data."o-ran-smo-teiv-ran_Sector" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4" UNIQUE ("REL_ID_SECTOR_GROUPS_NRCELLDU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4" UNIQUE ("REL_ID_SECTOR_GROUPS_NRCELLDU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu" FOREIGN KEY ("REL_FK_used-by-nrCellDu") REFERENCES ties_data."o-ran-smo-teiv-ran_NRCellDU" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu" FOREIGN KEY ("REL_FK_used-by-nrCellDu") REFERENCES teiv_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25" UNIQUE ("REL_ID_NRCELLDU_USES_NRSECTORCARRIER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25" UNIQUE ("REL_ID_NRCELLDU_USES_NRSECTORCARRIER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_65D538D54EB33081C808540235FEB28823428E64',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_65D538D54EB33081C808540235FEB28823428E64" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_65D538D54EB33081C808540235FEB28823428E64" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192" UNIQUE ("REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192" UNIQUE ("REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'UNIQUE_E020461673334EB824643649B6B31670FB064EC8',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "UNIQUE_E020461673334EB824643649B6B31670FB064EC8" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "UNIQUE_E020461673334EB824643649B6B31670FB064EC8" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'FK_122DD9709032528D161177B3624AD7AAF6589005',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "FK_122DD9709032528D161177B3624AD7AAF6589005" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "FK_122DD9709032528D161177B3624AD7AAF6589005" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6" FOREIGN KEY ("bSide_OCUCPFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUCPFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6" FOREIGN KEY ("bSide_OCUCPFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'FK_8585D545BC37A473A298E0F5F5942F897A7105B1',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_8585D545BC37A473A298E0F5F5942F897A7105B1" FOREIGN KEY ("bSide_OCUUPFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUUPFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_8585D545BC37A473A298E0F5F5942F897A7105B1" FOREIGN KEY ("bSide_OCUUPFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08" FOREIGN KEY ("bSide_ODUFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08" FOREIGN KEY ("bSide_ODUFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."o-ran-smo-teiv-equipment_AntennaModule" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649" FOREIGN KEY ("aSide_AntennaModule") REFERENCES teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'FK_8605800A4923C52258A8CE3989E18A7C93D22E8C',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_8605800A4923C52258A8CE3989E18A7C93D22E8C" FOREIGN KEY ("bSide_NRCellDU") REFERENCES ties_data."o-ran-smo-teiv-ran_NRCellDU" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_8605800A4923C52258A8CE3989E18A7C93D22E8C" FOREIGN KEY ("bSide_NRCellDU") REFERENCES teiv_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
);
-CREATE INDEX IF NOT EXISTS "IDX_996D2C34C2458A6EFE8599C1A0E6942D3D288B7A" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_996D2C34C2458A6EFE8599C1A0E6942D3D288B7A" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F52FEEDBAF1B04D2D22EBAE051BB5125DF6A6968" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F52FEEDBAF1B04D2D22EBAE051BB5125DF6A6968" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D333FA5882890B7CD3599712FFFB2641B9E04C80" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_D333FA5882890B7CD3599712FFFB2641B9E04C80" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_9EDB5C47201FC82A4565BFED9EF369D6C6529B19" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_9EDB5C47201FC82A4565BFED9EF369D6C6529B19" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_BD96130868B69147B2F87B0D15F5829690DEF454" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_BD96130868B69147B2F87B0D15F5829690DEF454" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_CloudifiedNF_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_CloudifiedNF_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_F97E398B17532BCD9923CE0CF98E73227D890037" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F97E398B17532BCD9923CE0CF98E73227D890037" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1BCFD9635C4FA089EDC2E18FFEF56DBF3C5E7A52" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1BCFD9635C4FA089EDC2E18FFEF56DBF3C5E7A52" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_4055A796F223DD01411AFFB5AD97EEEAB6B2320C" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_4055A796F223DD01411AFFB5AD97EEEAB6B2320C" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_6433B9B7D69E51E828BDCFCAF59729EDCD10DA60" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6433B9B7D69E51E828BDCFCAF59729EDCD10DA60" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_BED5B5FAA75FEE133E27581EAA611B89D20F24E1" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_BED5B5FAA75FEE133E27581EAA611B89D20F24E1" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NFDeployment_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NFDeployment_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_072EB0C094138AB2D90F9CFBDA765B3B464EE86F" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_072EB0C094138AB2D90F9CFBDA765B3B464EE86F" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_31F185F0F700C0AE11C5A9B8D28DBF6E37538635" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_31F185F0F700C0AE11C5A9B8D28DBF6E37538635" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_46CDB369134F042EC021F7496DF721B49A9D43C0" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");
+CREATE INDEX IF NOT EXISTS "IDX_46CDB369134F042EC021F7496DF721B49A9D43C0" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");
-CREATE INDEX IF NOT EXISTS "IDX_4DD95BAED8503502101FEB9ECA25DDA8F371816C" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_4DD95BAED8503502101FEB9ECA25DDA8F371816C" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1EE98ACCAE5537752BD51A3D5F6429585CC543F6" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1EE98ACCAE5537752BD51A3D5F6429585CC543F6" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_39A292C3C42B34C2AD7C2A0FD087739C253B06FC" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");
+CREATE INDEX IF NOT EXISTS "IDX_39A292C3C42B34C2AD7C2A0FD087739C253B06FC" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");
-CREATE INDEX IF NOT EXISTS "IDX_1D7F9BD4B5BBF73CC3D06D949731DC169DDED26D" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1D7F9BD4B5BBF73CC3D06D949731DC169DDED26D" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_29702D5C8D0B9B20BFB534FA233B9D9FADC2E3A1" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_29702D5C8D0B9B20BFB534FA233B9D9FADC2E3A1" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_98A32BE3A8C1FF8CDEC95561DE4A74852FE70322" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_98A32BE3A8C1FF8CDEC95561DE4A74852FE70322" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_DC1829E4241BA7C9B3E5281AC0DF00A766F9452E" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DC1829E4241BA7C9B3E5281AC0DF00A766F9452E" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_CB29E8DDA990051B2A3DF193D8E4912F25D5FA0D" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_CB29E8DDA990051B2A3DF193D8E4912F25D5FA0D" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NodeCluster_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NodeCluster_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_1B8DF6B061E229E5B6AC796911E6C8C23ECAD585" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1B8DF6B061E229E5B6AC796911E6C8C23ECAD585" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_57EB74DEF745DE4BA9AAD8E735BACB71F2E8C417" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_57EB74DEF745DE4BA9AAD8E735BACB71F2E8C417" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudNamespace_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudNamespace_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_A7A50200F582AB86EF483F9BA74F999F17B7F653" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A7A50200F582AB86EF483F9BA74F999F17B7F653" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6EE081E80342904B676496DA42DFAEC3EDA2CE27" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6EE081E80342904B676496DA42DFAEC3EDA2CE27" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_9AB8994DE0826F790D70614D4C52DD270AEF946B" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");
+CREATE INDEX IF NOT EXISTS "IDX_9AB8994DE0826F790D70614D4C52DD270AEF946B" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");
-CREATE INDEX IF NOT EXISTS "IDX_30C83E5F8447D28D8E2A73048DF751C886AF318B" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_30C83E5F8447D28D8E2A73048DF751C886AF318B" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_281A2DE604D25D6CFECB9B26D1FF70429FDB0FD0" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_281A2DE604D25D6CFECB9B26D1FF70429FDB0FD0" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudSite_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudSite_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_F497DEC01DA066CB09DA2AA7EDE3F4410078491B" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F497DEC01DA066CB09DA2AA7EDE3F4410078491B" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_17E417F7EF56809674BE1D5F5154DCCE01E00A96" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_17E417F7EF56809674BE1D5F5154DCCE01E00A96" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2321BFA482AD2700F41E2BA359F6EB00F47601B9" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE");
+CREATE INDEX IF NOT EXISTS "IDX_2321BFA482AD2700F41E2BA359F6EB00F47601B9" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE");
-CREATE INDEX IF NOT EXISTS "IDX_5ABDB19E55A6BDEF33855F14CB1B3B8CF457912C" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5ABDB19E55A6BDEF33855F14CB1B3B8CF457912C" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_83B6347C0C0A005D5E3D856D973D3322DFEDEA35" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_83B6347C0C0A005D5E3D856D973D3322DFEDEA35" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6C6FBD69F47F41970595A8775DC99CA0F5E894A1" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE");
+CREATE INDEX IF NOT EXISTS "IDX_6C6FBD69F47F41970595A8775DC99CA0F5E894A1" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE");
-CREATE INDEX IF NOT EXISTS "IDX_102A50584376DE25B6BBD7157594C607A5C957F2" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_102A50584376DE25B6BBD7157594C607A5C957F2" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_EEBF1BC3344E97988232825777AB13FAB6C4F3F0" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_EEBF1BC3344E97988232825777AB13FAB6C4F3F0" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_Site_CD_decorators" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_Site_CD_decorators" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_DDD73D6F4004BF3A96AA118281EE3E565A922B47" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DDD73D6F4004BF3A96AA118281EE3E565A922B47" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_98AC4232BC02323E03416954215889CEE874A1E9" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_98AC4232BC02323E03416954215889CEE874A1E9" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-oam_ManagedElement_CD_decorators" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-oam_ManagedElement_CD_decorators" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_8065626F3F48D4E5A4285654739D3B26499E4C4E" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8065626F3F48D4E5A4285654739D3B26499E4C4E" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_634619CF7333EBC0AFDE990900B79220FC626EBA" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_634619CF7333EBC0AFDE990900B79220FC626EBA" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F15A070FC83B2E49223B4232E0BEB8931C2B7A4C" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");
+CREATE INDEX IF NOT EXISTS "IDX_F15A070FC83B2E49223B4232E0BEB8931C2B7A4C" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");
-CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_plmnId" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("plmnId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_plmnId" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("plmnId");
-CREATE INDEX IF NOT EXISTS "IDX_0C443A16285D233F16966C2F0314CDC9D0F6D0B8" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0C443A16285D233F16966C2F0314CDC9D0F6D0B8" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E5930226819982DC0CFC1FA64FB3600647222435" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E5930226819982DC0CFC1FA64FB3600647222435" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_6891C1BB8EE214340A362906C08955E8ACC1C597" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6891C1BB8EE214340A362906C08955E8ACC1C597" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D366F952FD4A52645C45A19CBFD02B8897FC1F18" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_D366F952FD4A52645C45A19CBFD02B8897FC1F18" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5D761303176D3B9338784DFBEE0CEC51046ADC30" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU");
+CREATE INDEX IF NOT EXISTS "IDX_5D761303176D3B9338784DFBEE0CEC51046ADC30" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU");
-CREATE INDEX IF NOT EXISTS "IDX_FFD60DD99D80C276F402E66546F5DACB2D81EE26" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FFD60DD99D80C276F402E66546F5DACB2D81EE26" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_C437D39632DC79BAB6AC4F0880826A05425F9C32" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_C437D39632DC79BAB6AC4F0880826A05425F9C32" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellDU_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellDU_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_B48D188E92ACBE9A2CAF8CD730A5DDFD7E086705" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B48D188E92ACBE9A2CAF8CD730A5DDFD7E086705" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A950BF337D5D820E5B39AC3F1B1AC09C062F30C9" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A950BF337D5D820E5B39AC3F1B1AC09C062F30C9" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F494CB3BA4C726D4C45D53B1EF62E1E26811CCEF" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU");
+CREATE INDEX IF NOT EXISTS "IDX_F494CB3BA4C726D4C45D53B1EF62E1E26811CCEF" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU");
-CREATE INDEX IF NOT EXISTS "IDX_6325926B4D2FDD1FBBB34250DABEA5E7229FF9F5" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6325926B4D2FDD1FBBB34250DABEA5E7229FF9F5" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7CB4A7724F68D1CB2D12E8DE779BA9103F7DBE0A" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_7CB4A7724F68D1CB2D12E8DE779BA9103F7DBE0A" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0A03C47C13AD3B5C84D3D8081493D670E9CBDCD1" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_NRCELLDU");
+CREATE INDEX IF NOT EXISTS "IDX_0A03C47C13AD3B5C84D3D8081493D670E9CBDCD1" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_NRCELLDU");
-CREATE INDEX IF NOT EXISTS "IDX_8E34EC0B1DE7DDCE3B32ADD85B11E15F95C5644E" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8E34EC0B1DE7DDCE3B32ADD85B11E15F95C5644E" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_050A80BEEF775E4D3CE216F282F23DB99DA2D798" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_050A80BEEF775E4D3CE216F282F23DB99DA2D798" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRSectorCarrier_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRSectorCarrier_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_7BFD17A71AB1B7765FE6431DA4E66C2EDE88AC3B" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_7BFD17A71AB1B7765FE6431DA4E66C2EDE88AC3B" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_ED50A5139F1449DBAD8DA10D45F5A5BF819EACBA" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_ED50A5139F1449DBAD8DA10D45F5A5BF819EACBA" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2ADB5C6DCAEE8811FB1CA8FD9EB53381F35FCB70" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER");
+CREATE INDEX IF NOT EXISTS "IDX_2ADB5C6DCAEE8811FB1CA8FD9EB53381F35FCB70" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER");
-CREATE INDEX IF NOT EXISTS "IDX_1F27C515A028616FAC422A02ABBEC402D5DBB2E5" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1F27C515A028616FAC422A02ABBEC402D5DBB2E5" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B975D24291849007D4AA6686C5D3983885D5C884" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B975D24291849007D4AA6686C5D3983885D5C884" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_902B73F741160B9D4FBF62406D3D9ABBECAD8BE7" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY");
+CREATE INDEX IF NOT EXISTS "IDX_902B73F741160B9D4FBF62406D3D9ABBECAD8BE7" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY");
-CREATE INDEX IF NOT EXISTS "IDX_986B2223E72FF79237337329F4C3BB9DA9025A34" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_986B2223E72FF79237337329F4C3BB9DA9025A34" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_FC70CCFDC1359B698BBBE5CA7AA158F0AF693461" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FC70CCFDC1359B698BBBE5CA7AA158F0AF693461" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5AB1D780E57D940C42BAD29772E9E2B6C63498A0" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");
+CREATE INDEX IF NOT EXISTS "IDX_5AB1D780E57D940C42BAD29772E9E2B6C63498A0" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_pLMNId" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("pLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_pLMNId" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("pLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_E4E40B26C322AF63A662706AF8B0B36E1043B793" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E4E40B26C322AF63A662706AF8B0B36E1043B793" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_8BCCF388DFC8652AD5CD0675C64F49D2D2EDC7A1" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8BCCF388DFC8652AD5CD0675C64F49D2D2EDC7A1" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_B608D8F6B8A79097EA61A1B4777A96CD3D2D1E98" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B608D8F6B8A79097EA61A1B4777A96CD3D2D1E98" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0ECC814A408874C9F8E73EEE3968984A6345A606" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0ECC814A408874C9F8E73EEE3968984A6345A606" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B10FD045A6C3E169953CCC38CC2D801FCE15A75F" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_B10FD045A6C3E169953CCC38CC2D801FCE15A75F" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_pLMNId" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("pLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_pLMNId" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("pLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_84A29F8571860AC5A7BD1A99923485ECB6A3939D" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_84A29F8571860AC5A7BD1A99923485ECB6A3939D" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_8D9862DBF6A721FABAEA4204E04B374692C1C5B8" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8D9862DBF6A721FABAEA4204E04B374692C1C5B8" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_4C6B5CB5CF018656DC8191CE6FE3B9DA2CD0C819" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_4C6B5CB5CF018656DC8191CE6FE3B9DA2CD0C819" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_21F2560C8330A795E8AFB54C6D31CDCF6CCD3070" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_21F2560C8330A795E8AFB54C6D31CDCF6CCD3070" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D856E84F300B6711E81931AE1CBC8AD905FA384F" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_D856E84F300B6711E81931AE1CBC8AD905FA384F" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_9122DAA7A60DB585BE5ECA68A2EDB9ABF1E7156A" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("pLMNIdList"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_9122DAA7A60DB585BE5ECA68A2EDB9ABF1E7156A" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("pLMNIdList"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6C81B2BBFCFE94C87598869A2099E04571202BA7" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6C81B2BBFCFE94C87598869A2099E04571202BA7" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_25E4BCFBF8F5344DFC60BCB159FA873FFC8109E9" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_25E4BCFBF8F5344DFC60BCB159FA873FFC8109E9" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUUPFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUUPFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_50209F1FF59B49F79FF194887B631994F2B5148A" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_50209F1FF59B49F79FF194887B631994F2B5148A" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_3346DFB8C2B7D6EEA12B7C1DE4A84B058C24A657" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_3346DFB8C2B7D6EEA12B7C1DE4A84B058C24A657" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_ADD3393C27589066C4993A3491436C6FB57A539F" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_ADD3393C27589066C4993A3491436C6FB57A539F" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_dUpLMNId" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("dUpLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_dUpLMNId" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("dUpLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_73790DA8FF6365B752DC8B399893AC6DE8CF26C4" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_73790DA8FF6365B752DC8B399893AC6DE8CF26C4" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5CE9EDE1F25AB2D880A41BC5D297FDBE668182E8" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5CE9EDE1F25AB2D880A41BC5D297FDBE668182E8" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_0E5C91A3252FBAFA72DB644D4E949A379F0CB910" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0E5C91A3252FBAFA72DB644D4E949A379F0CB910" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5DD192861541E0EB2776C6BFE34B327FF27F93C3" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5DD192861541E0EB2776C6BFE34B327FF27F93C3" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0B9AC962B1E07740CE43D912B5FBC54E0B39DD24" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_0B9AC962B1E07740CE43D912B5FBC54E0B39DD24" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_D0D11CFAA917F4FA12748A041A34D2B39A3AD707" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_D0D11CFAA917F4FA12748A041A34D2B39A3AD707" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2A5AAAD13FDCFF7F2958005C22937366F6604A0D" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_2A5AAAD13FDCFF7F2958005C22937366F6604A0D" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ORUFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ORUFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_AF235FB2C9CCA99D94CC4038669EDD1BB6C7B2DF" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_AF235FB2C9CCA99D94CC4038669EDD1BB6C7B2DF" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DA79A3F946C1F4E8D05B4D6ADEF5E4C65E47635E" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DA79A3F946C1F4E8D05B4D6ADEF5E4C65E47635E" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7B916E1753D2860DF434831CF1E9697ED9973C8F" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_7B916E1753D2860DF434831CF1E9697ED9973C8F" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_E234B43A7CD7843672F08F2197AB46A2A50BECB0" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E234B43A7CD7843672F08F2197AB46A2A50BECB0" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_19C19556F9714850389595E0A16218FA229205FE" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_19C19556F9714850389595E0A16218FA229205FE" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_Sector_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_Sector_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_10BCC6B44663A8D5431668BEE5DF80423420C616" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_10BCC6B44663A8D5431668BEE5DF80423420C616" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_03F9C6A2FA82614A788443AC6044BCED2401C465" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_03F9C6A2FA82614A788443AC6044BCED2401C465" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0867A1E865A904F4BB513948DAEB60412BE67DF3" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_0867A1E865A904F4BB513948DAEB60412BE67DF3" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_64B7C127C01069009A3FB13592DAE249B0029283" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_64B7C127C01069009A3FB13592DAE249B0029283" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_69152691D777DDB084C053915D4A4B15F7F8B3EB" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_69152691D777DDB084C053915D4A4B15F7F8B3EB" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_3AB53A0DB6DC4B4C8BB6194D6D487EBDC3D0E88F" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_3AB53A0DB6DC4B4C8BB6194D6D487EBDC3D0E88F" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_5996D077978D38D0C1A951A262F1F7E1E339F052" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5996D077978D38D0C1A951A262F1F7E1E339F052" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F4A1999634924C7E4D1CBD05E83996A5B1262A8A" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F4A1999634924C7E4D1CBD05E83996A5B1262A8A" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5BAC6D2F05A63FDE27F082E8C8F4D766C145E835" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_5BAC6D2F05A63FDE27F082E8C8F4D766C145E835" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_0E1BE8724BEBB21C5AE3986BE150BEC8F8CD903E" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0E1BE8724BEBB21C5AE3986BE150BEC8F8CD903E" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F93AD0AE5C6940EE73D0B661A2E2E5BB10B3772C" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F93AD0AE5C6940EE73D0B661A2E2E5BB10B3772C" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_319FDFF6C9E6BC1D922F0A2AFEAAC294E520F753" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_319FDFF6C9E6BC1D922F0A2AFEAAC294E520F753" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN ("CD_decorators");
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-ran_ODUFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_ODUFunction";
-ANALYZE ties_data."o-ran-smo-teiv-equipment_Site";
+ANALYZE teiv_data."o-ran-smo-teiv-equipment_Site";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE";
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NodeCluster";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NodeCluster";
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-ran_OCUCPFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction";
-ANALYZE ties_data."o-ran-smo-teiv-oam_ManagedElement";
+ANALYZE teiv_data."o-ran-smo-teiv-oam_ManagedElement";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRCellDU";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRCellDU";
-ANALYZE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_CloudifiedNF";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NFDeployment";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NFDeployment";
-ANALYZE ties_data."o-ran-smo-teiv-ran_AntennaCapability";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_AntennaCapability";
-ANALYZE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82";
+ANALYZE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE";
-ANALYZE ties_data."o-ran-smo-teiv-equipment_AntennaModule";
+ANALYZE teiv_data."o-ran-smo-teiv-equipment_AntennaModule";
-ANALYZE ties_data."o-ran-smo-teiv-ran_ORUFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_ORUFunction";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRCellCU";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRCellCU";
-ANALYZE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
+ANALYZE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
-ANALYZE ties_data."o-ran-smo-teiv-ran_OCUUPFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier";
-ANALYZE ties_data."o-ran-smo-teiv-ran_Sector";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_Sector";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_OCloudSite";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_OCloudSite";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace";
COMMIT;
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
-ALTER SCHEMA ties_consumer_data OWNER TO topology_exposure_user;
+CREATE SCHEMA IF NOT EXISTS teiv_consumer_data;
+ALTER SCHEMA teiv_consumer_data OWNER TO topology_exposure_user;
SET default_tablespace = '';
SET default_table_access_method = heap;
-SET ROLE 'topology_exposure_user';
+SET ROLE topology_exposure_user;
-CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."module_reference" (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"revision" TEXT NOT NULL,
"status" VARCHAR(127) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."decorators" (
"name" TEXT PRIMARY KEY,
"dataType" VARCHAR(511) NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."classifiers" (
"name" TEXT PRIMARY KEY,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
COMMIT;
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_groups;
-ALTER SCHEMA ties_groups OWNER TO topology_exposure_user;
+CREATE SCHEMA IF NOT EXISTS teiv_groups;
+ALTER SCHEMA teiv_groups OWNER TO topology_exposure_user;
SET default_tablespace = '';
SET default_table_access_method = heap;
-SET ROLE 'topology_exposure_user';
+SET ROLE topology_exposure_user;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_groups.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_groups.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_groups' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_groups' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE TABLE IF NOT EXISTS ties_groups."groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."groups" (
"id" VARCHAR(150) PRIMARY KEY,
"name" VARCHAR(150) NOT NULL,
"type" VARCHAR(50) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_groups."static_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."static_groups" (
"id" VARCHAR(150),
"topology_type" TEXT NOT NULL,
"provided_members_ids" TEXT[] NOT NULL,
PRIMARY KEY ("id", "topology_type"),
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_groups."dynamic_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."dynamic_groups" (
"id" VARCHAR(150) PRIMARY KEY,
"criteria" JSONB NOT NULL,
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-SELECT ties_groups.create_constraint_if_not_exists(
+SELECT teiv_groups.create_constraint_if_not_exists(
'groups',
'CHECK_groups_type',
- 'ALTER TABLE ties_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
+ 'ALTER TABLE teiv_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
);
COMMIT;
validate-group-membership: "false"
group:
readiness:
- include: "readinessState,${HEALTH_CHECK_INDICATOR:tiesExposure}"
+ include: "readinessState,${HEALTH_CHECK_INDICATOR:teivExposure}"
endpoints:
web:
exposure:
<!--
============LICENSE_START=======================================================
Copyright (C) 2024 Ericsson
- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false" />
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false" />
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false" />
- <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true" />
+<!-- <setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="true" />-->
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments"
value="true" />
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false" />
-ce_specversion:::1.0,ce_id:::a30e63c9-d29e-46ff-b99a-b63ed83fd237,ce_source:::dmi-plugin:nm-1,ce_type:::ran-logical-topology.merge,content-type:::application/yang-data+json,ce_time:::2023-11-30T09:05:00Z,ce_dataschema:::https://ties:8080/schemas/v1/r1-topology,,,{
+ce_specversion:::1.0,ce_id:::a30e63c9-d29e-46ff-b99a-b63ed83fd237,ce_source:::dmi-plugin:nm-1,ce_type:::ran-logical-topology.merge,content-type:::application/yang-data+json,ce_time:::2023-11-30T09:05:00Z,ce_dataschema:::https://teiv:8080/schemas/v1/r1-topology,,,{
"entities": [
{
"o-ran-smo-teiv-oam:ManagedElement": [
BEGIN;
-DROP SCHEMA IF EXISTS ties_model cascade;
-CREATE SCHEMA IF NOT EXISTS ties_model;
-ALTER SCHEMA ties_model OWNER TO topology_exposure_user;
+DROP SCHEMA IF EXISTS teiv_model cascade;
+CREATE SCHEMA IF NOT EXISTS teiv_model;
+ALTER SCHEMA teiv_model OWNER TO topology_exposure_user;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE topology_exposure_user;
-CREATE TABLE IF NOT EXISTS ties_model.hash_info (
+CREATE TABLE IF NOT EXISTS teiv_model.hash_info (
"name" TEXT PRIMARY KEY,
"hashedValue" VARCHAR(63) NOT NULL,
"type" VARCHAR(511)
);
-CREATE TABLE IF NOT EXISTS ties_model.module_reference (
+CREATE TABLE IF NOT EXISTS teiv_model.module_reference (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"domain" TEXT,
"content" TEXT NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_model.entity_info (
+CREATE TABLE IF NOT EXISTS teiv_model.entity_info (
"storedAt" TEXT PRIMARY KEY,
"name" TEXT NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
"attributeNames" jsonb DEFAULT '[]'::jsonb,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
+CREATE TABLE IF NOT EXISTS teiv_model.relationship_info (
"name" TEXT NOT NULL,
"aSideAssociationName" TEXT NOT NULL,
"aSideMOType" TEXT NOT NULL,
"connectSameEntity" BOOLEAN NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
PRIMARY KEY ("name", "moduleReferenceName"),
- FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("bSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("aSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("bSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
CD_classifiers CD_classifiers COLUMN
CD_decorators CD_decorators COLUMN
CD_sourceIds CD_sourceIds COLUMN
verticalBeamWidth verticalBeamWidth COLUMN
\.
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+COPY teiv_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
_3gpp-common-yang-extensions urn:3gpp:sa5:_3gpp-common-yang-extensions \N [] 2019-06-23 bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewogIHlhbmctdmVyc2lvbiAxLjE7CiAgbmFtZXNwYWNlIHVybjozZ3BwOnNhNTpfM2dwcC1jb21tb24teWFuZy1leHRlbnNpb25zIDsKICBwcmVmaXggeWV4dDNncHAgOwoKICBvcmdhbml6YXRpb24gIjNHUFAgU0E1IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZHVsZSBkZWZpbmVzIFlBTkcgZXh0ZW5zaW9ucyBuZWVkZWQgCiAgICAzR1BQIFlBTkcgbW9kZWxpbmcuCgogICAgQ29weXJpZ2h0IChjKSAyMDE5IDNHUFAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgRXh0ZW5zaW9ucyBNVVNUIGJlIGRlZmluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUKICAgIGRlc2NyaXB0aW9uIHN0YXRlbWVudDoKICAgICAgICAtIFdoYXQgaXMgdGhpcyBzdGF0ZW1lbnQuCiAgICAgICAgLSBOZXdsaW5lLAogICAgICAgIC0gVGhpcyBzdGF0ZW1lbnQgY2FuIGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSB4eHggc3RhdGVtZW50cyB3aXRoCiAgICAgICAgY2FyZGluYWxpdHkgeC4ueS4KICAgICAgICAtIFRoaXMgc3RhdGVtZW50IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgc3Vic3RhdGVtZW50cyB3aXRoCiAgICAgICAgY2FyZGluYWxpdHkgeC4ueS4KICAgICAgICAtIE5ld2xpbmUKICAgICAgICAtIElzIGNoYW5naW5nIHRoaXMgc3RhdGVtZW50IGFuIGVkaXRvcmlhbCwgQkMoYmFja3dhcmRzIGNvbXBhdGlibGUpIAogICAgICAgIG9yIE5CQyhub24tQkMpIGNoYW5nZT8KICAgICAgICAtIE5ld2xpbmUuCiAgICAgICAgLSBUaGUgYXJndW1lbnQgaXRzIG1lYW5pbmcgYW5kIHR5cGUuIFByZWZlcmFibHkgdXNlIFlBTkcgdHlwZXMgYW5kCiAgICAgICAgICBjb25zdHJhaW50cyB0byBkZWZpbmUgdGhlIGFyZ3VtZW50J3MgdHlwZS4KCiAgICBBbnkgZXh0ZW5zaW9uIHN0YXRlbWVudCBjYW4gYmUgYWRkZWQgd2l0aCBhCiAgICBkZXZpYXRpb24vZGV2aWF0ZSBhZGQgc3RhdGVtZW50LiBJbiB0aGlzIGNhc2UgdGhlIHJlc3RyaWN0aW9uIGFib3V0CiAgICB0aGUgcGFyZW50IHN0YXRlbWVudCBvZiB0aGUgZXh0ZW5zaW9uIFNIQUxMIGJlIGV2YWx1YXRlZCBiYXNlZCBvbiB0aGUKICAgIHRhcmdldCBvZiB0aGUgZGV2aWF0aW9uIHN0YXRlbWVudC4KCiAgICBTdXBwb3J0IGZvciB0aGlzIG1vZHVsZSBkb2VzIG5vdCBtZWFuIHRoYXQgYSBZQU5HIHNlcnZlciBpbXBsZW1lbnRzCiAgICBzdXBwb3J0IGZvciBlYWNoIG9mIHRoZXNlIGV4dGVuc2lvbnMuCiAgICBJbXBsZW1lbnRlcnMgb2YgZWFjaCBzcGVjaWZpYyBtb2R1bGUgdXNpbmcgYW4gZXh0ZW5zaW9ucyBNVVNUIGNoZWNrCiAgICBpZiB0aGUgc2VydmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIHVzZWQgZXh0ZW5zaW9uLgogICAgTm90ZTogbW9kdWxlcyB1c2UgbWFueSBleHRlbnNpb25zIHdoaWNoIGluZGl2aWR1YWwKICAgIGltcGxlbWVudGF0aW9ucyBNQVkgb3IgTUFZIE5PVCBzdXBwb3J0LgogICAgSWYgc3VwcG9ydCBmb3IgYW4gZXh0ZW5zaW9uIGlzIG1pc3NpbmcgdGhlIGV4dGVuc2lvbiBzdGF0ZW1lbnQgbmVlZHMKICAgIGluZGl2aWR1YWwgaGFuZGxpbmcgb3IgaXQgU0hPVUxEIGJlIHJlbW92ZWQgZnJvbSB0aGUgbW9kdWxlIHVzaW5nCiAgICB0aGUgZXh0ZW5zaW9uIGUuZy4gd2l0aCBhIGRldmlhdGlvbi4KICAgICAgICAgICI7CgogIHJldmlzaW9uICIyMDE5LTA2LTIzIiB7CiAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCB2ZXJzaW9uIjsKICB9CgogIGV4dGVuc2lvbiBpblZhcmlhbnQgewogICAgZGVzY3JpcHRpb24KICAgICAgIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlIGRhdGEgbm9kZSBjYW4gb25seSBiZSBzZXQgd2hlbiBpdHMKICAgICAgcGFyZW50IGRhdGEgbm9kZSBpcyBiZWluZyBjcmVhdGVkLiBUbyBjaGFuZ2UgdGhlIHZhbHVlIGFmdGVyIHRoYXQsIHRoZQogICAgICBwYXJlbnQgZGF0YSBub2RlIG11c3QgYmUgZGVsZXRlZCBhbmQgcmVjcmVhdGVkIHdpdGggdGhlIGRhdGEgbm9kZQogICAgICBoYXZpbmcgdGhlIG5ldyB2YWx1ZS4KCiAgICAgIEl0IGlzIHVubmVjZXNzYXJ5IHRvIHVzZSBhbmQgTVVTVCBOT1QgYmUgdXNlZCBmb3Iga2V5IGxlYWZzLgoKICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgYSBsZWFmLCBsZWFmLWxpc3QsIGxpc3QgCiAgICAgIHN0YXRlbWVudHMgdGhhdCBpcyBjb25maWc9dHJ1ZS4KICAgICAgWmVybyBvciBvbmUgaW5WYXJpYW50IHN0YXRlbWVudCBpcyBhbGxvd2VkIHBlciBwYXJlbnQgc3RhdGVtZW50LgogICAgICBOTyBzdWJzdGF0ZW1lbnRzIGFyZSBhbGxvd2VkLgogICAgICAgICAgICAKICAgICAgQWRkaW5nIHRoaXMgc3RhdGVtZW50IGlzIGFuIE5CQyBjaGFuZ2UsIHJlbW92aW5nIGl0IGlzIEJDLiI7CiAgfQoKICBleHRlbnNpb24gaW5pdGlhbC12YWx1ZSB7CiAgICBkZXNjcmlwdGlvbiAiU3BlY2lmaWVzIGEgdmFsdWUgdGhhdCB0aGUgc3lzdGVtIHdpbGwgc2V0IGZvciBhIGxlYWYKICAgICAgbGVhZi1saXN0IGlmIGEgdmFsdWUgaXMgbm90IHNwZWNpZmllZCBmb3IgaXQgd2hlbiBpdHMgcGFyZW50IGxpc3QKICAgICAgb3IgY29udGFpbmVyIGlzIGNyZWF0ZWQuIFRoZSB2YWx1ZSBoYXMgbm8gZWZmZWN0IGluIGFueSBvdGhlcgogICAgICBtb2RpZmljYXRpb24gZS5nLiBjaGFuZ2luZyBvciByZW1vdmluZyB0aGUgdmFsdWUuCgogICAgICBUaGUgZGVzY3JpcHRpb24gc3RhdGVtZW50IG9mIHRoZSBwYXJlbnQgc3RhdGVtZW50IFNIT1VMRCBjb250YWluCiAgICAgIHRoZSBsYWJlbCAnSW5pdGlhbC12YWx1ZTogJyBmb2xsb3dlZCBieSB0aGUgdGV4dCBmcm9tIHRoZSBhcmd1bWVudC4KCiAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgbGVhZiBvciBsZWFmLWxpc3QuCiAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBOT1QgYmUgcHJlc2VudCBpZiB0aGUgbGVhZiBvciB0aGUgbGVhZi1saXN0IAogICAgICBoYXMgYSBkZWZhdWx0IHN0YXRlbWVudCBvciB0aGUgdHlwZSB1c2VkIGZvciB0aGUgZGF0YSBub2RlIAogICAgICBoYXMgYSBkZWZhdWx0IHZhbHVlLgogICAgICBUaGUgc3RhdGVtZW50IE1VU1QgTk9UIGJlIHVzZWQgZm9yIGNvbmZpZz1mYWxzZSBkYXRhIG9yIGluIGFuIAogICAgICBhY3Rpb24sIHJwYyBvciBub3RpZmljYXRpb24uCiAgICAgIFplcm8gb3Igb25lIGluaXRpYWwtdmFsdWUgc3RhdGVtZW50cyBhcmUgYWxsb3dlZCBmb3IgYSBsZWFmIHBhcmVudAogICAgICBzdGF0ZW1lbnQuIFplcm8gb3IgbW9yZSBpbml0aWFsLXZhbHVlIHN0YXRlbWVudHMgYXJlIGFsbG93ZWQgZm9yIGEKICAgICAgbGVhZi1saXN0IHBhcmVudCBzdGF0ZW1lbnQuIElmIHRoZSBsZWFmLWxpc3QgaXMgb3JkZXJlZC1ieSB1c2VyLCB0aGUKICAgICAgaW5pdGlhbCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIFlBTkcgZGVmaW5pdGlvbi4KICAgICAgTk8gc3Vic3RhdGVtZW50cyBhcmUgYWxsb3dlZC4KCiAgICAgIEFsd2F5cyBjb25zaWRlciB1c2luZyBhIFlBTkctZGVmYXVsdCBzdGF0ZW1lbnQgaW5zdGVhZC4KCiAgICAgIE1vZGlmaWNhdGlvbiBvZiB0aGUgaW5pdGlhbC12YWx1ZSBpcyBhIG5vbi1iYWNrd2FyZHMtY29tcGF0aWJsZSBjaGFuZ2UuCgogICAgICBUaGUgYXJndW1lbnQgc3BlY2lmaWVzIGEgc2luZ2xlIGluaXRpYWwgdmFsdWUgZm9yIGEgbGVhZiBvciBsZWFmLWxpc3QuCiAgICAgIFRoZSB2YWx1ZSBNVVNUIGJlIHBhcnQgb2YgdGhlIHZhbHVlc3BhY2Ugb2YgdGhlIGxlYWYvbGVhZi1saXN0LgogICAgICBJdCBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIHRoZSBhcmd1bWVudCBvZiB0aGUgZGVmYXVsdCBzdGF0ZW1lbnQuIjsKCiAgICBhcmd1bWVudCAiaW5pdGlhbC12YWx1ZSI7CiAgfQp9
_3gpp-common-yang-types urn:3gpp:sa5:_3gpp-common-yang-types \N [] 2022-07-26 bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOjNncHA6c2E1Ol8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIjsKICBwcmVmaXggInR5cGVzM2dwcCI7CiAgCiAgaW1wb3J0IGlldGYtaW5ldC10eXBlcyB7IHByZWZpeCBpbmV0OyB9CiAgaW1wb3J0IGlldGYteWFuZy10eXBlcyB7IHByZWZpeCB5YW5nOyB9CgogIG9yZ2FuaXphdGlvbiAiM0dQUCBTQTUiOwogIGNvbnRhY3QgImh0dHBzOi8vd3d3LjNncHAub3JnL0R5bmFSZXBvcnQvVFNHLVdHLS1TNS0tb2ZmaWNpYWxzLmh0bT9JdGVtaWQ9NDY0IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZGVsIGRlZmluZXMgYSBZQU5HIG1hcHBpbmcgb2YgdGhlIHRvcCBsZXZlbCAKICAgIGluZm9ybWF0aW9uIGNsYXNzZXMgdXNlZCBmb3IgbWFuYWdlbWVudCBvZiA1RyBuZXR3b3JrcyBhbmQgCiAgICBuZXR3b3JrIHNsaWNpbmcuIjsKICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjIzIjsKCiAgcmV2aXNpb24gMjAyMi0wNy0yNiB7IHJlZmVyZW5jZSBDUi0wMTgwIDsgfQogIHJldmlzaW9uIDIwMjItMDItMDkgeyByZWZlcmVuY2UgIkNSLTAxNDQiOyB9CiAgcmV2aXNpb24gMjAyMS0xMS0wMSB7IHJlZmVyZW5jZSAiQ1ItMDE0MSI7IH0KICAKICByZXZpc2lvbiAyMDIxLTA5LTMwIHsKICAgIGRlc2NyaXB0aW9uICJBZGRlZCBMb25naXR1ZGUsIExhdGl0dWRlLCBUZW50aE9mRGVncmVlcywgT25PZmYuIjsKICAgIHJlZmVyZW5jZSAiQ1ItMDEzOCI7CiAgfQoKICByZXZpc2lvbiAyMDIwLTExLTA2IHsKICAgIGRlc2NyaXB0aW9uICJSZW1vdmVkIGluY29ycmVjdCBTLU5TU0FJIGRlZmluaXRpb25zLiI7CiAgICByZWZlcmVuY2UgIkNSLTAxMTgiOwogIH0KCiAgcmV2aXNpb24gMjAyMC0wMy0xMCB7CiAgICBkZXNjcmlwdGlvbiAiUmVtb3ZlZCBmYXVsdHkgd2hlbiBzdGF0ZW1lbnRzLiI7CiAgICByZWZlcmVuY2UgIlNQLTIwMDIyOSI7CiAgfQogCiAgcmV2aXNpb24gMjAxOS0xMC0yNSB7CiAgICBkZXNjcmlwdGlvbiAiQWRkZWQgTWFuYWdlZE5GUHJvZmlsZS4iOwogICAgcmVmZXJlbmNlICJTNS0xOTQ0NTciOwogIH0KCiAgcmV2aXNpb24gMjAxOS0xMC0xNiB7CiAgICBkZXNjcmlwdGlvbiAiQWRkZWQgU0FQIGFuZCB1c2FnZVN0YXRlLiI7CiAgICByZWZlcmVuY2UgIlM1LTE5MzUxOCI7CiAgfQoKICByZXZpc2lvbiAyMDE5LTA2LTIzIHsKICAgIHJlZmVyZW5jZSAgIkluaXRpYWwgdmVyc2lvbi4iOwogIH0KCiAgdHlwZWRlZiBFbmFibGVkRGlzYWJsZWQgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gRElTQUJMRUQgOwogICAgICBlbnVtIEVOQUJMRUQgOwogICAgfQogIH0KICAKICBncm91cGluZyBQcm9jZXNzTW9uaXRvciB7CiAgICBkZXNjcmlwdGlvbiAiUHJvdmlkZXMgYXR0cmlidXRlcyB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiBwcm9jZXNzZXMgCiAgICAgIHdpdGggc3BlY2lmaWMgcHVycG9zZSBhbmQgbGltaXRlZCBsaWZldGltZSBydW5uaW5nIG9uIE1uUyBwcm9kdWNlcnMuIAogICAgICBJdCBtYXkgYmUgdXNlZCBhcyBkYXRhIHR5cGUgZm9yIGRlZGljYXRlZCBwcm9ncmVzcyBtb25pdG9yIGF0dHJpYnV0ZXMgCiAgICAgIHdoZW4gc3BlY2lmeWluZyB0aGUgbWFuYWdlbWVudCByZXByZXNlbnRhdGlvbiBvZiB0aGVzZSBwcm9jZXNzZXMuIAogICAgICBUaGUgYXR0cmlidXRlcyBpbiB0aGlzIGNsYXVzZSBhcmUgZGVmaW5lZCBpbiBhIGdlbmVyaWMgd2F5LiAKICAgICAgRm9yIHNvbWUgYXR0cmlidXRlcyBzcGVjaWFsaXNhdGlvbnMgbWF5IGJlIHByb3ZpZGVkIHdoZW4gc3BlY2lmeWluZyBhIAogICAgICBjb25jcmV0ZSBwcm9jZXNzIHJlcHJlc2VudGF0aW9uLgoKICAgICAgSWYgYSBtYW5hZ2VtZW50IG9wZXJhdGlvbiBvbiBzb21lIElPQ3MgdHJpZ2dlcnMgYW4gYXNzb2NpYXRlZCAKICAgICAgYXN5bmNocm9ub3VzIHByb2Nlc3MgKHdob3NlIHByb2dyZXNzIHNoYWxsIGJlIG1vbml0b3JlZCksIHRoaXMgc2hvdWxkIAogICAgICBhbHNvIHJlc3VsdCBpbiBjcmVhdGluZyBhbiBhdHRyaWJ1dGUgbmFtZWQgJ3Byb2Nlc3NNb25pdG9yJyAob2YgdHlwZSAKICAgICAgJ1Byb2Nlc3NNb25pdG9yJykgaW4gdGhlc2UgSU9DKHMpLiBUaGUgcHJvY2Vzc01vbml0b3IgYXR0cmlidXRlIG1heSBiZSAKICAgICAgYWNjb21wYW5pZWQgYnkgdXNlLWNhc2Ugc3BlY2lmaWMgYWRkaXRpb25hbCBkYXRhIGl0ZW1zLgoKICAgICAgVGhlIHByb2dyZXNzIG9mIHRoZSBwcm9jZXNzIGlzIGRlc2NyaWJlZCBieSB0aGUgJ3N0YXR1cycgYW5kIAogICAgICAncHJvZ3Jlc3NQZXJjZW50YWdlJyBhdHRyaWJ1dGVzLiBBZGRpdGlvbmFsIHRleHR1YWwgcXVhbGlmaWNhdGlvbnMgZm9yIAogICAgICB0aGUgJ3N0YXR1cycgYXR0cmlidXRlIG1heSBiZSBwcm92aWRlZCBieSB0aGUgJ3Byb2dyZXNzU3RhdGVJbmZvJyBhbmQgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZXMuCgogICAgICBXaGVuIHRoZSBwcm9jZXNzIGlzIGluc3RhbnRpYXRlZCwgdGhlICdzdGF0dXMnIGlzIHNldCB0byAnTk9UX1JVTk5JTkcnIAogICAgICBhbmQgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvICcwJy4gVGhlIE1uUyBwcm9kdWNlciBkZWNpZGVzIHdoZW4gdG8gCiAgICAgIHN0YXJ0IGV4ZWN1dGluZyB0aGUgcHJvY2VzcyBhbmQgdG8gdHJhbnNpdGlvbiBpbnRvIHRoZSAnUlVOTklORycgc3RhdGUuIAogICAgICBUaGlzIHRpbWUgaXMgY2FwdHVyZWQgaW4gdGhlICdzdGFydFRpbWUnIGF0dHJpYnV0ZS4gQWx0ZXJuYXRpdmVseSwgdGhlIAogICAgICBwcm9jZXNzIG1heSBzdGFydCB0byBleGVjdXRlIGRpcmVjdGx5IHVwb24gaXRzIGluc3RhbnRpYXRpb24uIE9uZSAKICAgICAgYWx0ZXJuYXRpdmUgbXVzdCBiZSBzZWxlY3RlZCB3aGVuIHVzaW5nIHRoaXMgZGF0YSB0eXBlLgoKICAgICAgRHVyaW5nIHRoZSAnUlVOTklORycgc3RhdGUgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIGF0dHJpYnV0ZSBtYXkgYmUgCiAgICAgIHJlcGVhdGVkbHkgdXBkYXRlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlIGlzIHN1YmplY3QgdG8gCiAgICAgIGZ1cnRoZXIgc3BlY2lhbGlzYXRpb24uIFRoZSAncHJvZ3Jlc3NJbmZvJyBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gCiAgICAgIHByb3ZpZGUgYWRkaXRpb25hbCB0ZXh0dWFsIGluZm9ybWF0aW9uIGluIHRoZSAnTk9UX1JVTk5JTkcnLCAnQ0FOQ0VMTElORycgCiAgICAgIGFuZCAnUlVOTklORycgc3RhdGVzLiBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mIAogICAgICAncHJvZ3Jlc3NTdGF0ZUluZm8nIG1heSBiZSBwcm92aWRlZCB3aGVyZSB0aGlzIGRhdGEgdHlwZSBpcyAKICAgICAgdXNlZC4KCiAgICAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBwcm9jZXNzLCB0aGUgJ3N0YXR1cycgYXR0cmlidXRlIGlzIHNldCAKICAgICAgdG8gJ0ZJTklTSEVEJywgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvIDEwMCUuIFRoZSB0aW1lIGlzIGNhcHR1cmVkIGluIAogICAgICB0aGUgJ2VuZFRpbWUnIGF0dHJpYnV0ZS4gQWRkaXRpb25hbCB0ZXh0dWFsIGluZm9ybWF0aW9uIG1heSBiZSBwcm92aWRlZCAKICAgICAgaW4gdGhlICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZS4gVGhlIHR5cGUgb2YgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGluIHRoaXMgZGF0YSB0eXBlIGRlZmluaXRpb24gaXMgJ1N0cmluZycuIAogICAgICBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mICdyZXN1bHRTdGF0ZUluZm8nIG1heSBiZSBwcm92aWRlZCAKICAgICAgd2hlcmUgdGhpcyBkYXRhIHR5cGUgaXMgdXNlZC4KCiAgICAgIEluIGNhc2UgdGhlIHByb2Nlc3MgZmFpbHMgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LCB0aGUgJ3N0YXR1cycgCiAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLCB0aGUgY3VycmVudCB2YWx1ZSBvZiAKICAgICAgJ3Byb2dyZXNzUGVyY2VudGFnZScgaXMgZnJvemVuLCBhbmQgdGhlIHRpbWUgY2FwdHVyZWQgaW4gJ2VuZFRpbWUnLiBUaGUgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIHNwZWNpZmllcyB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4gCiAgICAgIFNwZWNpZmljIGZhaWx1cmUgcmVhc29ucyBtYXkgYmUgc3BlY2lmaWVkIHdoZXJlIHRoZSBkYXRhIHR5cGUgZGVmaW5lZCBpbiAKICAgICAgdGhpcyBjbGF1c2UgaXMgdXNlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIGZhaWx1cmUgbWF5IGJlIHN1YmplY3QgZm9yIAogICAgICBmdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIGFzIHdlbGwuCgogICAgICBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIGNhbmNlbGxlZCwgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBpcyBmaXJzdCBzZXQgdG8gCiAgICAgICdDQU5DRUxMSU5HJyBhbmQgd2hlbiB0aGUgcHJvY2VzcyBpcyByZWFsbHkgY2FuY2VsbGVkIHRoZW4gdG8gJ0NBTkNFTExFRCcuIAogICAgICBUaGUgdHJhbnNpdGlvbiB0byAnQ0FOQ0VMTEVEJyBpcyBjYXB0dXJlZCBpbiB0aGUgJ2VuZFRpbWUnIGF0dHJpYnV0ZS4gCiAgICAgIFRoZSB2YWx1ZSBvZiAncHJvZ3Jlc3NQZXJjZW50YWdlJyBpcyBmcm96ZW4uIEFkZGl0aW9uYWwgdGV4dHVhbCAKICAgICAgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuCgogICAgICBUaGUgJ3Jlc3VsdFN0YXRlSW5mbycgYXR0cmlidXRlIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGFkZGl0aW9uYWwgdGV4dHVhbCAKICAgICAgcXVhbGlmaWNhdGlvbiBvZiB0aGUgc3RhdGVzICdGSU5JU0hFRCcsICdGQUlMRUQnLCAnUEFSVElBTExZX0ZBSUxFRCcgb3IgCiAgICAgICdDQU5DRUxMRUQnLiBJdCBzaGFsbCBub3QgYmUgdXNlZCBmb3IgbWFraW5nIHRoZSBvdXRjb21lLCB0aGF0IHRoZSAKICAgICAgcHJvY2VzcyBtYXkgcHJvZHVjZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGF2YWlsYWJsZS4KCiAgICAgIFRoZSBwcm9jZXNzIG1heSBoYXZlIHRvIGJlIGNvbXBsZXRlZCB3aXRoaW4gYSBjZXJ0YWluIHRpbWUgYWZ0ZXIgaXRzIAogICAgICBjcmVhdGlvbiwgZm9yIGV4YW1wbGUgYmVjYXVzZSByZXF1aXJlZCBkYXRhIG1heSBub3QgYmUgYXZhaWxhYmxlIGFueSAKICAgICAgbW9yZSBhZnRlciBhIGNlcnRhaW4gdGltZSwgb3IgdGhlIHByb2Nlc3Mgb3V0Y29tZSBpcyBuZWVkZWQgdW50aWwgYSAKICAgICAgY2VydGFpbiB0aW1lIGFuZCB3aGVuIG5vdCBwcm92aWRlZCBieSB0aGlzIHRpbWUgaXMgbm90IG5lZWRlZCBhbnkgbW9yZS4gCiAgICAgIFRoZSB0aW1lIHVudGlsIHRoZSBNblMgcHJvZHVjZXIgYXV0b21hdGljYWxseSBjYW5jZWxzIHRoZSBwcm9jZXNzIGlzIAogICAgICBpbmRpY2F0ZWQgYnkgdGhlICd0aW1lcicgYXR0cmlidXRlLiI7CiAgICAgIAogICAgbGVhZiBpZCB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgZGVzY3JpcHRpb24gIklkIG9mIHRoZSBwcm9jZXNzLiBJdCBpcyB1bmlxdWUgd2l0aGluIGEgc2luZ2xlIAogICAgICAgIG11bHRpdmFsdWUgYXR0cmlidXRlIG9mIHR5cGUgUHJvY2Vzc01vbml0b3IuIjsKICAgIH0KICAgIAogICAgbGVhZiBzdGF0dXMgeyAKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgZW51bSBOT1RfU1RBUlRFRCA7CiAgICAgICAgZW51bSBSVU5OSU5HIDsKICAgICAgICBlbnVtIENBTkNFTExJTkcgOwogICAgICAgIGVudW0gRklOSVNIRUQgOwogICAgICAgIGVudW0gRkFJTEVEIDsKICAgICAgICBlbnVtIFBBUlRJQUxMWV9GQUlMRUQgOwogICAgICAgIGVudW0gQ0FOQ0VMTEVEIDsKICAgICAgfQogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlZmF1bHQgIFJVTk5JTkc7CiAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIHRoZSBzdGF0dXMgb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcywgCiAgICAgICAgd2hldGhlciBpdCBmYWlscywgc3VjY2VlZHMgZXRjLiAKICAgICAgICBJdCBkb2VzIG5vdCByZXByZXNlbnQgdGhlIHJldHVybmVkIHZhbHVlcyBvZiBhIHN1Y2Nlc3NmdWxseSBmaW5pc2hlZCAKICAgICAgICBwcm9jZXNzLiAiOwogICAgfQoKICAgIGxlYWYgcHJvZ3Jlc3NQZXJjZW50YWdlIHsKICAgICAgdHlwZSB1aW50OCB7CiAgICAgICAgcmFuZ2UgMC4uMTAwOwogICAgICB9CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIlByb2dyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHByb2Nlc3MgYXMgcGVyY2VudGFnZSI7CiAgICB9CgogICAgbGVhZi1saXN0IHByb2dyZXNzU3RhdGVJbmZvIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIkFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgCiAgICAgICAgJ05PVF9TVEFSVEVEJywgJ0NBTkNFTExJTkcnIGFuZCAnUlVOTklORycuCgogICAgICAgIEZvciBzcGVjaWZpYyBwcm9jZXNzZXMsIHNwZWNpZmljIHdlbGwtZGVmaW5lZCBzdHJpbmdzIChlLmcuIHN0cmluZyAKICAgICAgICBwYXR0ZXJucyBvciBlbnVtcykgbWF5IGJlIGRlZmluZWQgYXMgYSBzcGVjaWFsaXNhdGlvbi4iOwogICAgfQoKICAgIGxlYWYgcmVzdWx0U3RhdGVJbmZvIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIkFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgCiAgICAgICAgJ0ZJTklTSEVEJywgJ0ZBSUxFRCcsICdQQVJUSUFMTFlfRkFJTEVEIGFuZCAnQ0FOQ0VMTEVEJy4gCiAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSAnRkFJTEVEJyBvciAnUEFSVElBTExZX0ZBSUxFRCcgc3RhdGUgdGhpcyAKICAgICAgICBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBlcnJvciByZWFzb25zLgoKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzaGFsbCBub3QgYmUgdXNlZCB0byBtYWtlIHRoZSBvdXRjb21lIG9mIHRoZSBwcm9jZXNzIAogICAgICAgIGF2YWlsYWJsZSBmb3IgcmV0cmlldmFsLCBpZiBhbnkuIEZvciB0aGlzIHB1cnBvc2UsIGRlZGljYXRlZCAKICAgICAgICBhdHRyaWJ1dGVzIHNoYWxsIGJlIHNwZWNpZmllZCB3aGVuIHNwZWNpZnlpbmcgdGhlIHJlcHJlc2VudGF0aW9uIG9mIAogICAgICAgIGEgc3BlY2lmaWMgcHJvY2Vzcy4KCiAgICAgICAgRm9yIHNwZWNpZmljIHByb2Nlc3Nlcywgc3BlY2lmaWMgd2VsbC1kZWZpbmVkIHN0cmluZ3MgKGUuZy4gc3RyaW5nIAogICAgICAgIHBhdHRlcm5zIG9yIGVudW1zKSBtYXkgYmUgZGVmaW5lZCBhcyBhIHNwZWNpYWxpc2F0aW9uLiI7CiAgICB9CgogICAgbGVhZiBzdGFydFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiU3RhcnQgdGltZSBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzLCBpLmUuIHRoZSB0aW1lIHdoZW4gdGhlIAogICAgICAgIHN0YXR1cyBjaGFuZ2VkIGZyb20gJ05PVF9TVEFSVEVEJyB0byAnUlVOTklORycuIjsKICAgIH0KCiAgICBsZWFmIGVuZFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiRGF0ZSBhbmQgdGltZSB3aGVuIHN0YXR1cyBjaGFuZ2VkIHRvICdTVUNDRVNTJywgJ0NBTkNFTExFRCcsIAogICAgICAgICdGQUlMRUQnIG9yICdQQVJUSUFMTFlfRkFJTEVEJy4gCgogICAgICAgIElmIHRoZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUsIGl0IGlzIHRoZSBlc3RpbWF0ZWQgdGltZSAKICAgICAgICB0aGUgcHJvY2VzcyB3aWxsIGVuZC4iOwogICAgfQoKICAgIGxlYWYgdGltZXIgewogICAgICB0eXBlIHVpbnQzMjsKICAgICAgdW5pdHMgbWludXRlczsKICAgICAgZGVzY3JpcHRpb24gIlRpbWUgdW50aWwgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGxlZC4KICAgICAgICBJZiBzZXQsIHRoZSBzeXN0ZW0gZGVjcmVhc2VzIHRoZSB0aW1lciB3aXRoIHRpbWUuIFdoZW4gaXQgcmVhY2hlcyB6ZXJvIAogICAgICAgIHRoZSBjYW5jZWxsYXRpb24gb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBpbml0aWF0ZWQgYnkgdGhlIAogICAgICAgIE1uU19Qcm9kdWNlci4gCiAgICAgICAgSWYgbm90IHNldCwgdGhlcmUgaXMgbm8gdGltZSBsaW1pdCBmb3IgdGhlIHByb2Nlc3MuCiAgICAgICAgCiAgICAgICAgT25jZSB0aGUgdGltZXIgaXMgc2V0LCB0aGUgY29uc3VtZXIgY2FuIG5vdCBjaGFuZ2UgaXQgYW55bW9yZS4gCiAgICAgICAgSWYgdGhlIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZSB0aW1lciB0aGUgTW5TIFByb2R1Y2VyIG1heSBzZXQgaXQuIjsKICAgIH0KICB9CiAgCiAgdHlwZWRlZiBUZW50aE9mRGVncmVlcyB7IAogICAgdHlwZSB1aW50MTYgeyAKICAgICAgcmFuZ2UgMC4uMzYwMDsgCiAgICB9CiAgICB1bml0cyAiMC4xIGRlZ3JlZXMiOwogICAgZGVzY3JpcHRpb24gIkEgc2luZ2xlIGludGVncmFsIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gYW5nbGUgaW4gZGVncmVlcyAKICAgICAgYmV0d2VlbiAwIGFuZCAzNjAgd2l0aCBhIHJlc29sdXRpb24gb2YgMC4xIGRlZ3JlZXMuIjsKICB9CgogIHR5cGVkZWYgTGF0aXR1ZGUgewogICAgdHlwZSBkZWNpbWFsNjQgewogICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgcmFuZ2UgIi05MC4wMDAwLi4rOTAuMDAwMCI7IAogICAgfQogICAgZGVzY3JpcHRpb24gIkxhdGl0dWRlIHZhbHVlcyI7CiAgfQoKICB0eXBlZGVmIExvbmdpdHVkZSB7CiAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgIGZyYWN0aW9uLWRpZ2l0cyA0OwogICAgICByYW5nZSAiLTE4MC4wMDAwLi4rMTgwLjAwMDAiOyAKICAgIH0KICAgIGRlc2NyaXB0aW9uICJMb25naXR1ZGUgdmFsdWVzIjsKICB9CgogIHR5cGVkZWYgT25PZmYgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gT047CiAgICAgIGVudW0gT0ZGOwogICAgfQogIH0KICAKICAvLyBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCBhcyBpdCBpcyAKICAvLyAgYmVpbmcgbW92ZWQgdG8gXzNncHAtNWdjLW5ybS1uZnByb2ZpbGUKICBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHsKICAgIGRlc2NyaXB0aW9uICJEZWZpbmVzIHByb2ZpbGUgZm9yIG1hbmFnZWQgTkYiOwogICAgcmVmZXJlbmNlICIzR1BQIFRTIDIzLjUwMSI7CiAgICAKICAgIGxlYWYgaWR4IHsgdHlwZSB1aW50MzIgOyB9CiAgICAKICAgIGxlYWYgbmZJbnN0YW5jZUlEIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSB5YW5nOnV1aWQgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBwcm9maWxlIGZvciBtYW5hZ2VkIE5GLiAKICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSBORiBJbnN0YW5jZSBJRCBzaGFsbCBiZSBhIAogICAgICAgIFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSB2ZXJzaW9uIDQsIAogICAgICAgIGFzIGRlc2NyaWJlZCBpbiBJRVRGIFJGQyA0MTIyICIgOwogICAgfQogICAgCiAgICBsZWFmLWxpc3QgbmZUeXBlIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgdHlwZSBOZlR5cGU7CiAgICAgIGRlc2NyaXB0aW9uICJUeXBlIG9mIHRoZSBOZXR3b3JrIEZ1bmN0aW9uIiA7CiAgICB9CiAgICAKICAgIGxlYWYgaG9zdEFkZHIgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBpbmV0Omhvc3QgOwogICAgICBkZXNjcmlwdGlvbiAiSG9zdCBhZGRyZXNzIG9mIGEgTkYiOwogICAgfQogICAgCiAgICBsZWFmIGF1dGh6SW5mbyB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgTkYgU3BlY2lmaWMgU2VydmljZSBhdXRob3JpemF0aW9uIAogICAgICAgIGluZm9ybWF0aW9uLiBJdCBzaGFsbCBpbmNsdWRlIHRoZSBORiB0eXBlIChzKSBhbmQgTkYgcmVhbG1zL29yaWdpbnMgCiAgICAgICAgYWxsb3dlZCB0byBjb25zdW1lIE5GIFNlcnZpY2Uocykgb2YgTkYgU2VydmljZSBQcm9kdWNlci4iOwogICAgICByZWZlcmVuY2UgIlNlZSBUUyAyMy41MDEiIDsKICAgIH0KICAgIAogICAgbGVhZiBsb2NhdGlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIkluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgTkYgaW5zdGFuY2UgCiAgICAgICAgKGUuZy4gZ2VvZ3JhcGhpYyBsb2NhdGlvbiwgZGF0YSBjZW50ZXIpIGRlZmluZWQgYnkgb3BlcmF0b3IiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmIGNhcGFjaXR5IHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgdWludDE2IDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgc3RhdGljIGNhcGFjaXR5IGluZm9ybWF0aW9uIAogICAgICAgIGluIHRoZSByYW5nZSBvZiAwLTY1NTM1LCBleHByZXNzZWQgYXMgYSB3ZWlnaHQgcmVsYXRpdmUgdG8gb3RoZXIgCiAgICAgICAgTkYgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHR5cGU7IGlmIGNhcGFjaXR5IGlzIGFsc28gcHJlc2VudCBpbiB0aGUgCiAgICAgICAgbmZTZXJ2aWNlTGlzdCBwYXJhbWV0ZXJzLCB0aG9zZSB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KICAgICAgCiAgICBsZWFmIG5GU3J2R3JvdXBJZCB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgaWRlbnRpdHkgb2YgdGhlIGdyb3VwIHRoYXQgaXMgCiAgICAgICAgc2VydmVkIGJ5IHRoZSBORiBpbnN0YW5jZS4KICAgICAgICBNYXkgYmUgY29uZmlnIGZhbHNlIG9yIHRydWUgZGVwZW5kaW5nIG9uIHRoZSBNYW5hZ2VkRnVuY3Rpb24uIAogICAgICAgIENvbmZpZz10cnVlIGZvciBVZHJpbmZvLiBDb25maWc9ZmFsc2UgZm9yIFVkbUluZm8gYW5kIEF1c2ZJbmZvLiAKICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVETSBvciBBVVNGIG9yIFVEUi4gIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KICAgIAogICAgbGVhZi1saXN0IHN1cHBvcnRlZERhdGFTZXRJZHMgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIFNVQlNDUklQVElPTjsKICAgICAgICBlbnVtIFBPTElDWTsKICAgICAgICBlbnVtIEVYUE9TVVJFOwogICAgICAgIGVudW0gQVBQTElDQVRJT047CiAgICAgIH0KICAgICAgZGVzY3JpcHRpb24gIkxpc3Qgb2Ygc3VwcG9ydGVkIGRhdGEgc2V0cyBpbiB0aGUgVURSIGluc3RhbmNlLiAKICAgICAgICBNYXkgYmUgcHJlc2VudCBpZiAuLi9uZlR5cGUgPSBVRFIiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmLWxpc3Qgc21mU2VydmluZ0FyZWFzIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiRGVmaW5lcyB0aGUgU01GIHNlcnZpY2UgYXJlYShzKSB0aGUgVVBGIGNhbiBzZXJ2ZS4gCiAgICAgICAgU2hhbGwgYmUgcHJlc2VudCBpZiAuLi9uZlR5cGUgPSBVUEYiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmIHByaW9yaXR5IHsKICAgICAgdHlwZSB1aW50MTY7CiAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHBhcmFtZXRlciBkZWZpbmVzIFByaW9yaXR5IChyZWxhdGl2ZSB0byBvdGhlciBORnMgCiAgICAgICAgb2YgdGhlIHNhbWUgdHlwZSkgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIHRvIGJlIHVzZWQgZm9yIE5GIHNlbGVjdGlvbjsgCiAgICAgICAgbG93ZXIgdmFsdWVzIGluZGljYXRlIGEgaGlnaGVyIHByaW9yaXR5LiBJZiBwcmlvcml0eSBpcyBhbHNvIHByZXNlbnQgCiAgICAgICAgaW4gdGhlIG5mU2VydmljZUxpc3QgcGFyYW1ldGVycywgdGhvc2Ugd2lsbCBoYXZlIHByZWNlZGVuY2Ugb3ZlciAKICAgICAgICB0aGlzIHZhbHVlLiBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IEFNRiAiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogIH0KICAKICB0eXBlZGVmIHVzYWdlU3RhdGUgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gSURMRTsKICAgICAgZW51bSBBQ1RJVkU7CiAgICAgIGVudW0gQlVTWTsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJJdCBkZXNjcmliZXMgd2hldGhlciBvciBub3QgdGhlIHJlc291cmNlIGlzIGFjdGl2ZWx5IGluIAogICAgICB1c2UgYXQgYSBzcGVjaWZpYyBpbnN0YW50LCBhbmQgaWYgc28sIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBzcGFyZSAKICAgICAgY2FwYWNpdHkgZm9yIGFkZGl0aW9uYWwgdXNlcnMgYXQgdGhhdCBpbnN0YW50LiBUaGUgdmFsdWUgaXMgUkVBRC1PTkxZLiI7CiAgICByZWZlcmVuY2UgIklUVSBUIFJlY29tbWVuZGF0aW9uIFguNzMxIjsKICB9CiAgCiAgZ3JvdXBpbmcgU0FQIHsKICAgIGxlYWYgaG9zdCB7CiAgICAgIHR5cGUgaW5ldDpob3N0OwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgIH0KICAgIGxlYWYgcG9ydCB7CiAgICAgIHR5cGUgaW5ldDpwb3J0LW51bWJlcjsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiU2VydmljZSBhY2Nlc3MgcG9pbnQuIjsKICAgIHJlZmVyZW5jZSAiVFMgMjguNjIyIjsKICB9CiAgCiAgdHlwZWRlZiBNY2MgewogICAgZGVzY3JpcHRpb24gIlRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGNvbnNpc3RzIG9mIHRocmVlIGRlY2ltYWwgZGlnaXRzLCAKICAgICAgVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGlkZW50aWZpZXMgdGhlIGdlb2dyYXBoaWMgCiAgICAgIHJlZ2lvbiAodGhlIGRpZ2l0cyAxIGFuZCA4IGFyZSBub3QgdXNlZCk6IjsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnWzAyLTc5XVswLTldWzAtOV0nOwogICAgfQogICAgcmVmZXJlbmNlICIzR1BQIFRTIDIzLjAwMyBzdWJjbGF1c2UgMi4yIGFuZCAxMi4xIjsKICB9CgogIHR5cGVkZWYgTW5jIHsKICAgIGRlc2NyaXB0aW9uICJUaGUgbW9iaWxlIG5ldHdvcmsgY29kZSBjb25zaXN0cyBvZiB0d28gb3IgdGhyZWUgCiAgICAgIGRlY2ltYWwgZGlnaXRzIChmb3IgZXhhbXBsZTogTU5DIG9mIDAwMSBpcyBub3QgdGhlIHNhbWUgYXMgTU5DIG9mIDAxKSI7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJ1swLTldWzAtOV1bMC05XXxbMC05XVswLTldJzsKICAgIH0KICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyMy4wMDMgc3ViY2xhdXNlIDIuMiBhbmQgMTIuMSI7CiAgfQoKICBncm91cGluZyBQTE1OSWQgewogICAgbGVhZiBtY2MgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBNY2M7CiAgICB9CiAgICBsZWFmIG1uYyB7CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICB0eXBlIE1uYzsKICAgIH0KICAgIHJlZmVyZW5jZSAiVFMgMjMuNjU4IjsKICB9CiAgCiAgdHlwZWRlZiBOY2kgewogICAgZGVzY3JpcHRpb24gIk5SIENlbGwgSWRlbnRpdHkuIFRoZSBOQ0kgc2hhbGwgYmUgb2YgZml4ZWQgbGVuZ3RoIG9mIDM2IGJpdHMgCiAgICAgIGFuZCBzaGFsbCBiZSBjb2RlZCB1c2luZyBmdWxsIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLiAKICAgICAgVGhlIGV4YWN0IGNvZGluZyBvZiB0aGUgTkNJIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBlYWNoIFBMTU4gb3BlcmF0b3IiOwogICAgcmVmZXJlbmNlICJUUyAyMy4wMDMiOwogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggMzY7CiAgICAgICAgcGF0dGVybiAnWzAxXSsnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggOTsKICAgICAgICBwYXR0ZXJuICdbYS1mQS1GMC05XSonOwogICAgICB9CiAgICB9CiAgfQogICAgCiAgdHlwZWRlZiBPcGVyYXRpb25hbFN0YXRlIHsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyOC42MjUgYW5kIElUVS1UIFguNzMxIjsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIERJU0FCTEVEIHsKICAgICAgICB2YWx1ZSAwOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgdG90YWxseSBpbm9wZXJhYmxlLiI7CiAgICAgIH0KCiAgICAgIGVudW0gRU5BQkxFRCB7CiAgICAgICAgdmFsdWUgMTsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIHJlc291cmNlIGlzIHBhcnRpYWxseSBvciBmdWxseSBvcGVyYWJsZS4iOwogICAgICB9CgogICAgfQogIH0KICAKICB0eXBlZGVmIEJhc2ljQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgdHlwZWRlZiBBZG1pbmlzdHJhdGl2ZVN0YXRlIHsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyOC42MjUgYW5kIElUVS1UIFguNzMxIjsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIExPQ0tFRCB7CiAgICAgICAgdmFsdWUgMDsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIHJlc291cmNlIGlzIGFkbWluaXN0cmF0aXZlbHkgcHJvaGliaXRlZCBmcm9tIHBlcmZvcm1pbmcKICAgICAgICAgICAgICAgICBzZXJ2aWNlcyBmb3IgaXRzIHVzZXJzLiI7CiAgICAgIH0KCiAgICAgIGVudW0gVU5MT0NLRUQgewogICAgICAgIHZhbHVlIDE7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHBlcm1pdHRlZCB0byBwZXJmb3JtCiAgICAgICAgICBzZXJ2aWNlcyBmb3IgaXRzIHVzZXJzLiBUaGlzIGlzIGluZGVwZW5kZW50IG9mIGl0cyBpbmhlcmVudAogICAgICAgICAgb3BlcmFiaWxpdHkuIjsKICAgICAgfQoKICAgICAgZW51bSBTSFVUVElOR0RPV04gewogICAgICAgIHZhbHVlIDI7CiAgICAgICAgZGVzY3JpcHRpb24gIlVzZSBvZiB0aGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8KICAgICAgICAgIGV4aXN0aW5nIGluc3RhbmNlcyBvZiB1c2Ugb25seS4gV2hpbGUgdGhlIHN5c3RlbSByZW1haW5zIGluCiAgICAgICAgICB0aGUgc2h1dHRpbmcgZG93biBzdGF0ZSB0aGUgbWFuYWdlciBvciB0aGUgbWFuYWdlZCBlbGVtZW50IAogICAgICAgICAgbWF5IGF0IGFueSB0aW1lIGNhdXNlIHRoZSByZXNvdXJjZSB0byB0cmFuc2l0aW9uIHRvIHRoZSAKICAgICAgICAgIGxvY2tlZCBzdGF0ZS4iOwogICAgICB9CiAgICB9CiAgfQogIAogIHR5cGVkZWYgQXZhaWxhYmlsaXR5U3RhdHVzIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICBlbnVtIElOX1RFU1Q7CiAgICAgICAgICBlbnVtIEZBSUxFRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVudW0gUE9XRVJfT0ZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBPRkZfTElORTsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVudW0gT0ZGX0RVVFk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBlbnVtIERFUEVOREVOQ1k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBlbnVtIERFR1JBREVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBOT1RfSU5TVEFMTEVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBMT0dfRlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgIH0KICB9CiAgCiAgdHlwZWRlZiBDZWxsU3RhdGUgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIElETEU7CiAgICAgICAgZW51bSBJTkFDVElWRTsgICAgICAgICAgICAgIAogICAgICAgIGVudW0gQUNUSVZFOyAgICAgICAgICAgICAgCiAgICAgfQogIH0KCiAgdHlwZWRlZiBOcnBjaSB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBDZWxsIElkZW50aXR5IChQQ0kpIG9mIHRoZSBOUiBjZWxsLiI7CiAgICByZWZlcmVuY2UgIlRTIDM2LjIxMSBzdWJjbGF1c2UgNi4xMSI7CiAgfQoKICB0eXBlZGVmIFRhYyB7CiAgICB0eXBlIGludDMyIHsKICAgICAgcmFuZ2UgMC4uMTY3NzcyMTUgOwogICAgfQogICAgZGVzY3JpcHRpb24gIlRyYWNraW5nIEFyZWEgQ29kZSI7CiAgICByZWZlcmVuY2UgIlRTIDIzLjAwMyBjbGF1c2UgMTkuNC4yLjMiOwogIH0KCiAgdHlwZWRlZiBBbWZSZWdpb25JZCB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDggOwogICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgbGVuZ3RoIDg7CiAgICAgICAgcGF0dGVybiAnWzAxXSonOwogICAgICB9CiAgICB9CiAgICByZWZlcmVuY2UgImNsYXVzZSAyLjEwLjEgb2YgM0dQUCBUUyAyMy4wMDMiOwogIH0KCiAgdHlwZWRlZiBBbWZTZXRJZCB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDE2IHsKICAgICAgICByYW5nZSAnMC4uMTAyMyc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA4OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CgogIHR5cGVkZWYgQW1mUG9pbnRlciB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlICcwLi42Myc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA2OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CiAgICAgICAgCiAgZ3JvdXBpbmcgQW1mSWRlbnRpZmllciB7ICAgICAgICAKICAgIGxlYWYgYW1mUmVnaW9uSWQgewogICAgICB0eXBlIEFtZlJlZ2lvbklkOwogICAgfQogICAgbGVhZiBhbWZTZXRJZCB7CiAgICAgIHR5cGUgQW1mU2V0SWQ7CiAgICB9CiAgICBsZWFmIGFtZlBvaW50ZXIgewogICAgICB0eXBlIEFtZlBvaW50ZXI7CiAgICB9IAogICAgZGVzY3JpcHRpb24gIlRoZSBBTUZJIGlzIGNvbnN0cnVjdGVkIGZyb20gYW4gQU1GIFJlZ2lvbiBJRCwgCiAgICAgIGFuIEFNRiBTZXQgSUQgYW5kIGFuIEFNRiBQb2ludGVyLiAKICAgICAgVGhlIEFNRiBSZWdpb24gSUQgaWRlbnRpZmllcyB0aGUgcmVnaW9uLCAKICAgICAgdGhlIEFNRiBTZXQgSUQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQU1GIFNldCB3aXRoaW4gdGhlIEFNRiBSZWdpb24sIGFuZCAKICAgICAgdGhlIEFNRiBQb2ludGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiB3aXRoaW4gdGhlIEFNRiBTZXQuICI7IAogIH0gICAgCgovLyB0eXBlIGRlZmluaXRpb25zIGVzcGVjaWFsbHkgZm9yIGNvcmUgTkZzCgogIHR5cGVkZWYgTmZUeXBlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIE5SRjsKICAgICAgZW51bSBVRE07CiAgICAgIGVudW0gQU1GOwogICAgICBlbnVtIFNNRjsKICAgICAgZW51bSBBVVNGOwogICAgICBlbnVtIE5FRjsKICAgICAgZW51bSBQQ0Y7CiAgICAgIGVudW0gU01TRjsKICAgICAgZW51bSBOU1NGOwogICAgICBlbnVtIFVEUjsKICAgICAgZW51bSBMTUY7CiAgICAgIGVudW0gR01MQzsKICAgICAgZW51bSA1R19FSVI7CiAgICAgIGVudW0gU0VQUDsKICAgICAgZW51bSBVUEY7CiAgICAgIGVudW0gTjNJV0Y7CiAgICAgIGVudW0gQUY7CiAgICAgIGVudW0gVURTRjsKICAgICAgZW51bSBCU0Y7CiAgICAgIGVudW0gQ0hGOwogICAgfSAgICAgICAgICAKICB9CiAgCiAgdHlwZWRlZiBOb3RpZmljYXRpb25UeXBlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIE4xX01FU1NBR0VTOwogICAgICBlbnVtIE4yX0lORk9STUFUSU9OOwogICAgICBlbnVtIExPQ0FUSU9OX05PVElGSUNBVElPTjsKICAgIH0gICAgICAKICB9CiAgCiAgdHlwZWRlZiBMb2FkIHsKICAgIGRlc2NyaXB0aW9uICJMYXRlc3Qga25vd24gbG9hZCBpbmZvcm1hdGlvbiBvZiB0aGUgTkYsIHBlcmNlbnRhZ2UgIjsKICAgIHR5cGUgdWludDggewogICAgICByYW5nZSAwLi4xMDA7CiAgICB9CiAgfQoKICB0eXBlZGVmIE4xTWVzc2FnZUNsYXNzIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIDVHTU07CiAgICAgIGVudW0gU007CiAgICAgIGVudW0gTFBQOwogICAgICBlbnVtIFNNUzsgCiAgICB9ICAgICAgCiAgfQogIAogIHR5cGVkZWYgTjJJbmZvcm1hdGlvbkNsYXNzIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIFNNOwogICAgICBlbnVtIE5SUFBBOwogICAgICBlbnVtIFBXUzsKICAgICAgZW51bSBQV1NfQkNBTDsKICAgICAgZW51bSBQV1NfUkY7CiAgICB9ICAgICAgICAgICAgICAKICB9CiAgCiAgZ3JvdXBpbmcgRGVmYXVsdE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiB7CiAgICAKICAgIGxlYWYgbm90aWZpY2F0aW9uVHlwZSB7CiAgICAgIHR5cGUgTm90aWZpY2F0aW9uVHlwZTsKICAgIH0KICAgIAogICAgbGVhZiBjYWxsYmFja1VyaSB7CiAgICAgIHR5cGUgaW5ldDp1cmk7CiAgICB9CiAgICAKICAgIGxlYWYgbjFNZXNzYWdlQ2xhc3MgewogICAgICB0eXBlIE4xTWVzc2FnZUNsYXNzOwogICAgfQogICAgCiAgICBsZWFmIG4ySW5mb3JtYXRpb25DbGFzcyB7CiAgICAgIHR5cGUgTjJJbmZvcm1hdGlvbkNsYXNzOwogICAgfSAgICAKICB9ICAKICAgICAgICAKICBncm91cGluZyBJcHY0QWRkcmVzc1JhbmdlIHsKICBsZWFmIHN0YXJ0IHsKICAgIHR5cGUgaW5ldDppcHY0LWFkZHJlc3M7CiAgICB9CiAgbGVhZiBlbmQgewogICAgdHlwZSBpbmV0OmlwdjQtYWRkcmVzczsKICAgIH0gICAgCiAgfQogICAgCiAgZ3JvdXBpbmcgSXB2NlByZWZpeFJhbmdlIHsKICBsZWFmIHN0YXJ0IHsKICAgIHR5cGUgaW5ldDppcHY2LXByZWZpeDsKICAgIH0KICBsZWFmIGVuZCB7CiAgICB0eXBlIGluZXQ6aXB2Ni1wcmVmaXg7CiAgICB9ICAgIAogIH0KICAgICAKICB0eXBlZGVmIE5zaUlkIHsKICAgIHR5cGUgc3RyaW5nOwogIH0KICAgIAogIHR5cGVkZWYgVWVNb2JpbGl0eUxldmVsIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIFNUQVRJT05BUlk7CiAgICAgIGVudW0gTk9NQURJQzsKICAgICAgZW51bSBSRVNUUklDVEVEX01PQklMSVRZOwogICAgICBlbnVtIEZVTExZX01PQklMSVRZOwogICAgfQogIH0KICAgICAgCiAgdHlwZWRlZiBSZXNvdXJjZVNoYXJpbmdMZXZlbCB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gU0hBUkVEOwogICAgICAgIGVudW0gTk9UX1NIQVJFRDsKICAgICAgfQogIH0KICAgICAgCiAgdHlwZWRlZiBUeERpcmVjdGlvbiB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gREw7CiAgICAgICAgZW51bSBVTDsKICAgICAgICBlbnVtIERMX0FORF9VTDsKICAgICAgfQogIH0KICAgICAgCiAgZ3JvdXBpbmcgQWRkcmVzc1dpdGhWbGFuIHsKICAgIGxlYWYgaXBBZGRyZXNzIHsKICAgICAgdHlwZSBpbmV0OmlwLWFkZHJlc3M7ICAgCiAgICB9CiAgICBsZWFmIHZsYW5JZCB7CiAgICAgICB0eXBlIHVpbnQxNjsKICAgIH0gIAogIH0KICAKICB0eXBlZGVmIERpc3Rpbmd1aXNoZWROYW1lIHsgICAgLy8gVE9ETyBpcyB0aGlzIGVxdWl2YWxlbnQgdG8gVFMgMzIuMzAwID8KICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnKFthLXpBLVpdW2EtekEtWjAtOS1dKj0oXFwoIHwjfFxcfD58PHw7fCJ8XCt8LHxbYS1mQS1GMC05XXsyfSl8W15cXD48OyIrLCMgXSknCiAgICAgICAgKyAnKChcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissXSkqJwogICAgICAgICsgJyhcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissIF0pKT8nCiAgICAgICAgKyAnWyxcK10pKlthLXpBLVpdW2EtekEtWjAtOS1dKj0oXFwoIHwjfFxcfD58PHw7fCJ8XCt8LHxbYS1mQS1GMC05XXsyfSl8W15cXD48OyIrLCMgXSknCiAgICAgICAgKyAnKChcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KScKICAgICAgICArICd8W15cXD48OyIrLF0pKihcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissIF0pKT8nOyAgCiAgICB9CiAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgaW50ZXJuYXRpb25hbCBzdGFuZGFyZCBmb3IgdGhlIHJlcHJlc2VudGF0aW9uIAogICAgICBvZiBEaXN0aW5ndWlzaGVkIE5hbWUgKFJGQyA0NTEyKS4gCiAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIERpc3Rpbmd1aXNoZWROYW1lIFJFR0VYIGlzOgogICAgICB7QXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVZhbHVlfSAgIAoKICAgICAgQXR0cmlidXRlVHlwZSBjb25zaXN0cyBvZiBhbHBoYW51bWVyaWMgYW5kIGh5cGhlbiAoT0lEcyBub3QgYWxsb3dlZCkuIAogICAgICBBbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgcmVzdHJpY3RlZC4KICAgICAgVGhlIEF0dHJpYnV0ZSB2YWx1ZSBjYW5ub3QgY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMgb3IgdGhlIAogICAgICAgIGZvbGxvd2luZyBjaGFyYWN0ZXJzIDogXFwgPiA8IDsgXCIgKyAsIChDb21tYSkgYW5kIFdoaXRlIHNwYWNlCiAgICAgIFRoZSBBdHRyaWJ1dGUgdmFsdWUgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGlmIHRoZXkgCiAgICAgICAgYXJlIGV4Y2FwZWQgOiBcXCA+IDwgOyBcIiArICwgKENvbW1hKSBhbmQgV2hpdGUgc3BhY2UKICAgICAgVGhlIEF0dHJpYnV0ZSB2YWx1ZSBjYW4gY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMgaWYgaXRzIGFuIGVzY2FwZWQgCiAgICAgICAgZG91YmxlIGRpZ2l0IGhleCBudW1iZXIuCiAgICAgICAgRXhhbXBsZXMgY291bGQgYmUgCiAgICAgICAgICBVSUQ9bm9ib2R5QGV4YW1wbGUuY29tLERDPWV4YW1wbGUsREM9Y29tCiAgICAgICAgICAgIENOPUpvaG4gU21pdGgsT1U9U2FsZXMsTz1BQ01FIExpbWl0ZWQsTD1Nb2FiLFNUPVV0YWgsQz1VUyI7CiAgICByZWZlcmVuY2UgICJSRkMgNDUxMiBMaWdodHdlaWdodCBEaXJlY3RvcnkgQWNjZXNzIFByb3RvY29sIChMREFQKToKICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSBJbmZvcm1hdGlvbiBNb2RlbHMiOwogIH0gLy8gcmVjaGVjayByZWdleHAgaXQgZG9lc24ndCBoYW5kbGUgcG9zaXggWzpjbnRybDpdCiAKICB0eXBlZGVmIFFPZmZzZXRSYW5nZSAgewogICAgdHlwZSBpbnQ4IHsgCiAgICAgIHJhbmdlICItMjQgfCAtMjIgfCAtMjAgfCAtMTggfCAtMTYgfCAtMTQgfCAtMTIgfCAtMTAgfCAtOCB8IC02IHwgIiArCiAgICAgICAgIiAtNSB8IC00IHwgLTMgfCAtMiB8IC0xIHwgMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDggfCAxMCB8ICIgKwogICAgICAgICIgMTIgfCAxNCB8IDE2IHwgMTggfCAyMCB8IDIyIHwgMjQiOyAKICAgIH0KICAgIHVuaXRzIGRCOwogIH0KfQ==
ietf-geo-location urn:ietf:params:xml:ns:yang:ietf-geo-location \N [] 2022-02-11 bW9kdWxlIGlldGYtZ2VvLWxvY2F0aW9uIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYtZ2VvLWxvY2F0aW9uIjsKICBwcmVmaXggZ2VvOwogIGltcG9ydCBpZXRmLXlhbmctdHlwZXMgewogICAgcHJlZml4IHlhbmc7CiAgICByZWZlcmVuY2UgIlJGQyA2OTkxOiBDb21tb24gWUFORyBEYXRhIFR5cGVzIjsKICB9CgogIG9yZ2FuaXphdGlvbgogICAgIklFVEYgTkVUTU9EIFdvcmtpbmcgR3JvdXAgKE5FVE1PRCkiOwogIGNvbnRhY3QKICAgIldHIFdlYjogICA8aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy93Zy9uZXRtb2QvPgogICAgV0cgTGlzdDogIDxtYWlsdG86bmV0bW9kQGlldGYub3JnPgoKICAgIEVkaXRvcjogICBDaHJpc3RpYW4gSG9wcHMKICAgICAgICAgICAgICA8bWFpbHRvOmNob3Bwc0BjaG9wcHMub3JnPiI7CgogIGRlc2NyaXB0aW9uCiAgICAiVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGdyb3VwaW5nIG9mIGEgY29udGFpbmVyIG9iamVjdCBmb3IKICAgICBzcGVjaWZ5aW5nIGEgbG9jYXRpb24gb24gb3IgYXJvdW5kIGFuIGFzdHJvbm9taWNhbCBvYmplY3QgKGUuZy4sCiAgICAgJ2VhcnRoJykuCgogICAgIFRoZSBrZXkgd29yZHMgJ01VU1QnLCAnTVVTVCBOT1QnLCAnUkVRVUlSRUQnLCAnU0hBTEwnLCAnU0hBTEwKICAgICBOT1QnLCAnU0hPVUxEJywgJ1NIT1VMRCBOT1QnLCAnUkVDT01NRU5ERUQnLCAnTk9UIFJFQ09NTUVOREVEJywKICAgICAnTUFZJywgYW5kICdPUFRJT05BTCcgaW4gdGhpcyBkb2N1bWVudCBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMKICAgICBkZXNjcmliZWQgaW4gQkNQIDE0IChSRkMgMjExOSkgKFJGQyA4MTc0KSB3aGVuLCBhbmQgb25seSB3aGVuLAogICAgIHRoZXkgYXBwZWFyIGluIGFsbCBjYXBpdGFscywgYXMgc2hvd24gaGVyZS4KCiAgICAgQ29weXJpZ2h0IChjKSAyMDIyIElFVEYgVHJ1c3QgYW5kIHRoZSBwZXJzb25zIGlkZW50aWZpZWQgYXMKICAgICBhdXRob3JzIG9mIHRoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywKICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHVyc3VhbnQgdG8sCiAgICAgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgdGVybXMgY29udGFpbmVkIGluLCB0aGUKICAgICBSZXZpc2VkIEJTRCBMaWNlbnNlIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUKICAgICBJRVRGIFRydXN0J3MgTGVnYWwgUHJvdmlzaW9ucyBSZWxhdGluZyB0byBJRVRGIERvY3VtZW50cwogICAgIChodHRwczovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoaXMgWUFORyBtb2R1bGUgaXMgcGFydCBvZiBSRkMgOTE3OQogICAgIChodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9pbmZvL3JmYzkxNzkpOyBzZWUgdGhlIFJGQyBpdHNlbGYKICAgICBmb3IgZnVsbCBsZWdhbCBub3RpY2VzLiI7CgogIHJldmlzaW9uIDIwMjItMDItMTEgewogICAgZGVzY3JpcHRpb24KICAgICAgIkluaXRpYWwgUmV2aXNpb24iOwogICAgcmVmZXJlbmNlCiAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgfQoKICBmZWF0dXJlIGFsdGVybmF0ZS1zeXN0ZW1zIHsKICAgIGRlc2NyaXB0aW9uCiAgICAgICJUaGlzIGZlYXR1cmUgbWVhbnMgdGhlIGRldmljZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIGxvY2F0aW9ucwogICAgICAgdXNpbmcgYWx0ZXJuYXRlIHN5c3RlbXMgZm9yIHJlZmVyZW5jZSBmcmFtZXMuIjsKICB9CgogIGdyb3VwaW5nIGdlby1sb2NhdGlvbiB7CiAgICBkZXNjcmlwdGlvbgogICAgICAiR3JvdXBpbmcgdG8gaWRlbnRpZnkgYSBsb2NhdGlvbiBvbiBhbiBhc3Ryb25vbWljYWwgb2JqZWN0LiI7CgogICAgY29udGFpbmVyIGdlby1sb2NhdGlvbiB7CiAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIkEgbG9jYXRpb24gb24gYW4gYXN0cm9ub21pY2FsIGJvZHkgKGUuZy4sICdlYXJ0aCcpCiAgICAgICAgIHNvbWV3aGVyZSBpbiBhIHVuaXZlcnNlLiI7CgogICAgICBjb250YWluZXIgcmVmZXJlbmNlLWZyYW1lIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBGcmFtZSBvZiBSZWZlcmVuY2UgZm9yIHRoZSBsb2NhdGlvbiB2YWx1ZXMuIjsKCiAgICAgICAgbGVhZiBhbHRlcm5hdGUtc3lzdGVtIHsKICAgICAgICAgIGlmLWZlYXR1cmUgImFsdGVybmF0ZS1zeXN0ZW1zIjsKICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBzeXN0ZW0gaW4gd2hpY2ggdGhlIGFzdHJvbm9taWNhbCBib2R5IGFuZAogICAgICAgICAgICAgZ2VvZGV0aWMtZGF0dW0gaXMgZGVmaW5lZC4gIE5vcm1hbGx5LCB0aGlzIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAgcHJlc2VudCBhbmQgdGhlIHN5c3RlbSBpcyB0aGUgbmF0dXJhbCB1bml2ZXJzZTsgaG93ZXZlciwKICAgICAgICAgICAgIHdoZW4gcHJlc2VudCwgdGhpcyB2YWx1ZSBhbGxvd3MgZm9yIHNwZWNpZnlpbmcgYWx0ZXJuYXRlCiAgICAgICAgICAgICBzeXN0ZW1zIChlLmcuLCB2aXJ0dWFsIHJlYWxpdGllcykuICBBbiBhbHRlcm5hdGUtc3lzdGVtCiAgICAgICAgICAgICBtb2RpZmllcyB0aGUgZGVmaW5pdGlvbiAoYnV0IG5vdCB0aGUgdHlwZSkgb2YgdGhlIG90aGVyCiAgICAgICAgICAgICB2YWx1ZXMgaW4gdGhlIHJlZmVyZW5jZSBmcmFtZS4iOwogICAgICAgIH0KICAgICAgICBsZWFmIGFzdHJvbm9taWNhbC1ib2R5IHsKICAgICAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgfQogICAgICAgICAgZGVmYXVsdCAiZWFydGgiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFuIGFzdHJvbm9taWNhbCBib2R5IGFzIG5hbWVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsCiAgICAgICAgICAgICBBc3Ryb25vbWljYWwgVW5pb24gKElBVSkgb3IgYWNjb3JkaW5nIHRvIHRoZSBhbHRlcm5hdGUKICAgICAgICAgICAgIHN5c3RlbSBpZiBzcGVjaWZpZWQuICBFeGFtcGxlcyBpbmNsdWRlICdzdW4nIChvdXIgc3RhciksCiAgICAgICAgICAgICAnZWFydGgnIChvdXIgcGxhbmV0KSwgJ21vb24nIChvdXIgbW9vbiksICdlbmNlbGFkdXMnIChhCiAgICAgICAgICAgICBtb29uIG9mIFNhdHVybiksICdjZXJlcycgKGFuIGFzdGVyb2lkKSwgYW5kCiAgICAgICAgICAgICAnNjdwL2NodXJ5dW1vdi1nZXJhc2ltZW5rbyAoYSBjb21ldCkuICBUaGUgQVNDSUkgdmFsdWUKICAgICAgICAgICAgIFNIT1VMRCBoYXZlIHVwcGVyY2FzZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGFuZCBub3QKICAgICAgICAgICAgIGluY2x1ZGUgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuLCB2YWx1ZXMgMzIuLjY0LCBhbmQKICAgICAgICAgICAgIDkxLi4xMjYpLiAgQW55IHByZWNlZGluZyAndGhlJyBpbiB0aGUgbmFtZSBTSE9VTEQgTk9UIGJlCiAgICAgICAgICAgICBpbmNsdWRlZC4iOwogICAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAgICJodHRwczovL3d3dy5pYXUub3JnLyI7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lciBnZW9kZXRpYy1zeXN0ZW0gewogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBnZW9kZXRpYyBzeXN0ZW0gb2YgdGhlIGxvY2F0aW9uIGRhdGEuIjsKICAgICAgICAgIGxlYWYgZ2VvZGV0aWMtZGF0dW0gewogICAgICAgICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkEgZ2VvZGV0aWMtZGF0dW0gZGVmaW5pbmcgdGhlIG1lYW5pbmcgb2YgbGF0aXR1ZGUsCiAgICAgICAgICAgICAgIGxvbmdpdHVkZSwgYW5kIGhlaWdodC4gIFRoZSBkZWZhdWx0IHdoZW4gdGhlCiAgICAgICAgICAgICAgIGFzdHJvbm9taWNhbCBib2R5IGlzICdlYXJ0aCcgaXMgJ3dncy04NCcsIHdoaWNoIGlzCiAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIEdsb2JhbCBQb3NpdGlvbmluZyBTeXN0ZW0gKEdQUykuICBUaGUKICAgICAgICAgICAgICAgQVNDSUkgdmFsdWUgU0hPVUxEIGhhdmUgdXBwZXJjYXNlIGNvbnZlcnRlZCB0bwogICAgICAgICAgICAgICBsb3dlcmNhc2UgYW5kIG5vdCBpbmNsdWRlIGNvbnRyb2wgY2hhcmFjdGVycwogICAgICAgICAgICAgICAoaS5lLiwgdmFsdWVzIDMyLi42NCwgYW5kIDkxLi4xMjYpLiAgVGhlIElBTkEgcmVnaXN0cnkKICAgICAgICAgICAgICAgZnVydGhlciByZXN0cmljdHMgdGhlIHZhbHVlIGJ5IGNvbnZlcnRpbmcgYWxsIHNwYWNlcwogICAgICAgICAgICAgICAoJyAnKSB0byBkYXNoZXMgKCctJykuCiAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZ2VvZGV0aWMtZGF0dW0gaW5kaWNhdGVzCiAgICAgICAgICAgICAgIGhvdyBhY2N1cmF0ZWx5IGl0IG1vZGVscyB0aGUgYXN0cm9ub21pY2FsIGJvZHkgaW4KICAgICAgICAgICAgICAgcXVlc3Rpb24sIGJvdGggZm9yIHRoZSAnaG9yaXpvbnRhbCcKICAgICAgICAgICAgICAgbGF0aXR1ZGUvbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGFuZCBmb3IgaGVpZ2h0CiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiI7CiAgICAgICAgICAgIHJlZmVyZW5jZQogICAgICAgICAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucywKICAgICAgICAgICAgICAgU2VjdGlvbiA2LjEiOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBjb29yZC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgYWNjdXJhY3kgb2YgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBwYWlyIGZvcgogICAgICAgICAgICAgICBlbGxpcHNvaWRhbCBjb29yZGluYXRlcywgb3IgdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMKICAgICAgICAgICAgICAgZm9yIENhcnRlc2lhbiBjb29yZGluYXRlcy4gIFdoZW4gY29vcmQtYWNjdXJhY3kgaXMKICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBpdCBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgY29vcmRpbmF0ZXMKICAgICAgICAgICAgICAgaW4gdGhlIGFzc29jaWF0ZWQgbGlzdCBvZiBsb2NhdGlvbnMgaGF2ZSBiZWVuCiAgICAgICAgICAgICAgIGRldGVybWluZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbQogICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1kYXR1bS4gIEZvciBleGFtcGxlLCB0aGVyZQogICAgICAgICAgICAgICBtaWdodCBiZSB1bmNlcnRhaW50eSBkdWUgdG8gbWVhc3VyZW1lbnQgZXJyb3IgaWYgYW4KICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIG1lYXN1cmVtZW50IHdhcyBtYWRlIHRvIGRldGVybWluZSBlYWNoCiAgICAgICAgICAgICAgIGxvY2F0aW9uLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIGhlaWdodC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBoZWlnaHQgdmFsdWUgZm9yIGVsbGlwc29pZGFsCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOyB0aGlzIHZhbHVlIGlzIG5vdCB1c2VkIHdpdGggQ2FydGVzaWFuCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiAgV2hlbiBoZWlnaHQtYWNjdXJhY3kgaXMgc3BlY2lmaWVkLCBpdAogICAgICAgICAgICAgICBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgaGVpZ2h0cyBpbiB0aGUKICAgICAgICAgICAgICAgYXNzb2NpYXRlZCBsaXN0IG9mIGxvY2F0aW9ucyBoYXZlIGJlZW4gZGV0ZXJtaW5lZAogICAgICAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGRlZmluZWQgYnkgdGhlCiAgICAgICAgICAgICAgIGdlb2RldGljLWRhdHVtLiAgRm9yIGV4YW1wbGUsIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgICAgICAgIHVuY2VydGFpbnR5IGR1ZSB0byBtZWFzdXJlbWVudCBlcnJvciBpZiBhbgogICAgICAgICAgICAgICBleHBlcmltZW50YWwgbWVhc3VyZW1lbnQgd2FzIG1hZGUgdG8gZGV0ZXJtaW5lIGVhY2gKICAgICAgICAgICAgICAgbG9jYXRpb24uIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY2hvaWNlIGxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBsb2NhdGlvbiBkYXRhIGVpdGhlciBpbiBsYXRpdHVkZS9sb25naXR1ZGUgb3IKICAgICAgICAgICBDYXJ0ZXNpYW4gdmFsdWVzIjsKICAgICAgICBjYXNlIGVsbGlwc29pZCB7CiAgICAgICAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGxhdGl0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBsb25naXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJkZWNpbWFsIGRlZ3JlZXMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgbG9uZ2l0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBoZWlnaHQgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkhlaWdodCBmcm9tIGEgcmVmZXJlbmNlIDAgdmFsdWUuICBUaGUgcHJlY2lzaW9uIGFuZAogICAgICAgICAgICAgICAnMCcgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhc2UgY2FydGVzaWFuIHsKICAgICAgICAgIGxlYWYgeCB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIFggdmFsdWUgYXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIHkgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIlRoZSBZIHZhbHVlIGFzIGRlZmluZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiB6IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJtZXRlcnMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgWiB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29udGFpbmVyIHZlbG9jaXR5IHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIklmIHRoZSBvYmplY3QgaXMgaW4gbW90aW9uLCB0aGUgdmVsb2NpdHkgdmVjdG9yIGRlc2NyaWJlcwogICAgICAgICAgIHRoaXMgbW90aW9uIGF0IHRoZSB0aW1lIGdpdmVuIGJ5IHRoZSB0aW1lc3RhbXAuICBGb3IgYQogICAgICAgICAgIGZvcm11bGEgdG8gY29udmVydCB0aGVzZSB2YWx1ZXMgdG8gc3BlZWQgYW5kIGhlYWRpbmcsIHNlZQogICAgICAgICAgIFJGQyA5MTc5LiI7CiAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwoKICAgICAgICBsZWFmIHYtbm9ydGggewogICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTI7CiAgICAgICAgICB9CiAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgInYtbm9ydGggaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgdG93YXJkcwogICAgICAgICAgICAgdHJ1ZSBub3J0aCBhcyBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1zeXN0ZW0uIjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdi1lYXN0IHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LWVhc3QgaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgcGVycGVuZGljdWxhcgogICAgICAgICAgICAgdG8gdGhlIHJpZ2h0IG9mIHRydWUgbm9ydGggYXMgZGVmaW5lZCBieQogICAgICAgICAgICAgdGhlIGdlb2RldGljLXN5c3RlbS4iOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB2LXVwIHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LXVwIGlzIHRoZSByYXRlIG9mIGNoYW5nZSAoaS5lLiwgc3BlZWQpIGF3YXkgZnJvbSB0aGUKICAgICAgICAgICAgIGNlbnRlciBvZiBtYXNzLiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxlYWYgdGltZXN0YW1wIHsKICAgICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlJlZmVyZW5jZSB0aW1lIHdoZW4gbG9jYXRpb24gd2FzIHJlY29yZGVkLiI7CiAgICAgIH0KICAgICAgbGVhZiB2YWxpZC11bnRpbCB7CiAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICJUaGUgdGltZXN0YW1wIGZvciB3aGljaCB0aGlzIGdlby1sb2NhdGlvbiBpcyB2YWxpZCB1bnRpbC4KICAgICAgICAgICBJZiB1bnNwZWNpZmllZCwgdGhlIGdlby1sb2NhdGlvbiBoYXMgbm8gc3BlY2lmaWMKICAgICAgICAgICBleHBpcmF0aW9uIHRpbWUuIjsKICAgICAgfQogICAgfQogIH0KfQo=
ietf-yang-types urn:ietf:params:xml:ns:yang:ietf-yang-types \N [] 2013-07-15 bW9kdWxlIGlldGYteWFuZy10eXBlcyB7CgogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYteWFuZy10eXBlcyI7CiAgcHJlZml4ICJ5YW5nIjsKCiAgb3JnYW5pemF0aW9uCiAgICJJRVRGIE5FVE1PRCAoTkVUQ09ORiBEYXRhIE1vZGVsaW5nIExhbmd1YWdlKSBXb3JraW5nIEdyb3VwIjsKCiAgY29udGFjdAogICAiV0cgV2ViOiAgIDxodHRwOi8vdG9vbHMuaWV0Zi5vcmcvd2cvbmV0bW9kLz4KICAgIFdHIExpc3Q6ICA8bWFpbHRvOm5ldG1vZEBpZXRmLm9yZz4KCiAgICBXRyBDaGFpcjogRGF2aWQgS2Vzc2VucwogICAgICAgICAgICAgIDxtYWlsdG86ZGF2aWQua2Vzc2Vuc0Buc24uY29tPgoKICAgIFdHIENoYWlyOiBKdWVyZ2VuIFNjaG9lbndhZWxkZXIKICAgICAgICAgICAgICA8bWFpbHRvOmouc2Nob2Vud2FlbGRlckBqYWNvYnMtdW5pdmVyc2l0eS5kZT4KCiAgICBFZGl0b3I6ICAgSnVlcmdlbiBTY2hvZW53YWVsZGVyCiAgICAgICAgICAgICAgPG1haWx0bzpqLnNjaG9lbndhZWxkZXJAamFjb2JzLXVuaXZlcnNpdHkuZGU+IjsKCiAgZGVzY3JpcHRpb24KICAgIlRoaXMgbW9kdWxlIGNvbnRhaW5zIGEgY29sbGVjdGlvbiBvZiBnZW5lcmFsbHkgdXNlZnVsIGRlcml2ZWQKICAgIFlBTkcgZGF0YSB0eXBlcy4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMTMgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZCBhcwogICAgYXV0aG9ycyBvZiB0aGUgY29kZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgogICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwdXJzdWFudCB0bywgYW5kIHN1YmplY3QKICAgIHRvIHRoZSBsaWNlbnNlIHRlcm1zIGNvbnRhaW5lZCBpbiwgdGhlIFNpbXBsaWZpZWQgQlNEIExpY2Vuc2UKICAgIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUgSUVURiBUcnVzdCdzIExlZ2FsIFByb3Zpc2lvbnMKICAgIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzCiAgICAoaHR0cDovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICBUaGlzIHZlcnNpb24gb2YgdGhpcyBZQU5HIG1vZHVsZSBpcyBwYXJ0IG9mIFJGQyA2OTkxOyBzZWUKICAgIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsIG5vdGljZXMuIjsKCiAgcmV2aXNpb24gMjAxMy0wNy0xNSB7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGlzIHJldmlzaW9uIGFkZHMgdGhlIGZvbGxvd2luZyBuZXcgZGF0YSB0eXBlczoKICAgICAgLSB5YW5nLWlkZW50aWZpZXIKICAgICAgLSBoZXgtc3RyaW5nCiAgICAgIC0gdXVpZAogICAgICAtIGRvdHRlZC1xdWFkIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNjk5MTogQ29tbW9uIFlBTkcgRGF0YSBUeXBlcyI7CiAgfQoKICByZXZpc2lvbiAyMDEwLTA5LTI0IHsKICAgIGRlc2NyaXB0aW9uCiAgICAgIkluaXRpYWwgcmV2aXNpb24uIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNjAyMTogQ29tbW9uIFlBTkcgRGF0YSBUeXBlcyI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2YgY291bnRlciBhbmQgZ2F1Z2UgdHlwZXMgKioqLwoKICB0eXBlZGVmIGNvdW50ZXIzMiB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBjb3VudGVyMzIgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIKICAgICAgdGhhdCBtb25vdG9uaWNhbGx5IGluY3JlYXNlcyB1bnRpbCBpdCByZWFjaGVzIGEKICAgICAgbWF4aW11bSB2YWx1ZSBvZiAyXjMyLTEgKDQyOTQ5NjcyOTUgZGVjaW1hbCksIHdoZW4gaXQKICAgICAgd3JhcHMgYXJvdW5kIGFuZCBzdGFydHMgaW5jcmVhc2luZyBhZ2FpbiBmcm9tIHplcm8uCgogICAgICBDb3VudGVycyBoYXZlIG5vIGRlZmluZWQgJ2luaXRpYWwnIHZhbHVlLCBhbmQgdGh1cywgYQogICAgICBzaW5nbGUgdmFsdWUgb2YgYSBjb3VudGVyIGhhcyAoaW4gZ2VuZXJhbCkgbm8gaW5mb3JtYXRpb24KICAgICAgY29udGVudC4gIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCiAgICAgIHZhbHVlIG5vcm1hbGx5IG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZQogICAgICBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIHNwZWNpZmllZCBpbiB0aGUKICAgICAgZGVzY3JpcHRpb24gb2YgYSBzY2hlbWEgbm9kZSB1c2luZyB0aGlzIHR5cGUuICBJZiBzdWNoCiAgICAgIG90aGVyIHRpbWVzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHRoZSBjcmVhdGlvbiBvZgogICAgICBhIHNjaGVtYSBub2RlIG9mIHR5cGUgY291bnRlcjMyIGF0IHRpbWVzIG90aGVyIHRoYW4KICAgICAgcmUtaW5pdGlhbGl6YXRpb24sIHRoZW4gYSBjb3JyZXNwb25kaW5nIHNjaGVtYSBub2RlCiAgICAgIHNob3VsZCBiZSBkZWZpbmVkLCB3aXRoIGFuIGFwcHJvcHJpYXRlIHR5cGUsIHRvIGluZGljYXRlCiAgICAgIHRoZSBsYXN0IGRpc2NvbnRpbnVpdHkuCgogICAgICBUaGUgY291bnRlcjMyIHR5cGUgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjb25maWd1cmF0aW9uCiAgICAgIHNjaGVtYSBub2Rlcy4gIEEgZGVmYXVsdCBzdGF0ZW1lbnQgU0hPVUxEIE5PVCBiZSB1c2VkIGluCiAgICAgIGNvbWJpbmF0aW9uIHdpdGggdGhlIHR5cGUgY291bnRlcjMyLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIENvdW50ZXIzMiB0eXBlIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyNTc4OiBTdHJ1Y3R1cmUgb2YgTWFuYWdlbWVudCBJbmZvcm1hdGlvbiBWZXJzaW9uIDIKICAgICAgICAgICAgICAgIChTTUl2MikiOwogIH0KCiAgdHlwZWRlZiB6ZXJvLWJhc2VkLWNvdW50ZXIzMiB7CiAgICB0eXBlIHlhbmc6Y291bnRlcjMyOwogICAgZGVmYXVsdCAiMCI7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgemVyby1iYXNlZC1jb3VudGVyMzIgdHlwZSByZXByZXNlbnRzIGEgY291bnRlcjMyCiAgICAgIHRoYXQgaGFzIHRoZSBkZWZpbmVkICdpbml0aWFsJyB2YWx1ZSB6ZXJvLgoKICAgICAgQSBzY2hlbWEgbm9kZSBvZiB0aGlzIHR5cGUgd2lsbCBiZSBzZXQgdG8gemVybyAoMCkgb24gY3JlYXRpb24KICAgICAgYW5kIHdpbGwgdGhlcmVhZnRlciBpbmNyZWFzZSBtb25vdG9uaWNhbGx5IHVudGlsIGl0IHJlYWNoZXMKICAgICAgYSBtYXhpbXVtIHZhbHVlIG9mIDJeMzItMSAoNDI5NDk2NzI5NSBkZWNpbWFsKSwgd2hlbiBpdAogICAgICB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIFByb3ZpZGVkIHRoYXQgYW4gYXBwbGljYXRpb24gZGlzY292ZXJzIGEgbmV3IHNjaGVtYSBub2RlCiAgICAgIG9mIHRoaXMgdHlwZSB3aXRoaW4gdGhlIG1pbmltdW0gdGltZSB0byB3cmFwLCBpdCBjYW4gdXNlIHRoZQogICAgICAnaW5pdGlhbCcgdmFsdWUgYXMgYSBkZWx0YS4gIEl0IGlzIGltcG9ydGFudCBmb3IgYSBtYW5hZ2VtZW50CiAgICAgIHN0YXRpb24gdG8gYmUgYXdhcmUgb2YgdGhpcyBtaW5pbXVtIHRpbWUgYW5kIHRoZSBhY3R1YWwgdGltZQogICAgICBiZXR3ZWVuIHBvbGxzLCBhbmQgdG8gZGlzY2FyZCBkYXRhIGlmIHRoZSBhY3R1YWwgdGltZSBpcyB0b28KICAgICAgbG9uZyBvciB0aGVyZSBpcyBubyBkZWZpbmVkIG1pbmltdW0gdGltZS4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBaZXJvQmFzZWRDb3VudGVyMzIgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgICJSRkMgNDUwMjogUmVtb3RlIE5ldHdvcmsgTW9uaXRvcmluZyBNYW5hZ2VtZW50IEluZm9ybWF0aW9uCiAgICAgICAgICAgICAgICAgQmFzZSBWZXJzaW9uIDIiOwogIH0KCiAgdHlwZWRlZiBjb3VudGVyNjQgewogICAgdHlwZSB1aW50NjQ7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgY291bnRlcjY0IHR5cGUgcmVwcmVzZW50cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyCiAgICAgIHRoYXQgbW9ub3RvbmljYWxseSBpbmNyZWFzZXMgdW50aWwgaXQgcmVhY2hlcyBhCiAgICAgIG1heGltdW0gdmFsdWUgb2YgMl42NC0xICgxODQ0Njc0NDA3MzcwOTU1MTYxNSBkZWNpbWFsKSwKICAgICAgd2hlbiBpdCB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIENvdW50ZXJzIGhhdmUgbm8gZGVmaW5lZCAnaW5pdGlhbCcgdmFsdWUsIGFuZCB0aHVzLCBhCiAgICAgIHNpbmdsZSB2YWx1ZSBvZiBhIGNvdW50ZXIgaGFzIChpbiBnZW5lcmFsKSBubyBpbmZvcm1hdGlvbgogICAgICBjb250ZW50LiAgRGlzY29udGludWl0aWVzIGluIHRoZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcKICAgICAgdmFsdWUgbm9ybWFsbHkgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlCiAgICAgIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgc3BlY2lmaWVkIGluIHRoZQogICAgICBkZXNjcmlwdGlvbiBvZiBhIHNjaGVtYSBub2RlIHVzaW5nIHRoaXMgdHlwZS4gIElmIHN1Y2gKICAgICAgb3RoZXIgdGltZXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgdGhlIGNyZWF0aW9uIG9mCiAgICAgIGEgc2NoZW1hIG5vZGUgb2YgdHlwZSBjb3VudGVyNjQgYXQgdGltZXMgb3RoZXIgdGhhbgogICAgICByZS1pbml0aWFsaXphdGlvbiwgdGhlbiBhIGNvcnJlc3BvbmRpbmcgc2NoZW1hIG5vZGUKICAgICAgc2hvdWxkIGJlIGRlZmluZWQsIHdpdGggYW4gYXBwcm9wcmlhdGUgdHlwZSwgdG8gaW5kaWNhdGUKICAgICAgdGhlIGxhc3QgZGlzY29udGludWl0eS4KCiAgICAgIFRoZSBjb3VudGVyNjQgdHlwZSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24KICAgICAgc2NoZW1hIG5vZGVzLiAgQSBkZWZhdWx0IHN0YXRlbWVudCBTSE9VTEQgTk9UIGJlIHVzZWQgaW4KICAgICAgY29tYmluYXRpb24gd2l0aCB0aGUgdHlwZSBjb3VudGVyNjQuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgQ291bnRlcjY0IHR5cGUgb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDI1Nzg6IFN0cnVjdHVyZSBvZiBNYW5hZ2VtZW50IEluZm9ybWF0aW9uIFZlcnNpb24gMgogICAgICAgICAgICAgICAgKFNNSXYyKSI7CiAgfQoKICB0eXBlZGVmIHplcm8tYmFzZWQtY291bnRlcjY0IHsKICAgIHR5cGUgeWFuZzpjb3VudGVyNjQ7CiAgICBkZWZhdWx0ICIwIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSB6ZXJvLWJhc2VkLWNvdW50ZXI2NCB0eXBlIHJlcHJlc2VudHMgYSBjb3VudGVyNjQgdGhhdAogICAgICBoYXMgdGhlIGRlZmluZWQgJ2luaXRpYWwnIHZhbHVlIHplcm8uCgogICAgICBBIHNjaGVtYSBub2RlIG9mIHRoaXMgdHlwZSB3aWxsIGJlIHNldCB0byB6ZXJvICgwKSBvbiBjcmVhdGlvbgogICAgICBhbmQgd2lsbCB0aGVyZWFmdGVyIGluY3JlYXNlIG1vbm90b25pY2FsbHkgdW50aWwgaXQgcmVhY2hlcwogICAgICBhIG1heGltdW0gdmFsdWUgb2YgMl42NC0xICgxODQ0Njc0NDA3MzcwOTU1MTYxNSBkZWNpbWFsKSwKICAgICAgd2hlbiBpdCB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIFByb3ZpZGVkIHRoYXQgYW4gYXBwbGljYXRpb24gZGlzY292ZXJzIGEgbmV3IHNjaGVtYSBub2RlCiAgICAgIG9mIHRoaXMgdHlwZSB3aXRoaW4gdGhlIG1pbmltdW0gdGltZSB0byB3cmFwLCBpdCBjYW4gdXNlIHRoZQogICAgICAnaW5pdGlhbCcgdmFsdWUgYXMgYSBkZWx0YS4gIEl0IGlzIGltcG9ydGFudCBmb3IgYSBtYW5hZ2VtZW50CiAgICAgIHN0YXRpb24gdG8gYmUgYXdhcmUgb2YgdGhpcyBtaW5pbXVtIHRpbWUgYW5kIHRoZSBhY3R1YWwgdGltZQogICAgICBiZXR3ZWVuIHBvbGxzLCBhbmQgdG8gZGlzY2FyZCBkYXRhIGlmIHRoZSBhY3R1YWwgdGltZSBpcyB0b28KICAgICAgbG9uZyBvciB0aGVyZSBpcyBubyBkZWZpbmVkIG1pbmltdW0gdGltZS4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBaZXJvQmFzZWRDb3VudGVyNjQgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyODU2OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBBZGRpdGlvbmFsIEhpZ2ggQ2FwYWNpdHkKICAgICAgICAgICAgICAgIERhdGEgVHlwZXMiOwogIH0KCiAgdHlwZWRlZiBnYXVnZTMyIHsKICAgIHR5cGUgdWludDMyOwogICAgZGVzY3JpcHRpb24KICAgICAiVGhlIGdhdWdlMzIgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHdoaWNoCiAgICAgIG1heSBpbmNyZWFzZSBvciBkZWNyZWFzZSwgYnV0IHNoYWxsIG5ldmVyIGV4Y2VlZCBhIG1heGltdW0KICAgICAgdmFsdWUsIG5vciBmYWxsIGJlbG93IGEgbWluaW11bSB2YWx1ZS4gIFRoZSBtYXhpbXVtIHZhbHVlCiAgICAgIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMl4zMi0xICg0Mjk0OTY3Mjk1IGRlY2ltYWwpLCBhbmQKICAgICAgdGhlIG1pbmltdW0gdmFsdWUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLiAgVGhlIHZhbHVlIG9mCiAgICAgIGEgZ2F1Z2UzMiBoYXMgaXRzIG1heGltdW0gdmFsdWUgd2hlbmV2ZXIgdGhlIGluZm9ybWF0aW9uCiAgICAgIGJlaW5nIG1vZGVsZWQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGl0cyBtYXhpbXVtCiAgICAgIHZhbHVlLCBhbmQgaGFzIGl0cyBtaW5pbXVtIHZhbHVlIHdoZW5ldmVyIHRoZSBpbmZvcm1hdGlvbgogICAgICBiZWluZyBtb2RlbGVkIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBpdHMgbWluaW11bSB2YWx1ZS4KICAgICAgSWYgdGhlIGluZm9ybWF0aW9uIGJlaW5nIG1vZGVsZWQgc3Vic2VxdWVudGx5IGRlY3JlYXNlcwogICAgICBiZWxvdyAoaW5jcmVhc2VzIGFib3ZlKSB0aGUgbWF4aW11bSAobWluaW11bSkgdmFsdWUsIHRoZQogICAgICBnYXVnZTMyIGFsc28gZGVjcmVhc2VzIChpbmNyZWFzZXMpLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIEdhdWdlMzIgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgZ2F1Z2U2NCB7CiAgICB0eXBlIHVpbnQ2NDsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBnYXVnZTY0IHR5cGUgcmVwcmVzZW50cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB3aGljaAogICAgICBtYXkgaW5jcmVhc2Ugb3IgZGVjcmVhc2UsIGJ1dCBzaGFsbCBuZXZlciBleGNlZWQgYSBtYXhpbXVtCiAgICAgIHZhbHVlLCBub3IgZmFsbCBiZWxvdyBhIG1pbmltdW0gdmFsdWUuICBUaGUgbWF4aW11bSB2YWx1ZQogICAgICBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDJeNjQtMSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUpLCBhbmQKICAgICAgdGhlIG1pbmltdW0gdmFsdWUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLiAgVGhlIHZhbHVlIG9mCiAgICAgIGEgZ2F1Z2U2NCBoYXMgaXRzIG1heGltdW0gdmFsdWUgd2hlbmV2ZXIgdGhlIGluZm9ybWF0aW9uCiAgICAgIGJlaW5nIG1vZGVsZWQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGl0cyBtYXhpbXVtCiAgICAgIHZhbHVlLCBhbmQgaGFzIGl0cyBtaW5pbXVtIHZhbHVlIHdoZW5ldmVyIHRoZSBpbmZvcm1hdGlvbgogICAgICBiZWluZyBtb2RlbGVkIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBpdHMgbWluaW11bSB2YWx1ZS4KICAgICAgSWYgdGhlIGluZm9ybWF0aW9uIGJlaW5nIG1vZGVsZWQgc3Vic2VxdWVudGx5IGRlY3JlYXNlcwogICAgICBiZWxvdyAoaW5jcmVhc2VzIGFib3ZlKSB0aGUgbWF4aW11bSAobWluaW11bSkgdmFsdWUsIHRoZQogICAgICBnYXVnZTY0IGFsc28gZGVjcmVhc2VzIChpbmNyZWFzZXMpLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIENvdW50ZXJCYXNlZEdhdWdlNjQgU01JdjIgdGV4dHVhbCBjb252ZW50aW9uIGRlZmluZWQKICAgICAgaW4gUkZDIDI4NTYiOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyODU2OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBBZGRpdGlvbmFsIEhpZ2ggQ2FwYWNpdHkKICAgICAgICAgICAgICAgIERhdGEgVHlwZXMiOwogIH0KCiAgLyoqKiBjb2xsZWN0aW9uIG9mIGlkZW50aWZpZXItcmVsYXRlZCB0eXBlcyAqKiovCgogIHR5cGVkZWYgb2JqZWN0LWlkZW50aWZpZXIgewogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICcoKFswLTFdKFwuWzEtM10/WzAtOV0pKXwoMlwuKDB8KFsxLTldXGQqKSkpKScKICAgICAgICAgICAgKyAnKFwuKDB8KFsxLTldXGQqKSkpKic7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgb2JqZWN0LWlkZW50aWZpZXIgdHlwZSByZXByZXNlbnRzIGFkbWluaXN0cmF0aXZlbHkKICAgICAgYXNzaWduZWQgbmFtZXMgaW4gYSByZWdpc3RyYXRpb24taGllcmFyY2hpY2FsLW5hbWUgdHJlZS4KCiAgICAgIFZhbHVlcyBvZiB0aGlzIHR5cGUgYXJlIGRlbm90ZWQgYXMgYSBzZXF1ZW5jZSBvZiBudW1lcmljYWwKICAgICAgbm9uLW5lZ2F0aXZlIHN1Yi1pZGVudGlmaWVyIHZhbHVlcy4gIEVhY2ggc3ViLWlkZW50aWZpZXIKICAgICAgdmFsdWUgTVVTVCBOT1QgZXhjZWVkIDJeMzItMSAoNDI5NDk2NzI5NSkuICBTdWItaWRlbnRpZmllcnMKICAgICAgYXJlIHNlcGFyYXRlZCBieSBzaW5nbGUgZG90cyBhbmQgd2l0aG91dCBhbnkgaW50ZXJtZWRpYXRlCiAgICAgIHdoaXRlc3BhY2UuCgogICAgICBUaGUgQVNOLjEgc3RhbmRhcmQgcmVzdHJpY3RzIHRoZSB2YWx1ZSBzcGFjZSBvZiB0aGUgZmlyc3QKICAgICAgc3ViLWlkZW50aWZpZXIgdG8gMCwgMSwgb3IgMi4gIEZ1cnRoZXJtb3JlLCB0aGUgdmFsdWUgc3BhY2UKICAgICAgb2YgdGhlIHNlY29uZCBzdWItaWRlbnRpZmllciBpcyByZXN0cmljdGVkIHRvIHRoZSByYW5nZQogICAgICAwIHRvIDM5IGlmIHRoZSBmaXJzdCBzdWItaWRlbnRpZmllciBpcyAwIG9yIDEuICBGaW5hbGx5LAogICAgICB0aGUgQVNOLjEgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBhbiBvYmplY3QgaWRlbnRpZmllcgogICAgICBoYXMgYWx3YXlzIGF0IGxlYXN0IHR3byBzdWItaWRlbnRpZmllcnMuICBUaGUgcGF0dGVybgogICAgICBjYXB0dXJlcyB0aGVzZSByZXN0cmljdGlvbnMuCgogICAgICBBbHRob3VnaCB0aGUgbnVtYmVyIG9mIHN1Yi1pZGVudGlmaWVycyBpcyBub3QgbGltaXRlZCwKICAgICAgbW9kdWxlIGRlc2lnbmVycyBzaG91bGQgcmVhbGl6ZSB0aGF0IHRoZXJlIG1heSBiZQogICAgICBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdGljayB3aXRoIHRoZSBTTUl2MiBsaW1pdCBvZiAxMjgKICAgICAgc3ViLWlkZW50aWZpZXJzLgoKICAgICAgVGhpcyB0eXBlIGlzIGEgc3VwZXJzZXQgb2YgdGhlIFNNSXYyIE9CSkVDVCBJREVOVElGSUVSIHR5cGUKICAgICAgc2luY2UgaXQgaXMgbm90IHJlc3RyaWN0ZWQgdG8gMTI4IHN1Yi1pZGVudGlmaWVycy4gIEhlbmNlLAogICAgICB0aGlzIHR5cGUgU0hPVUxEIE5PVCBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgU01JdjIgT0JKRUNUCiAgICAgIElERU5USUZJRVIgdHlwZTsgdGhlIG9iamVjdC1pZGVudGlmaWVyLTEyOCB0eXBlIFNIT1VMRCBiZQogICAgICB1c2VkIGluc3RlYWQuIjsKICAgIHJlZmVyZW5jZQogICAgICJJU085ODM0LTE6IEluZm9ybWF0aW9uIHRlY2hub2xvZ3kgLS0gT3BlbiBTeXN0ZW1zCiAgICAgIEludGVyY29ubmVjdGlvbiAtLSBQcm9jZWR1cmVzIGZvciB0aGUgb3BlcmF0aW9uIG9mIE9TSQogICAgICBSZWdpc3RyYXRpb24gQXV0aG9yaXRpZXM6IEdlbmVyYWwgcHJvY2VkdXJlcyBhbmQgdG9wCiAgICAgIGFyY3Mgb2YgdGhlIEFTTi4xIE9iamVjdCBJZGVudGlmaWVyIHRyZWUiOwogIH0KCiAgdHlwZWRlZiBvYmplY3QtaWRlbnRpZmllci0xMjggewogICAgdHlwZSBvYmplY3QtaWRlbnRpZmllciB7CiAgICAgIHBhdHRlcm4gJ1xkKihcLlxkKil7MSwxMjd9JzsKICAgIH0KICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoaXMgdHlwZSByZXByZXNlbnRzIG9iamVjdC1pZGVudGlmaWVycyByZXN0cmljdGVkIHRvIDEyOAogICAgICBzdWItaWRlbnRpZmllcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgT0JKRUNUIElERU5USUZJRVIgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgeWFuZy1pZGVudGlmaWVyIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgbGVuZ3RoICIxLi5tYXgiOwogICAgICBwYXR0ZXJuICdbYS16QS1aX11bYS16QS1aMC05XC1fLl0qJzsKICAgICAgcGF0dGVybiAnLnwuLnxbXnhYXS4qfC5bXm1NXS4qfC4uW15sTF0uKic7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICAiQSBZQU5HIGlkZW50aWZpZXIgc3RyaW5nIGFzIGRlZmluZWQgYnkgdGhlICdpZGVudGlmaWVyJwogICAgICAgcnVsZSBpbiBTZWN0aW9uIDEyIG9mIFJGQyA2MDIwLiAgQW4gaWRlbnRpZmllciBtdXN0CiAgICAgICBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyIG9yIGFuIHVuZGVyc2NvcmUKICAgICAgIGZvbGxvd2VkIGJ5IGFuIGFyYml0cmFyeSBzZXF1ZW5jZSBvZiBhbHBoYWJldGljIG9yCiAgICAgICBudW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBoeXBoZW5zLCBvciBkb3RzLgoKICAgICAgIEEgWUFORyBpZGVudGlmaWVyIE1VU1QgTk9UIHN0YXJ0IHdpdGggYW55IHBvc3NpYmxlCiAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgbG93ZXJjYXNlIG9yIHVwcGVyY2FzZSBjaGFyYWN0ZXIKICAgICAgIHNlcXVlbmNlICd4bWwnLiI7CiAgICByZWZlcmVuY2UKICAgICAgIlJGQyA2MDIwOiBZQU5HIC0gQSBEYXRhIE1vZGVsaW5nIExhbmd1YWdlIGZvciB0aGUgTmV0d29yawogICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gUHJvdG9jb2wgKE5FVENPTkYpIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiB0eXBlcyByZWxhdGVkIHRvIGRhdGUgYW5kIHRpbWUqKiovCgogIHR5cGVkZWYgZGF0ZS1hbmQtdGltZSB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJ1xkezR9LVxkezJ9LVxkezJ9VFxkezJ9OlxkezJ9OlxkezJ9KFwuXGQrKT8nCiAgICAgICAgICAgICsgJyhafFtcK1wtXVxkezJ9OlxkezJ9KSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgZGF0ZS1hbmQtdGltZSB0eXBlIGlzIGEgcHJvZmlsZSBvZiB0aGUgSVNPIDg2MDEKICAgICAgc3RhbmRhcmQgZm9yIHJlcHJlc2VudGF0aW9uIG9mIGRhdGVzIGFuZCB0aW1lcyB1c2luZyB0aGUKICAgICAgR3JlZ29yaWFuIGNhbGVuZGFyLiAgVGhlIHByb2ZpbGUgaXMgZGVmaW5lZCBieSB0aGUKICAgICAgZGF0ZS10aW1lIHByb2R1Y3Rpb24gaW4gU2VjdGlvbiA1LjYgb2YgUkZDIDMzMzkuCgogICAgICBUaGUgZGF0ZS1hbmQtdGltZSB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZGF0ZVRpbWUgWE1MCiAgICAgIHNjaGVtYSB0eXBlIHdpdGggdGhlIGZvbGxvd2luZyBub3RhYmxlIGV4Y2VwdGlvbnM6CgogICAgICAoYSkgVGhlIGRhdGUtYW5kLXRpbWUgdHlwZSBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSB5ZWFycy4KCiAgICAgIChiKSBUaGUgZGF0ZS1hbmQtdGltZSB0aW1lLW9mZnNldCAtMDA6MDAgaW5kaWNhdGVzIGFuIHVua25vd24KICAgICAgICAgIHRpbWUgem9uZSAoc2VlIFJGQyAzMzM5KSB3aGlsZSAtMDA6MDAgYW5kICswMDowMCBhbmQgWgogICAgICAgICAgYWxsIHJlcHJlc2VudCB0aGUgc2FtZSB0aW1lIHpvbmUgaW4gZGF0ZVRpbWUuCgogICAgICAoYykgVGhlIGNhbm9uaWNhbCBmb3JtYXQgKHNlZSBiZWxvdykgb2YgZGF0YS1hbmQtdGltZSB2YWx1ZXMKICAgICAgICAgIGRpZmZlcnMgZnJvbSB0aGUgY2Fub25pY2FsIGZvcm1hdCB1c2VkIGJ5IHRoZSBkYXRlVGltZSBYTUwKICAgICAgICAgIHNjaGVtYSB0eXBlLCB3aGljaCByZXF1aXJlcyBhbGwgdGltZXMgdG8gYmUgaW4gVVRDIHVzaW5nCiAgICAgICAgICB0aGUgdGltZS1vZmZzZXQgJ1onLgoKICAgICAgVGhpcyB0eXBlIGlzIG5vdCBlcXVpdmFsZW50IHRvIHRoZSBEYXRlQW5kVGltZSB0ZXh0dWFsCiAgICAgIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyIHNpbmNlIFJGQyAzMzM5IHVzZXMgYSBkaWZmZXJlbnQKICAgICAgc2VwYXJhdG9yIGJldHdlZW4gZnVsbC1kYXRlIGFuZCBmdWxsLXRpbWUgYW5kIHByb3ZpZGVzCiAgICAgIGhpZ2hlciByZXNvbHV0aW9uIG9mIHRpbWUtc2VjZnJhYy4KCiAgICAgIFRoZSBjYW5vbmljYWwgZm9ybWF0IGZvciBkYXRlLWFuZC10aW1lIHZhbHVlcyB3aXRoIGEga25vd24gdGltZQogICAgICB6b25lIHVzZXMgYSBudW1lcmljIHRpbWUgem9uZSBvZmZzZXQgdGhhdCBpcyBjYWxjdWxhdGVkIHVzaW5nCiAgICAgIHRoZSBkZXZpY2UncyBjb25maWd1cmVkIGtub3duIG9mZnNldCB0byBVVEMgdGltZS4gIEEgY2hhbmdlIG9mCiAgICAgIHRoZSBkZXZpY2UncyBvZmZzZXQgdG8gVVRDIHRpbWUgd2lsbCBjYXVzZSBkYXRlLWFuZC10aW1lIHZhbHVlcwogICAgICB0byBjaGFuZ2UgYWNjb3JkaW5nbHkuICBTdWNoIGNoYW5nZXMgbWlnaHQgaGFwcGVuIHBlcmlvZGljYWxseQogICAgICBpbiBjYXNlIGEgc2VydmVyIGZvbGxvd3MgYXV0b21hdGljYWxseSBkYXlsaWdodCBzYXZpbmcgdGltZQogICAgICAoRFNUKSB0aW1lIHpvbmUgb2Zmc2V0IGNoYW5nZXMuICBUaGUgY2Fub25pY2FsIGZvcm1hdCBmb3IKICAgICAgZGF0ZS1hbmQtdGltZSB2YWx1ZXMgd2l0aCBhbiB1bmtub3duIHRpbWUgem9uZSAodXN1YWxseQogICAgICByZWZlcnJpbmcgdG8gdGhlIG5vdGlvbiBvZiBsb2NhbCB0aW1lKSB1c2VzIHRoZSB0aW1lLW9mZnNldAogICAgICAtMDA6MDAuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMzMzOTogRGF0ZSBhbmQgVGltZSBvbiB0aGUgSW50ZXJuZXQ6IFRpbWVzdGFtcHMKICAgICAgUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyCiAgICAgIFhTRC1UWVBFUzogWE1MIFNjaGVtYSBQYXJ0IDI6IERhdGF0eXBlcyBTZWNvbmQgRWRpdGlvbiI7CiAgfQoKICB0eXBlZGVmIHRpbWV0aWNrcyB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSB0aW1ldGlja3MgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdGhhdAogICAgICByZXByZXNlbnRzIHRoZSB0aW1lLCBtb2R1bG8gMl4zMiAoNDI5NDk2NzI5NiBkZWNpbWFsKSwgaW4KICAgICAgaHVuZHJlZHRocyBvZiBhIHNlY29uZCBiZXR3ZWVuIHR3byBlcG9jaHMuICBXaGVuIGEgc2NoZW1hCiAgICAgIG5vZGUgaXMgZGVmaW5lZCB0aGF0IHVzZXMgdGhpcyB0eXBlLCB0aGUgZGVzY3JpcHRpb24gb2YKICAgICAgdGhlIHNjaGVtYSBub2RlIGlkZW50aWZpZXMgYm90aCBvZiB0aGUgcmVmZXJlbmNlIGVwb2Nocy4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBUaW1lVGlja3MgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgdGltZXN0YW1wIHsKICAgIHR5cGUgeWFuZzp0aW1ldGlja3M7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgdGltZXN0YW1wIHR5cGUgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2YgYW4gYXNzb2NpYXRlZAogICAgICB0aW1ldGlja3Mgc2NoZW1hIG5vZGUgYXQgd2hpY2ggYSBzcGVjaWZpYyBvY2N1cnJlbmNlCiAgICAgIGhhcHBlbmVkLiAgVGhlIHNwZWNpZmljIG9jY3VycmVuY2UgbXVzdCBiZSBkZWZpbmVkIGluIHRoZQogICAgICBkZXNjcmlwdGlvbiBvZiBhbnkgc2NoZW1hIG5vZGUgZGVmaW5lZCB1c2luZyB0aGlzIHR5cGUuICBXaGVuCiAgICAgIHRoZSBzcGVjaWZpYyBvY2N1cnJlbmNlIG9jY3VycmVkIHByaW9yIHRvIHRoZSBsYXN0IHRpbWUgdGhlCiAgICAgIGFzc29jaWF0ZWQgdGltZXRpY2tzIGF0dHJpYnV0ZSB3YXMgemVybywgdGhlbiB0aGUgdGltZXN0YW1wCiAgICAgIHZhbHVlIGlzIHplcm8uICBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBhbGwgdGltZXN0YW1wIHZhbHVlcwogICAgICB0byBiZSByZXNldCB0byB6ZXJvIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIHRpbWV0aWNrcwogICAgICBhdHRyaWJ1dGUgcmVhY2hlcyA0OTcrIGRheXMgYW5kIHdyYXBzIGFyb3VuZCB0byB6ZXJvLgoKICAgICAgVGhlIGFzc29jaWF0ZWQgdGltZXRpY2tzIHNjaGVtYSBub2RlIG11c3QgYmUgc3BlY2lmaWVkCiAgICAgIGluIHRoZSBkZXNjcmlwdGlvbiBvZiBhbnkgc2NoZW1hIG5vZGUgdXNpbmcgdGhpcyB0eXBlLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIFRpbWVTdGFtcCB0ZXh0dWFsIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiBnZW5lcmljIGFkZHJlc3MgdHlwZXMgKioqLwoKICB0eXBlZGVmIHBoeXMtYWRkcmVzcyB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJyhbMC05YS1mQS1GXXsyfSg6WzAtOWEtZkEtRl17Mn0pKik/JzsKICAgIH0KCiAgICBkZXNjcmlwdGlvbgogICAgICJSZXByZXNlbnRzIG1lZGlhLSBvciBwaHlzaWNhbC1sZXZlbCBhZGRyZXNzZXMgcmVwcmVzZW50ZWQKICAgICAgYXMgYSBzZXF1ZW5jZSBvY3RldHMsIGVhY2ggb2N0ZXQgcmVwcmVzZW50ZWQgYnkgdHdvIGhleGFkZWNpbWFsCiAgICAgIG51bWJlcnMuICBPY3RldHMgYXJlIHNlcGFyYXRlZCBieSBjb2xvbnMuICBUaGUgY2Fub25pY2FsCiAgICAgIHJlcHJlc2VudGF0aW9uIHVzZXMgbG93ZXJjYXNlIGNoYXJhY3RlcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgUGh5c0FkZHJlc3MgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyNTc5OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBTTUl2MiI7CiAgfQoKICB0eXBlZGVmIG1hYy1hZGRyZXNzIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnWzAtOWEtZkEtRl17Mn0oOlswLTlhLWZBLUZdezJ9KXs1fSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgbWFjLWFkZHJlc3MgdHlwZSByZXByZXNlbnRzIGFuIElFRUUgODAyIE1BQyBhZGRyZXNzLgogICAgICBUaGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIHVzZXMgbG93ZXJjYXNlIGNoYXJhY3RlcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgTWFjQWRkcmVzcyB0ZXh0dWFsIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiSUVFRSA4MDI6IElFRUUgU3RhbmRhcmQgZm9yIExvY2FsIGFuZCBNZXRyb3BvbGl0YW4gQXJlYQogICAgICAgICAgICAgICAgTmV0d29ya3M6IE92ZXJ2aWV3IGFuZCBBcmNoaXRlY3R1cmUKICAgICAgUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiBYTUwtc3BlY2lmaWMgdHlwZXMgKioqLwoKICB0eXBlZGVmIHhwYXRoMS4wIHsKICAgIHR5cGUgc3RyaW5nOwogICAgZGVzY3JpcHRpb24KICAgICAiVGhpcyB0eXBlIHJlcHJlc2VudHMgYW4gWFBBVEggMS4wIGV4cHJlc3Npb24uCgogICAgICBXaGVuIGEgc2NoZW1hIG5vZGUgaXMgZGVmaW5lZCB0aGF0IHVzZXMgdGhpcyB0eXBlLCB0aGUKICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIHNjaGVtYSBub2RlIE1VU1Qgc3BlY2lmeSB0aGUgWFBhdGgKICAgICAgY29udGV4dCBpbiB3aGljaCB0aGUgWFBhdGggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuIjsKICAgIHJlZmVyZW5jZQogICAgICJYUEFUSDogWE1MIFBhdGggTGFuZ3VhZ2UgKFhQYXRoKSBWZXJzaW9uIDEuMCI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2Ygc3RyaW5nIHR5cGVzICoqKi8KCiAgdHlwZWRlZiBoZXgtc3RyaW5nIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnKFswLTlhLWZBLUZdezJ9KDpbMC05YS1mQS1GXXsyfSkqKT8nOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAiQSBoZXhhZGVjaW1hbCBzdHJpbmcgd2l0aCBvY3RldHMgcmVwcmVzZW50ZWQgYXMgaGV4IGRpZ2l0cwogICAgICBzZXBhcmF0ZWQgYnkgY29sb25zLiAgVGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiB1c2VzCiAgICAgIGxvd2VyY2FzZSBjaGFyYWN0ZXJzLiI7CiAgfQoKICB0eXBlZGVmIHV1aWQgewogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS0nCiAgICAgICAgICAgICsgJ1swLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJBIFVuaXZlcnNhbGx5IFVuaXF1ZSBJRGVudGlmaWVyIGluIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAgZGVmaW5lZCBpbiBSRkMgNDEyMi4gIFRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gdXNlcwogICAgICBsb3dlcmNhc2UgY2hhcmFjdGVycy4KCiAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFVVSUQgaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9uOgogICAgICBmODFkNGZhZS03ZGVjLTExZDAtYTc2NS0wMGEwYzkxZTZiZjYKICAgICAgIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNDEyMjogQSBVbml2ZXJzYWxseSBVbmlxdWUgSURlbnRpZmllciAoVVVJRCkgVVJOCiAgICAgICAgICAgICAgICBOYW1lc3BhY2UiOwogIH0KCiAgdHlwZWRlZiBkb3R0ZWQtcXVhZCB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4KICAgICAgICAnKChbMC05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pXC4pezN9JwogICAgICArICcoWzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICAiQW4gdW5zaWduZWQgMzItYml0IG51bWJlciBleHByZXNzZWQgaW4gdGhlIGRvdHRlZC1xdWFkCiAgICAgICBub3RhdGlvbiwgaS5lLiwgZm91ciBvY3RldHMgd3JpdHRlbiBhcyBkZWNpbWFsIG51bWJlcnMKICAgICAgIGFuZCBzZXBhcmF0ZWQgd2l0aCB0aGUgJy4nIChmdWxsIHN0b3ApIGNoYXJhY3Rlci4iOwogIH0KfQo=
o-ran-smo-teiv-cloud urn:o-ran:smo-teiv-cloud CLOUD [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNsb3VkIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jbG91ZCI7CiAgICBwcmVmaXggb3ItdGVpdi1jbG91ZDsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gewogICAgICAgIHByZWZpeCBnZW87CiAgICAgICAgcmVmZXJlbmNlICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgICB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBDbG91ZCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gQ0xPVUQgZG9tYWluLCB3aGljaCBjb21wcmlzZXMgY2xvdWQgaW5mcmFzdHJ1Y3R1cmUgYW5kCiAgICAgICAgZGVwbG95bWVudCBhc3BlY3RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFkZGVkIGdyb3VwaW5ncywgT3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycCBvciBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgb2JqZWN0cy4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA3LTE1IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcmV2aXNpb24gYWxpZ25zIE8tUkFOIFdvcmsgR3JvdXAgMTAgU3RhZ2UgMiBTcGVjaWZpY2F0aW9uIChPLVJBTi5XRzEwLlRFJklWLUNJTUkuMC1SMDA0LnYwMi4wMCkiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIENMT1VEOwoKICAgIGxpc3QgQ2xvdWRpZmllZE5GIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBSQU4gTmV0d29yayBGdW5jdGlvbiBzb2Z0d2FyZSB0aGF0IGlzIGRlcGxveWVkIGluIHRoZSBPLUNsb3VkIHZpYSBvbmUgb3IgbW9yZSBORiBEZXBsb3ltZW50cy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWRpZmllZCBORiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5GRGVwbG95bWVudCB7CiAgICAgICAgZGVzY3JpcHRpb24gIkEgc29mdHdhcmUgZGVwbG95bWVudCBvbiBPLUNsb3VkIHJlc291cmNlcyB0aGF0IHJlYWxpemVzLCBhbGwgb3IgcGFydCBvZiwgYSBDbG91ZGlmaWVkIE5GLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBORiBEZXBsb3ltZW50IjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0Nsb3VkTmFtZXNwYWNlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiT0Nsb3VkTmFtZXNwYWNlIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIGlzb2xhdGluZwogICAgICAgIGdyb3VwcyBvZiByZXNvdXJjZXMgd2l0aGluIGEgc2luZ2xlIGNsdXN0ZXIuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIENsb3VkIE5hbWVzcGFjZSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5vZGVDbHVzdGVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBOb2RlQ2x1c3RlciBtYW5hZ2VzIGEgY29sbGVjdGlvbiBvZiBOb2Rlcy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgTm9kZSBDbHVzdGVyIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0Nsb3VkU2l0ZSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgdGhlIGluZnJhc3RydWN0dXJlIHRoYXQKICAgICAgICBob3N0cyB0aGUgTkYgRGVwbG95bWVudC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWQgU2l0ZSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwogICAgICAgIH0KICAgIH0KCgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBDTE9VRElGSUVETkZfQ09NUFJJU0VTX05GREVQTE9ZTUVOVCB7IC8vIDEgdG8gMS4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGNvbXByaXNlZC1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2xvdWRpZmllZCBORiBjb21wcmlzZXMgb2YgdGhlc2UgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQ2xvdWRpZmllZE5GOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAxOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBjb21wcmlzZWQtYnktY2xvdWRpZmllZE5GIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgcGFydCBvZiBDbG91ZGlmaWVkIE5GLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX0RFUExPWUVEX09OX09DTE9VRE5BTUVTUEFDRSB7IC8vIDEuLm4gdG8gMS4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGRlcGxveWVkLW9uLW9jbG91ZE5hbWVzcGFjZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IGRlcGxveWVkIG9uIE8tQ2xvdWQgTmFtZXNwYWNlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgZGVwbG95ZWQtbkZEZXBsb3ltZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk9DbG91ZCBOYW1lc3BhY2UgZGVwbG95cyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBPQ2xvdWROYW1lc3BhY2U7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgT0NMT1VETkFNRVNQQUNFX0RFUExPWUVEX09OX05PREVDTFVTVEVSIHsgLy8gMS4ubiB0byAxCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGRlcGxveWVkLW9uLW5vZGVDbHVzdGVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tQ2xvdWQgTmFtZXNwYWNlIGRlcGxveWVkIG9uIE5vZGUgQ2x1c3Rlci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0Nsb3VkTmFtZXNwYWNlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGRlcGxveWVkLW9jbG91ZE5hbWVzcGFjZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOb2RlIENsdXN0ZXIgZGVwbG95cyBPLUNsb3VkIE5hbWVzcGFjZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTm9kZUNsdXN0ZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTk9ERUNMVVNURVJfTE9DQVRFRF9BVF9PQ0xPVURTSVRFIHsgLy8gMS4ubiB0byAxLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbG9jYXRlZC1hdC1vY2xvdWRTaXRlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5vZGUgQ2x1c3RlciBsb2NhdGVkIGF0IE8tQ2xvdWQgU2l0ZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTm9kZUNsdXN0ZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgbG9jYXRpb24tb2Ytb25vZGVDbHVzdGVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tQ2xvdWQgU2l0ZSBpcyBsb2NhdGlvbiBvZiBOb2RlIENsdXN0ZXIuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE9DbG91ZFNpdGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQp9
o-ran-smo-teiv-common-yang-extensions urn:o-ran:smo-teiv-common-yang-extensions \N [] 2024-05-24 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewoKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogIHByZWZpeCBvci10ZWl2LXlleHQ7CgogIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogIGRlc2NyaXB0aW9uCiAgIlRvcG9sb2d5IGFuZCBJbnZlbnRvcnkgWUFORyBleHRlbnNpb25zIG1vZGVsCgogIFRoaXMgbW9kZWwgY29udGFpbnMgZXh0ZW5zaW9ucyB0byB0aGUgWUFORyBsYW5ndWFnZSB0aGF0IHRvcG9sb2d5IGFuZAogIGludmVudG9yeSBtb2RlbHMgd2lsbCB1c2UgdG8gZGVmaW5lIGFuZCBhbm5vdGF0ZSB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIGV4dGVuc2lvbiBiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJEZWZpbmVzIGEgYmktZGlyZWN0aW9uYWwgcmVsYXRpb25zaGlwIGluIHRoZSB0b3BvbG9neS4KCiAgICAgICAgICAgIEEgYmktZGlyZWN0aW9uYWwtYXNzb2NpYXRpb24gKEJEQSkgaXMgYSByZWxhdGlvbnNoaXAgY29tcHJpc2luZyBvZgogICAgICAgICAgICBhbiBBLXNpZGUgYW5kIGEgQi1zaWRlLiBUaGUgQS1zaWRlIGlzIGNvbnNpZGVyZWQgdGhlIG9yaWdpbmF0aW5nCiAgICAgICAgICAgIHNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcDsgdGhlIEItc2lkZSBpcyBjb25zaWRlcmVkIHRoZSB0ZXJtaW5hdGluZwogICAgICAgICAgICBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBvcmRlciBvZiBBLXNpZGUgYW5kIEItc2lkZSBpcyBvZgogICAgICAgICAgICBpbXBvcnRhbmNlIGFuZCBNVVNUIE5PVCBiZSBjaGFuZ2VkIG9uY2UgZGVmaW5lZC4KCiAgICAgICAgICAgIEJvdGggQS1zaWRlIGFuZCBCLXNpZGUgYXJlIGRlZmluZWQgb24gYSB0eXBlLCBhbmQgYXJlIGdpdmVuIGEgcm9sZS4KICAgICAgICAgICAgQSB0eXBlIG1heSBoYXZlIG11bHRpcGxlIG9yaWdpbmF0aW5nIGFuZC9vciB0ZXJtaW5hdGluZyBzaWRlcyBvZiBhCiAgICAgICAgICAgIHJlbGF0aW9uc2hpcCwgYWxsIGRpc3Rpbmd1aXNoZWQgYnkgcm9sZSBuYW1lLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlICdtb2R1bGUnIHN0YXRlbWVudC4KICAgICAgICAgICAgTXVsdGlwbGUgJ2JpLWRpcmVjdGlvbmFsLXRvcG9sb2d5LXJlbGF0aW9uc2hpcCcgc3RhdGVtZW50cyBhcmUKICAgICAgICAgICAgYWxsb3dlZCBwZXIgcGFyZW50IHN0YXRlbWVudC4KCiAgICAgICAgICAgIFN1YnN0YXRlbWVudHMgdG8gdGhlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIGRlZmluZQogICAgICAgICAgICB0aGUgQS1zaWRlIGFuZCB0aGUgQi1zaWRlLCByZXNwZWN0aXZlbHksIGFuZCBvcHRpb25hbGx5IHByb3BlcnRpZXMKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcC4gRGF0YSBub2RlcyBvZiB0eXBlcyAnbGVhZicgYW5kICdsZWFmLWxpc3QnIGFyZQogICAgICAgICAgICB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIE9uZSBvZiB0aGUgZGF0YSBub2RlcyBNVVNUIGJlIGFubm90YXRlZCB3aXRoCiAgICAgICAgICAgIHRoZSAnYS1zaWRlJyBleHRlbnNpb247IGFub3RoZXIgZGF0YSBub2RlIE1VU1QgYmUgYW5ub3RhdGVkIHdpdGggdGhlCiAgICAgICAgICAgICdiLXNpZGUnIGV4dGVuc2lvbi4gT3RoZXIgZGF0YSBub2RlcyBkZWZpbmUgcHJvcGVydGllcyBvZiB0aGUKICAgICAgICAgICAgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSByZWxhdGlvbnNoaXAgbmFtZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIG5hbWVzcGFjZSBvZiB0aGUgZGVjbGFyaW5nIG1vZHVsZSBhbmQgTVVTVCBiZQogICAgICAgICAgICB1bmlxdWUgd2l0aGluIHRoZSBzY29wZS4iOwoKICAgICAgICBhcmd1bWVudCByZWxhdGlvbnNoaXBOYW1lOwogICAgfQoKICAgIGV4dGVuc2lvbiBhU2lkZSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkRlZmluZXMgdGhlIEEtc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICAgICAgIHN0YXRlbWVudCwgd2hpY2ggaXRzZWxmIG11c3QgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICAgICAgJ2luc3RhbmNlLWlkZW50aWZpZXInLiBDb25zdHJhaW50cyBNQVkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQKICAgICAgICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUKICAgICAgICAgICAgb2YgdGhlIHJvbGUgb2YgdGhlIEEtc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgbmFtZSBvZiB0aGUgcm9sZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEEtc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlCiAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgICAgICAgV2hpbGUgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgZG9lcyBub3QgcmVzdWx0IGluIGEgcHJvcGVydHkKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICAgICAgIGJldHdlZW4gcHJvcGVydGllcyBvZiBhIHR5cGUsIGFuZCByb2xlcyBvZiBhIHJlbGF0aW9uc2hpcCBvbiB0aGUKICAgICAgICAgICAgdHlwZS4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQS1zaWRlIHJlc2lkZXMuCiAgICAgICAgICAgIElmIHRoZSB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlCiAgICAgICAgICAgIHByZWZpeGVkLCBhbmQgYSBjb3JyZXNwb25kaW5nICdpbXBvcnQnIHN0YXRlbWVudCBiZSB1c2VkIHRvIGRlY2xhcmUKICAgICAgICAgICAgdGhlIHByZWZpeC4iOwoKICAgICAgICBhcmd1bWVudCBhU2lkZVR5cGU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGJTaWRlIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiRGVmaW5lcyB0aGUgQi1zaWRlIG9mIGEgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgYSAnbGVhZicgb3IgJ2xlYWYtbGlzdCcKICAgICAgICAgICAgc3RhdGVtZW50LCB3aGljaCBpdHNlbGYgbXVzdCBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUKICAgICAgICAgICAgJ3VuaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudC4KCiAgICAgICAgICAgIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgTVVTVCBiZQogICAgICAgICAgICAnaW5zdGFuY2UtaWRlbnRpZmllcicuIENvbnN0cmFpbnRzIE1BWSBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHBhcmVudAogICAgICAgICAgICAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgdG8gZW5mb3JjZSBjYXJkaW5hbGl0eS4KCiAgICAgICAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGlzIHVzZWQgYXMgbmFtZQogICAgICAgICAgICBvZiB0aGUgcm9sZSBvZiB0aGUgQi1zaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBuYW1lIG9mIHRoZSByb2xlCiAgICAgICAgICAgIGlzIHNjb3BlZCB0byB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIGlzIGRlZmluZWQgYW5kIE1VU1QgYmUKICAgICAgICAgICAgdW5pcXVlIHdpdGhpbiB0aGUgc2NvcGUuCgogICAgICAgICAgICBXaGlsZSB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBkb2VzIG5vdCByZXN1bHQgaW4gYSBwcm9wZXJ0eQogICAgICAgICAgICBvZiB0aGUgcmVsYXRpb25zaGlwLCBpdCBpcyBSRUNPTU1FTkRFRCB0byBhdm9pZCB1c2luZyB0aGUgbmFtZSBvZiBhbgogICAgICAgICAgICBleGlzdGluZyB0eXBlIHByb3BlcnR5IGFzIHJvbGUgbmFtZSB0byBhdm9pZCBwb3RlbnRpYWwgYW1iaWd1aXRpZXMKICAgICAgICAgICAgYmV0d2VlbiBwcm9wZXJ0aWVzIG9mIGEgdHlwZSwgYW5kIHJvbGVzIG9mIGEgcmVsYXRpb25zaGlwIG9uIHRoZQogICAgICAgICAgICB0eXBlLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBCLXNpZGUgcmVzaWRlcy4KICAgICAgICAgICAgSWYgdGhlIHR5cGUgaXMgZGVjbGFyZWQgaW4gYW5vdGhlciBtb2R1bGUsIHRoZSB0eXBlIG11c3QgYmUKICAgICAgICAgICAgcHJlZml4ZWQsIGFuZCBhIGNvcnJlc3BvbmRpbmcgJ2ltcG9ydCcgc3RhdGVtZW50IGJlIHVzZWQgdG8gZGVjbGFyZQogICAgICAgICAgICB0aGUgcHJlZml4LiI7CgogICAgICAgIGFyZ3VtZW50IGJTaWRlVHlwZTsKICAgIH0KCiAgICBleHRlbnNpb24gZG9tYWluIHsKICAgICAgICBkZXNjcmlwdGlvbiAiS2V5d29yZCB1c2VkIHRvIGNhcnJ5IGRvbWFpbiBpbmZvcm1hdGlvbi4iOwogICAgICAgIGFyZ3VtZW50IGRvbWFpbk5hbWU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGxhYmVsIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGxhYmVsIGNhbiBiZSB1c2VkIHRvIGdpdmUgbW9kdWxlcyBhbmQgc3VibW9kdWxlcyBhIHNlbWFudGljCiAgICAgICAgICAgIHZlcnNpb24sIGluIGFkZGl0aW9uIHRvIHRoZWlyIHJldmlzaW9uLgoKICAgICAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbGFiZWwgaXMgJ3gueS56JyAtIGV4cHJlc3NlZCBhcyBwYXR0ZXJuLCBpdCBpcwogICAgICAgICAgICBbMC05XStcXC5bMC05XStcXC5bMC05XSsKCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSByZXZpc2lvbiBzdGF0ZW1lbnQuCiAgICAgICAgICAgIFplcm8gb3Igb25lIHJldmlzaW9uIGxhYmVsIHN0YXRlbWVudHMgcGVyIHBhcmVudCBzdGF0ZW1lbnQgYXJlCiAgICAgICAgICAgIGFsbG93ZWQuCgogICAgICAgICAgICBSZXZpc2lvbiBsYWJlbHMgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCBhbGwgcmV2aXNpb25zIG9mIGEgbW9kdWxlIG9yCiAgICAgICAgICAgIHN1Ym1vZHVsZS4iOwoKICAgICAgICBhcmd1bWVudCBzZW12ZXJzaW9uOwogICAgfQp9
-o-ran-smo-teiv-common-yang-types urn:o-ran:smo-teiv-common-yang-types \N [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICBwcmVmaXggb3ItdGVpdi10eXBlczsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHJlLXVzYWJsZSBkYXRhIHR5cGVzIHRoYXQgdG9wb2xvZ3kgYW5kIGludmVudG9yeSBtb2RlbHMKICAgIHdpbGwgZnJlcXVlbnRseSB1c2UgYXMgcGFydCBvZiB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0xMC0wNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIGFuZCBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgZm9yIHNvdXJjZUlkcyBhbmQgcmVsaWFiaWxpdHlJbmRpY2F0b3IgdG8gbWV0YWRhdGEuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBncm91cGluZyBUb3BfR3JwX1R5cGUgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyBjb250YWluaW5nIHRoZSBrZXkgYXR0cmlidXRlIGNvbW1vbiB0byBhbGwgdHlwZXMuCiAgICAgICAgICAgIEFsbCB0eXBlcyBNVVNUIHVzZSB0aGlzIGdyb3VwaW5nLiI7CgogICAgICAgIGxlYWYgaWQgewogICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRvcG9sb2d5IGVudGl0aWVzLiBSZXByZXNlbnRzIHRoZQogICAgICAgICAgICAgICAgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgICAgICB9CiAgICB9CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IGZvciBhcHBsaWNhdGlvbnMgd2lzaGluZwogICAgICAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGRlY29yYXRvcnMuIFRoaXMgaXMgZG9uZSB2aWEgYXVnbWVudGF0aW9ucy4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpci4KCiAgICAgICAgICAgIFRoaXMgaXMgYSBjb25zdW1lciBkYXRhIGFuZCBjYW4gYmUgYXR0YWNoZWQgdG8gVG9wb2xvZ3kgRW50aXR5IG9yCiAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkKICAgICAgICAgICAgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLAogICAgICAgICAgICBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQKICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CiAgICB9CgogICAgbGVhZi1saXN0IGNsYXNzaWZpZXJzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBpZGVudGl0eXJlZiB7IGJhc2UgY2xhc3NpZmllcjsgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSBlbnRpdHkuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMuCgogICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGF0dGFjaGVkIHRvIHRoZSBUb3BvbG9neSBFbnRpdHkgaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAgICAgICBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkncyBhdHRyaWJ1dGVzLiBUaGlzIGlzIGV4cG9zZWQgdG8gdGhlCiAgICAgICAgICAgICAgICBjb25zdW1lcnMgYW5kIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgcmVzcG9uc2libGUgYWRhcHRlci4gVGhpcwogICAgICAgICAgICAgICAgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZAogICAgICAgICAgICAgICAgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgICAgIHR5cGUgc291cmNlSWQ7CiAgICAgICAgICAgIG9yZGVyZWQtYnkgdXNlcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSByZWxhdGlvbnNoaXAuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgZGVjbGFyZWQgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBpcyBleHBvc2VkIHRvIHRoZQogICAgICAgICAgICAgICAgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMKICAgICAgICAgICAgICAgIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4KICAgICAgICAgICAgICAgIGFueSB3YXksIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLiI7CgogICAgICAgICAgICB0eXBlIHNvdXJjZUlkOwogICAgICAgICAgICBvcmRlcmVkLWJ5IHVzZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAyOwogICAgICAgIH0KICAgIH0KCiAgICBjb250YWluZXIgbWV0YWRhdGEgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgYW4gZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpcnMuCgogICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IEVudGl0eSBvciBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwKICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5IG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzCiAgICAgICAgICAgIGF0dHJpYnV0ZXMuIFRoaXMgaXMgZXhwb3NlZCB0byB0aGUgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkKICAgICAgICAgICAgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlCiAgICAgICAgICAgIGF1Z21lbnRlZCBvciBkZXZpYXRlZCBpbiBhbnkgd2F5LCB1bmxlc3Mgc3RhdGVkIG90aGVyd2lzZS4iOwoKICAgICAgICBsZWFmIHJlbGlhYmlsaXR5SW5kaWNhdG9yIHsKICAgICAgICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICAgICAgICBlbnVtIE9LIHsKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGRhdGEgaXMgaW4gYWxpZ25tZW50IHdpdGggdGhlIHNvdXJjZSBvZiB0cnV0aCwKICAgICAgICAgICAgICAgICAgICBhcyBmYXIgYXMgVG9wb2xvZ3kgRXhwb3N1cmUgSGFuZGxpbmcgaXMgYXdhcmUuIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZW51bSBSRVNUT1JFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIHdhcyByZXN0b3JlZCBmcm9tIGJhY2t1cCBhbmQgdGhlIHJlc3BvbnNpYmxlCiAgICAgICAgICAgICAgICAgICAgYWRhcHRlcnMgYXJlIGNoZWNraW5nIHRvIGVuc3VyZSB0aGUgZGF0YSBpcyBjdXJyZW50LiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVudW0gQURWSVNFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVudGl0eSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgVG9wb2xvZ3kgRXhwb3N1cmUgSGFuZGxpbmcgYW5kCiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsbHkgbm90IGFsaWduZWQgd2l0aCB0aGUgc291cmNlIG9mIHRydXRoLiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZGVudGl0eSBjbGFzc2lmaWVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMKICAgICAgICB3aXRoIGlkZW50aXR5LiAiOwogICAgfQoKICAgIHR5cGVkZWYgc291cmNlSWQgewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBpZGVudGl0eSB0aGF0IHJlcHJlc2VudHMgYSBuYXRpdmUgaWRlbnRpZmllciBvZiBhIHRvcG9sb2d5IGVudGl0eS4iOwogICAgICAgIHR5cGUgc3RyaW5nOwogICAgfQp9
+o-ran-smo-teiv-common-yang-types urn:o-ran:smo-teiv-common-yang-types \N [] 2025-01-17 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICBwcmVmaXggb3ItdGVpdi10eXBlczsKCiAgICBpbXBvcnQgaWV0Zi15YW5nLXR5cGVzIHsgcHJlZml4IHlhbmc7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHJlLXVzYWJsZSBkYXRhIHR5cGVzIHRoYXQgdG9wb2xvZ3kgYW5kIGludmVudG9yeSBtb2RlbHMKICAgIHdpbGwgZnJlcXVlbnRseSB1c2UgYXMgcGFydCBvZiB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNS0wMS0xNyIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBmaXJzdERpc2NvdmVyZWQgYW5kIGxhc3RNb2RpZmllZCB0byBtZXRhZGF0YSBjb250YWluZXIiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjUuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0xMC0wNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIGFuZCBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgZm9yIHNvdXJjZUlkcyBhbmQgcmVsaWFiaWxpdHlJbmRpY2F0b3IgdG8gbWV0YWRhdGEuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBncm91cGluZyBUb3BfR3JwX1R5cGUgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyBjb250YWluaW5nIHRoZSBrZXkgYXR0cmlidXRlIGNvbW1vbiB0byBhbGwgdHlwZXMuCiAgICAgICAgICAgIEFsbCB0eXBlcyBNVVNUIHVzZSB0aGlzIGdyb3VwaW5nLiI7CgogICAgICAgIGxlYWYgaWQgewogICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRvcG9sb2d5IGVudGl0aWVzLiBSZXByZXNlbnRzIHRoZQogICAgICAgICAgICAgICAgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgICAgICB9CiAgICB9CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IGZvciBhcHBsaWNhdGlvbnMgd2lzaGluZwogICAgICAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGRlY29yYXRvcnMuIFRoaXMgaXMgZG9uZSB2aWEgYXVnbWVudGF0aW9ucy4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpci4KCiAgICAgICAgICAgIFRoaXMgaXMgYSBjb25zdW1lciBkYXRhIGFuZCBjYW4gYmUgYXR0YWNoZWQgdG8gVG9wb2xvZ3kgRW50aXR5IG9yCiAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkKICAgICAgICAgICAgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLAogICAgICAgICAgICBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQKICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CiAgICB9CgogICAgbGVhZi1saXN0IGNsYXNzaWZpZXJzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBpZGVudGl0eXJlZiB7IGJhc2UgY2xhc3NpZmllcjsgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSBlbnRpdHkuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMuCgogICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGF0dGFjaGVkIHRvIHRoZSBUb3BvbG9neSBFbnRpdHkgaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAgICAgICBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkncyBhdHRyaWJ1dGVzLiBUaGlzIGlzIGV4cG9zZWQgdG8gdGhlCiAgICAgICAgICAgICAgICBjb25zdW1lcnMgYW5kIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgcmVzcG9uc2libGUgYWRhcHRlci4gVGhpcwogICAgICAgICAgICAgICAgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZAogICAgICAgICAgICAgICAgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgICAgIHR5cGUgc291cmNlSWQ7CiAgICAgICAgICAgIG9yZGVyZWQtYnkgdXNlcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSByZWxhdGlvbnNoaXAuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgZGVjbGFyZWQgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBpcyBleHBvc2VkIHRvIHRoZQogICAgICAgICAgICAgICAgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMKICAgICAgICAgICAgICAgIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4KICAgICAgICAgICAgICAgIGFueSB3YXksIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLiI7CgogICAgICAgICAgICB0eXBlIHNvdXJjZUlkOwogICAgICAgICAgICBvcmRlcmVkLWJ5IHVzZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAyOwogICAgICAgIH0KICAgIH0KCiAgICBjb250YWluZXIgbWV0YWRhdGEgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgYW4gZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpcnMuCgogICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IEVudGl0eSBvciBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwKICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5IG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzCiAgICAgICAgICAgIGF0dHJpYnV0ZXMuIFRoaXMgaXMgZXhwb3NlZCB0byB0aGUgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkKICAgICAgICAgICAgVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZSBIYW5kbGluZyBhbmQgRGlzY292ZXJ5IGFuZCBSZWNvbmNpbGlhdGlvbiBBZGFwdGVyLgogICAgICAgICAgICBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwKICAgICAgICAgICAgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgbGVhZiByZWxpYWJpbGl0eUluZGljYXRvciB7CiAgICAgICAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgICAgICAgICAgZW51bSBPSyB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIGlzIGluIGFsaWdubWVudCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsCiAgICAgICAgICAgICAgICAgICAgYXMgZmFyIGFzIFRvcG9sb2d5IGFuZCBJbnZlbnRvcnkgRXhwb3N1cmUgSGFuZGxpbmcgaXMgYXdhcmUuIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZW51bSBSRVNUT1JFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIHdhcyByZXN0b3JlZCBmcm9tIGJhY2t1cCBhbmQgdGhlIHJlc3BvbnNpYmxlCiAgICAgICAgICAgICAgICAgICAgYWRhcHRlcnMgYXJlIGNoZWNraW5nIHRvIGVuc3VyZSB0aGUgZGF0YSBpcyBjdXJyZW50LiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVudW0gQURWSVNFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVudGl0eSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZQogICAgICAgICAgICAgICAgICAgIEhhbmRsaW5nIGFuZCBwb3RlbnRpYWxseSBub3QgYWxpZ25lZCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGguIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxlYWYgZmlyc3REaXNjb3ZlcmVkIHsKICAgICAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaW1lc3RhbXAgaW5kaWNhdGluZyB3aGVuIGFuIGluc3RhbmNlIG9mIFRvcG9sb2d5IEVudGl0eSBvciBSZWxhdGlvbgogICAgICAgICAgICB3YXMgZmlyc3QgcmVwcmVzZW50ZWQgaW4gVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZSBIYW5kbGluZyB2aWEgZGlzY292ZXJ5LiI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIGxhc3RNb2RpZmllZCB7CiAgICAgICAgICAgIHR5cGUgeWFuZzpkYXRlLWFuZC10aW1lOwogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGltZXN0YW1wIGluZGljYXRpbmcgd2hlbiBhbiBpbnN0YW5jZSBvZiBUb3BvbG9neSBFbnRpdHkgb3IgUmVsYXRpb24KICAgICAgICAgICAgd2FzIGxhc3QgdXBkYXRlZCAoZXhjbHVkaW5nIGNsYXNzaWZpZXJzIGFuZCBkZWNvcmF0b3JzKS4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZGVudGl0eSBjbGFzc2lmaWVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMKICAgICAgICB3aXRoIGlkZW50aXR5LiAiOwogICAgfQoKICAgIHR5cGVkZWYgc291cmNlSWQgewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBpZGVudGl0eSB0aGF0IHJlcHJlc2VudHMgYSBuYXRpdmUgaWRlbnRpZmllciBvZiBhIHRvcG9sb2d5IGVudGl0eS4iOwogICAgICAgIHR5cGUgc3RyaW5nOwogICAgfQp9
o-ran-smo-teiv-equipment urn:o-ran:smo-teiv-equipment EQUIPMENT [] 2024-10-21 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudCB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtZXF1aXBtZW50IjsKICAgIHByZWZpeCBvci10ZWl2LWVxdWlwOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7cHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7cHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIGltcG9ydCBpZXRmLWdlby1sb2NhdGlvbiB7CiAgICAgICAgcHJlZml4IGdlbzsKICAgICAgICByZWZlcmVuY2UgIlJGQyA5MTc5OiBBIFlBTkcgR3JvdXBpbmcgZm9yIEdlb2dyYXBoaWMgTG9jYXRpb25zIjsKICAgIH0KCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICJSQU4gRXF1aXBtZW50IHRvcG9sb2d5IG1vZGVsLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlCiAgICBSQU4gRXF1aXBtZW50IGRvbWFpbiwgd2hpY2ggaXMgbW9kZWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgcGh5c2ljYWwKICAgIGxvY2F0aW9uIG9mIGVxdWlwbWVudCBzdWNoIGFzIGFudGVubmFzIGFzc29jaWF0ZWQgd2l0aCBhIGNlbGwvY2FycmllcgogICAgYW5kIHRoZWlyIHJlbGV2YW50IHByb3BlcnRpZXMgZS5nLiB0aWx0LCBtYXggcG93ZXIgZXRjLgoKICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMjEiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiRGVwcmVjYXRlIEFudGVubmFNb2R1bGUgYXR0cmlidXRlIGFudGVubmFCZWFtV2lkdGguCiAgICAgICAgVG8gYmUgcmVwbGFjZWQgYnkgaG9yaXpvbnRhbEJlYW1XaWR0aCBhbmQgdmVydGljYWxCZWFtV2lkdGguIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC42LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDgiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgYXppbXV0aCBhdHRyaWJ1dGUgZm9yIEFudGVubmFNb2R1bGUuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmdzLCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIG9yIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAKICAgICAgICB0byB0aGUgY29ycmVzcG9uZGluZyB0b3BvbG9neSBvYmplY3RzLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBFUVVJUE1FTlQ7CgogICAgbGlzdCBBbnRlbm5hTW9kdWxlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQW4gQW50ZW5uYSBNb2R1bGUgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgYXNwZWN0IG9mIGFuCiAgICAgICAgYW50ZW5uYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGFudGVubmFNb2RlbE51bWJlciB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVmVuZG9yLXNwZWNpZmljIGFudGVubmEgbW9kZWwgaWRlbnRpZmllci4gVGhpcwogICAgICAgICAgICAgICAgYXR0cmlidXRlIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcyBubwogICAgICAgICAgICAgICAgb3BlcmF0aW9uYWwgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBtZWNoYW5pY2FsQW50ZW5uYUJlYXJpbmcgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgYmVhcmluZyBvbiBhbnRlbm5hIHN1YnVuaXQgd2hlcmUgYW50ZW5uYQogICAgICAgICAgICAgICAgdW5pdCBpcyBpbnN0YWxsZWQuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbWVjaGFuaWNhbEFudGVubmFUaWx0IHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgZml4ZWQgYW50ZW5uYSB0aWx0IG9mIHRoZSBpbnN0YWxsYXRpb24sIGRlZmluZWQKICAgICAgICAgICAgICAgIGFzIHRoZSBpbmNsaW5hdGlvbiBvZiB0aGUgYW50ZW5uYSBlbGVtZW50IHJlc3BlY3QgdG8gdGhlCiAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBwbGFuZS4gSXQgaXMgYSBzaWduZWQgdmFsdWUuIFBvc2l0aXZlIGluZGljYXRlcwogICAgICAgICAgICAgICAgZG93bnRpbHQsIGFuZCBuZWdhdGl2ZSBpbmRpY2F0ZXMgdXB0aWx0LiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIHBvc2l0aW9uV2l0aGluU2VjdG9yIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIHVuaXQgcG9zaXRpb24gd2l0aGluIHNlY3Rvci4gVGhpcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcyBubyBvcGVyYXRpb25hbAogICAgICAgICAgICAgICAgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiB0b3RhbFRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRvdGFsIGFudGVubmEgZWxldmF0aW9uIGluY2x1ZGluZyB0aGUgaW5zdGFsbGVkCiAgICAgICAgICAgICAgICB0aWx0IGFuZCB0aGUgdGlsdCBhcHBsaWVkIGJ5IHRoZSBSZW1vdGUgRWxlY3RyaWNhbAogICAgICAgICAgICAgICAgVGlsdCAoUkVUKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBlbGVjdHJpY2FsQW50ZW5uYVRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVsZWN0cmljYWxseS1jb250cm9sbGVkIHRpbHQgb2YgbWFpbiBiZWFtIG1heGltdW0KICAgICAgICAgICAgICAgIHdpdGggcmVzcGVjdCB0byBkaXJlY3Rpb24gb3J0aG9nb25hbCB0byBhbnRlbm5hIGVsZW1lbnQKICAgICAgICAgICAgICAgIGF4aXMgKHNlZSAzR1BQIFRTIDI1LjQ2NikuIFZhbHVlIGlzIHNpZ25lZDsgdGlsdCBkb3duIGlzCiAgICAgICAgICAgICAgICBwb3NpdGl2ZSwgdGlsdCB1cCBpcyBuZWdhdGl2ZS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGFudGVubmFCZWFtV2lkdGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIGhvcml6b250YWwgcGxhbmUuIE1lYXN1cmVkIGluCiAgICAgICAgICAgICAgICBkZWdyZWVzLgoKICAgICAgICAgICAgICAgIERlcHJlY2F0ZWQ6IFNpbmNlIDI0LlE0LiBSZXBsYWNlZCBieSBBbnRlbm5hTW9kdWxlOjpob3Jpem9udGFsQmVhbVdpZHRoCiAgICAgICAgICAgICAgICBhbmQgQW50ZW5uYU1vZHVsZTo6dmVydGljYWxCZWFtV2lkdGguIFBsYW5uZWQgdG8gYmUgcmVtb3ZlZC4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgaG9yaXpvbnRhbEJlYW1XaWR0aCAgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIGhvcml6b250YWwgcGxhbmUuIjsKICAgICAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTsKICAgICAgICAgICAgICAgICAgICByYW5nZSAiMC4uMzYwIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuaXRzICJkZWNpbWFsIGRlZ3JlZXMiOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIHZlcnRpY2FsQmVhbVdpZHRoICAgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIHZlcnRpY2FsIHBsYW5lLiI7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgIjAuLjM2MCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhemltdXRoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgdmFsdWUgb2YgdGhlIGF6aW11dGggb2YgdGhlIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgIjAuLjM2MCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IFNpdGUgewogICAgICAgIGRlc2NyaXB0aW9uICJBIHNpdGUgaXMgYSBwaHlzaWNhbCBsb2NhdGlvbiB3aGVyZSBhbiBlcXVpcG1lbnQgY2FuIGJlCiAgICAgICAgaW5zdGFsbGVkLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBTaXRlIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2VzIGdlbzpnZW8tbG9jYXRpb247CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9JTlNUQUxMRURfQVRfU0lURSB7IC8vIDAuLm4gdG8gMC4uMQoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBBbnRlbm5hTW9kdWxlIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU2l0ZSB0eXBlLgogICAgICAgICAgICBUaGUgU2l0ZSByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB3aGVyZSB0aGUgQW50ZW5uYU1vZHVsZSBpcyBpbnN0YWxsZWQuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIG9ubHkgYmUgaW5zdGFsbGVkIGF0IG9uZSBTaXRlLgogICAgICAgICAgICBBIFNpdGUgaW5zdGFuY2UgY2FuIGhhdmUgbWFueSBpbnN0YWxsZWQgQW50ZW5uYU1vZHVsZXMuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGluc3RhbGxlZC1hdC1zaXRlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgTW9kdWxlIGluc3RhbGxlZCBhdCBTaXRlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBBbnRlbm5hTW9kdWxlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgaW5zdGFsbGVkLWFudGVubmFNb2R1bGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiU2l0ZSB3aGVyZSBBbnRlbm5hIE1vZHVsZSBpcyBpbnN0YWxsZWQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIFNpdGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9Cn0=
o-ran-smo-teiv-oam urn:o-ran:smo-teiv-oam OAM [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LW9hbSB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtb2FtIjsKICAgIHByZWZpeCBvci10ZWl2LW9hbTsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbiAKICAgICJSQU4gTyZNIHRvcG9sb2d5IG1vZGVsLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlCiAgICBSQU4gTyZNIGRvbWFpbiwgd2hpY2ggYXJlIGludGVuZGVkIHRvIHJlcHJlc2VudCBtYW5hZ2VtZW50IHN5c3RlbXMKICAgIGFuZCBtYW5hZ2VtZW50IGludGVyZmFjZXMuCgogICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gT0FNOwoKICAgIGxpc3QgTWFuYWdlZEVsZW1lbnQgewogICAgICAgIGRlc2NyaXB0aW9uICJBIE1hbmFnZWQgRWxlbWVudCAoTUUpIGlzIGEgbm9kZSBpbnRvIGEgdGVsZWNvbW11bmljYXRpb24KICAgICAgICBuZXR3b3JrIHByb3ZpZGluZyBzdXBwb3J0IGFuZC9vciBzZXJ2aWNlIHRvIHN1YnNjcmliZXJzLiBBbiBNRQogICAgICAgIGNvbW11bmljYXRlcyB3aXRoIGEgbWFuYWdlciBhcHBsaWNhdGlvbiAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkKICAgICAgICBvdmVyIG9uZSBvciBtb3JlIGludGVyZmFjZXMgZm9yIHRoZSBwdXJwb3NlIG9mIGJlaW5nIG1vbml0b3JlZAogICAgICAgIGFuZC9vciBjb250cm9sbGVkLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwogICAgfQp9
-o-ran-smo-teiv-ran urn:o-ran:smo-teiv-ran RAN [] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbgogICAgICAgICJSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gTG9naWNhbCBkb21haW4sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGZ1bmN0aW9uYWwgY2FwYWJpbGl0eQogICAgICAgIG9mIHRoZSBkZXBsb3llZCBSQU4gdGhhdCBhcmUgcmVsZXZhbnQgdG8gckFwcHMgdXNlIGNhc2VzLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFkZGVkIHJhbmdlIGZvciBhemltdXRoIGF0dHJpYnV0ZSBvZiBTZWN0b3IuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC42LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmdzLCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIG9yIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAKICAgICAgICB0byB0aGUgY29ycmVzcG9uZGluZyB0b3BvbG9neSBvYmplY3QuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDctMTUiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyByZXZpc2lvbiBhbGlnbnMgTy1SQU4gV29yayBHcm91cCAxMCBTdGFnZSAyIFNwZWNpZmljYXRpb24gKE8tUkFOLldHMTAuVEUmSVYtQ0lNSS4wLVIwMDQudjAyLjAwKSI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBSQU47CgogICAgbGlzdCBPUlVGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIFJhZGlvIFVuaXQgKE8tUlUpLgoKICAgICAgICBBIGxvZ2ljYWwgbm9kZSBob3N0aW5nIExvdy1QSFkgbGF5ZXIgYW5kIFJGIHByb2Nlc3NpbmcgYmFzZWQgb24gYQogICAgICAgIGxvd2VyIGxheWVyIGZ1bmN0aW9uYWwgc3BsaXQuICBUaGlzIGlzIHNpbWlsYXIgdG8gM0dQUOKAmXMg4oCcVFJQ4oCdIG9yCiAgICAgICAg4oCcUlJI4oCdIGJ1dCBtb3JlIHNwZWNpZmljIGluIGluY2x1ZGluZyB0aGUgTG93LVBIWSBsYXllciAoRkZUL2lGRlQsCiAgICAgICAgUFJBQ0ggZXh0cmFjdGlvbikuIFRoZSBPLVJVIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIGludGVyZmFjZQogICAgICAgIChhbHNvIGtub3duIGFzIExMUyBpbnRlcmZhY2UpIGFzIHdlbGwgYXMgTG93LVBIWSBmdW5jdGlvbnMgb2YgdGhlCiAgICAgICAgcmFkaW8gaW50ZXJmYWNlIHRvd2FyZHMgdGhlIFVFLiBUaGlzIGlzIGRlcGxveWVkIGFzIGEgUE5GLiBUaGUgTy1SVQogICAgICAgIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIE0tUGxhbmUgaW50ZXJmYWNlIHRvd2FyZHMgdGhlIE8tRFUKICAgICAgICBhbmQgU01PLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBPLVJVIG9iamVjdC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG9ydUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE8tUlUgd2l0aGluIGEgT1JVRnVuY3Rpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5lYXJSVFJJQ0Z1bmN0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbiAiTmVhci1SZWFsLVRpbWUgUkFOIEludGVsbGlnZW50IENvbnRyb2xsZXIgKE5lYXItUlQgUklDKS4KCiAgICAgICAgQW4gTy1SQU4gTmV0d29yayBGdW5jdGlvbiAoTkYpIHRoYXQgZW5hYmxlcyBuZWFyLXJlYWwtdGltZSBjb250cm9sCiAgICAgICAgYW5kIG9wdGltaXphdGlvbiBvZiBSQU4gZWxlbWVudHMgYW5kIHJlc291cmNlcyB2aWEgZmluZS1ncmFpbmVkCiAgICAgICAgZGF0YSBjb2xsZWN0aW9uIGFuZCBhY3Rpb25zIG92ZXIgRTIgaW50ZXJmYWNlLiBJdCBtYXkgaW5jbHVkZQogICAgICAgIEFJL01MIChBcnRpZmljaWFsIEludGVsbGlnZW5jZSAvIE1hY2hpbmUgTGVhcm5pbmcpIHdvcmtmbG93CiAgICAgICAgaW5jbHVkaW5nIG1vZGVsIHRyYWluaW5nLCBpbmZlcmVuY2UsIGFuZCB1cGRhdGVzLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBOZWFyLVJUIFJJQyBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuZWFyUnRSaWNJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBOZWFyLVJUIFJJQyB3aXRoaW4gYSBOZWFyUlRSSUNGdW5jdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4KICAgICAgICAgICAgICAgIG5vZGUgaWRlbnRpdHkiOwogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0RVRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBEaXN0cmlidXRlZCBVbml0IChPLURVKS4KCiAgICAgICAgVGhlIE8tRFUgaXMgYW4gTy1SQU4gTkYgaW4gdGhlIE8tUkFOIEFyY2hpdGVjdHVyZS4gQW4gTy1EVSwgY29tYmluZWQKICAgICAgICB3aXRoIG9uZSBvciBtb3JlIE8tUlUocykgY29ubmVjdGVkIHRvIGl0LCBzdXBwb3J0cyBhbmQgaXMgZnVsbHkKICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGZ1bmN0aW9ucyBvZiBhIGdOQi1EVSBhcyBkZWZpbmVkIGJ5IDNHUFAgVFMgMzguNDAxLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1EVToKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tQ1UtQ1AgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzCiAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEYxLVUgaW50ZXJmYWNlLiBPbmUgTy1EVSBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmx5IG9uZSBPLUNVLUNQLiBPbmUgTy1EVSBjYW4gYmUgY29ubmVjdGVkIHRvCiAgICAgICAgbXVsdGlwbGUgTy1DVS1VUHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gTy1EVSBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgTkctUkFOCiAgICAgICAgbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlCiAgICAgICAgdGhlIGdOQi1EVSBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgY29udGFpbmVyIGRVcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdXNlZCBhcyBwYXJ0IG9mIFBNIEV2ZW50cyBkYXRhIjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJEVUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIERVIHdpdGhpbiBhIGdOb2RlQiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJZGVudGl0eSBvZiBnTm9kZUIgd2l0aGluIGEgUExNTiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkTGVuZ3RoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZW5ndGggb2YgZ05CSWQgYml0IHN0cmluZyByZXByZXNlbnRhdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0NVQ1BGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIENlbnRyYWxpemVkIFVuaXQgQ29udHJvbCBQbGFuZSAoTy1DVS1DUCkKCiAgICAgICAgVGhpcyBpcyBhIGxvZ2ljYWwgbm9kZSBob3N0aW5nIHRoZSBSYWRpbyBSZXNvdXJjZSBDb250cm9sIChSUkMpIGFuZAogICAgICAgIHRoZSBjb250cm9sIHBsYW5lIHBhcnQgb2YgdGhlIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sCiAgICAgICAgKFBEQ1ApLiBUaGUgTy1DVS1DUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UgY29ubmVjdGVkIHdpdGgKICAgICAgICB0aGUgTy1DVS1VUCBhbmQgdGhlIEYxLUMgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoIHRoZSBPLVJBTgogICAgICAgIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1DUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25seSBvbmUgTy1DVS1DUCBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmUgTy1EVS4gT25seSBvbmUgTy1DVS1DUCBpcyBjb25uZWN0ZWQgdG8gb25lCiAgICAgICAgTy1DVS1VUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBPLUNVLVVQcyB1bmRlcgogICAgICAgIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZSBPLUNVLVVQIGNhbiBiZSBjb25uZWN0ZWQgdG8KICAgICAgICBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1DUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtQ1Agb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CQ1VOYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIGdOb2RlQi1DVSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZExlbmd0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVuZ3RoIG9mIGdOQklkIGJpdCBzdHJpbmcgcmVwcmVzZW50YXRpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIHBMTU5JZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUExNTiBpZGVudGlmaWVyIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBnbG9iYWwgUkFOCiAgICAgICAgICAgICAgICBub2RlIGlkZW50aXR5IjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE9DVVVQRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBDZW50cmFsaXplZCBVbml0IFVzZXIgUGxhbmUgKE8tQ1UtVVApCgogICAgICAgIEFuIE8tQ1UtVVAgaXMgYSBsb2dpY2FsIG5vZGUgaG9zdGluZyB0aGUgVXNlciBQbGFuZSBwYXJ0IG9mIHRoZQogICAgICAgIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sIChQRENQKSBhbmQgdGhlIFNlcnZpY2UgRGF0YQogICAgICAgIEFkYXB0YXRpb24gUHJvdG9jb2wgKFNEQVApLiBUaGUgTy1DVS1VUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UKICAgICAgICBjb25uZWN0ZWQgd2l0aCB0aGUgTy1DVS1DUCBhbmQgdGhlIEYxLVUgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoCiAgICAgICAgdGhlIE8tUkFOIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1VUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtVSBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLUNQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25lIE8tQ1UtVVAgaXMKICAgICAgICBjb25uZWN0ZWQgdG8gb25seSBvbmUgTy1DVS1DUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0bwogICAgICAgIG11bHRpcGxlIE8tQ1UtVVBzIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZQogICAgICAgIE8tQ1UtVVAgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCiAgICAgICAgc2FtZSBPLUNVLUNQLgoKICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhbiBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1VUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtVVAgb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIklkZW50aXR5IG9mIGdOb2RlQiB3aXRoaW4gYSBQTE1OIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpc3QgcExNTklkTGlzdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4gbm9kZSBpZGVudGl0eSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBOUkNlbGxDVSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgYW4gTlIgQ2VsbCBpbiBnTm9kZUItQ1UuCgogICAgICAgIDVHIE5SIGlzIGEgbmV3IHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IChSQVQpIGRldmVsb3BlZCBieSAzR1BQIGZvcgogICAgICAgIHRoZSA1RyAoZmlmdGggZ2VuZXJhdGlvbikgbW9iaWxlIG5ldHdvcmsuIEl0IGlzIGRlc2lnbmVkIHRvIGJlIHRoZQogICAgICAgIGdsb2JhbCBzdGFuZGFyZCBmb3IgdGhlIGFpciBpbnRlcmZhY2Ugb2YgNUcgbmV0d29ya3MuCgogICAgICAgIDVHIE5SIGhhcyBzeW5jaHJvbml6YXRpb24gc2lnbmFsIHRoYXQgaXMga25vd24gYXMgUHJpbWFyeQogICAgICAgIFN5bmNocm9uaXphdGlvbiBTaWduYWwgKFBTUykgYW5kIFNlY29uZGFyeSBTeW5jaHJvbml6YXRpb24KICAgICAgICBTaWduYWwgKFNTUykuIFRoZXNlIHNpZ25hbHMgYXJlIHNwZWNpZmljIHRvIE5SIHBoeXNpY2FsIGxheWVyIGFuZAogICAgICAgIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBVRSBmb3IgZG93bmxpbmsKICAgICAgICBzeW5jaHJvbml6YXRpb246IFBTUyBwcm92aWRlcyBSYWRpbyBGcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YgMXN0CiAgICAgICAgU3ltYm9sIGluIGEgUmFkaW8gZnJhbWUpIFNTUyBwcm92aWRlcyBTdWJmcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YKICAgICAgICAxc3QgU3ltYm9sIGluIGEgU3ViZnJhbWUpIFBoeXNpY2FsIExheWVyIENlbGwgSUQgKFBDSSkgaW5mb3JtYXRpb24KICAgICAgICB1c2luZyBib3RoIFBTUyBhbmQgU1NTLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgY2VsbExvY2FsSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVzZWQgdG9nZXRoZXIgd2l0aCBnTm9kZUIgaWRlbnRpZmllciB0byBpZGVudGlmeSBOUgogICAgICAgICAgICAgICAgY2VsbCBpbiBQTE1OLiBVc2VkIHRvZ2V0aGVyIHdpdGggZ05CSWQgdG8gZm9ybSBOQ0kuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBwbG1uSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlBMTU4gSUQgZm9yIE5SIENHSS4gSWYgZW1wdHksCiAgICAgICAgICAgICAgICBHTkJDVUNQRnVuY3Rpb246OnBMTU5JZCBpcyB1c2VkIGZvciBQTE1OIElEIGluIE5SIENHSSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbkNJIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsIElkZW50aXR5IjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKSI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTlJDZWxsRFUgewogICAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIGFuIE5SIENlbGwgaW4gZ05vZGVCLURVLgoKICAgICAgICA1RyBOUiBpcyBhIG5ldyByYWRpbyBhY2Nlc3MgdGVjaG5vbG9neSAoUkFUKSBkZXZlbG9wZWQgYnkgM0dQUCBmb3IKICAgICAgICB0aGUgNUcgKGZpZnRoIGdlbmVyYXRpb24pIG1vYmlsZSBuZXR3b3JrLiBJdCBpcyBkZXNpZ25lZCB0byBiZSB0aGUKICAgICAgICBnbG9iYWwgc3RhbmRhcmQgZm9yIHRoZSBhaXIgaW50ZXJmYWNlIG9mIDVHIG5ldHdvcmtzLgoKICAgICAgICA1RyBOUiBoYXMgc3luY2hyb25pemF0aW9uIHNpZ25hbCB0aGF0IGlzIGtub3duIGFzIFByaW1hcnkKICAgICAgICBTeW5jaHJvbml6YXRpb24gc2lnbmFsIChQU1MpIGFuZCBTZWNvbmRhcnkgU3luY2hyb25pemF0aW9uIHNpZ25hbAogICAgICAgIChTU1MpLiBUaGVzZSBzaWduYWxzIGFyZSBzcGVjaWZpYyB0byBOUiBwaHlzaWNhbCBsYXllciBhbmQgcHJvdmlkZQogICAgICAgIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgVUUgZm9yIGRvd25saW5rCiAgICAgICAgc3luY2hyb25pemF0aW9uOiBQU1MgcHJvdmlkZXMgUmFkaW8gRnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mIDFzdAogICAgICAgIFN5bWJvbCBpbiBhIFJhZGlvIGZyYW1lKSBTU1MgcHJvdmlkZXMgU3ViZnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mCiAgICAgICAgMXN0IFN5bWJvbCBpbiBhIFN1YmZyYW1lKSBQaHlzaWNhbCBMYXllciBDZWxsIElEIChQQ0kpIGluZm9ybWF0aW9uCiAgICAgICAgdXNpbmcgYm90aCBQU1MgYW5kIFNTUy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGNlbGxMb2NhbElkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVc2VkIHRvZ2V0aGVyIHdpdGggZ05vZGVCIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgTlIKICAgICAgICAgICAgICAgIGNlbGwgaW4gUExNTi4gVXNlZCB0b2dldGhlciB3aXRoIGdOQklkIHRvIGZvcm0gTkNJLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG5DSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBuUlBDSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIFBoeXNpY2FsIENlbGwgSWRlbnRpdHkgKFBDSSkgb2YgdGhlIE5SIGNlbGwuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5SU2VjdG9yQ2FycmllciB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBOUiBTZWN0b3IgQ2FycmllciBvYmplY3QgcHJvdmlkZXMgdGhlIGF0dHJpYnV0ZXMgZm9yCiAgICAgICAgZGVmaW5pbmcgdGhlIGxvZ2ljYWwgY2hhcmFjdGVyaXN0aWNzIG9mIGEgY2FycmllciAoY2VsbCkgaW4gYQogICAgICAgIHNlY3Rvci4gQSBzZWN0b3IgaXMgYSBjb3ZlcmFnZSBhcmVhIGFzc29jaWF0ZWQgd2l0aCBhIGJhc2Ugc3RhdGlvbgogICAgICAgIGhhdmluZyBpdHMgb3duIGFudGVubmFzLCByYWRpbyBwb3J0cywgYW5kIGNvbnRyb2wgY2hhbm5lbHMuIFRoZQogICAgICAgIGNvbmNlcHQgb2Ygc2VjdG9ycyB3YXMgZGV2ZWxvcGVkIHRvIGltcHJvdmUgY28tY2hhbm5lbCBpbnRlcmZlcmVuY2UKICAgICAgICBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcyBzeXN0ZW1zIHVzZSB0aHJlZSBzZWN0b3IKICAgICAgICBjZWxscy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGFyZmNuREwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIEFic29sdXRlIFJhZGlvIEZyZXF1ZW5jeSBDaGFubmVsIE51bWJlcgogICAgICAgICAgICAgICAgKE5SLUFSRkNOKSBmb3IgZG93bmxpbmsiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhcmZjblVMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBBYnNvbHV0ZSBSYWRpbyBmcmVxdWVuY3kgQ2hhbm5lbCBOdW1iZXIKICAgICAgICAgICAgICAgIChOUi1BUkZDTikgZm9yIHVwbGluay4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBmcmVxdWVuY3lETCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUkYgUmVmZXJlbmNlIEZyZXF1ZW5jeSBvZiBkb3dubGluayBjaGFubmVsIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZnJlcXVlbmN5VUwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJGIFJlZmVyZW5jZSBGcmVxdWVuY3kgb2YgdXBsaW5rIGNoYW5uZWwiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBiU0NoYW5uZWxCd0RMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJCUyBDaGFubmVsIGJhbmR3aWR0aCBpbiBNSHogZm9yIGRvd25saW5rLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgQW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIE1PIHNlcnZlcyBhcyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUgY2VsbCBhbmQgdGhlIFJCUwogICAgICAgIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UgaW4gYSBjZXJ0YWluIGdlb2dyYXBoaWNhbCBhcmVhLgogICAgICAgIFRoZSBNTyBhbHNvIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG91dHB1dCBwb3dlciBvZiB0aGUgc2VjdG9yLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYtbGlzdCBlVXRyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIExURSBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGdlcmFuRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBHRVJBTiBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IG5SRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBOUiBmcmVxdWVuY3kgYmFuZHMgYXNzb2NpYXRlZCBoYXJkd2FyZQogICAgICAgICAgICAgICAgc3VwcG9ydHMiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBTZWN0b3IgewogICAgICAgIGRlc2NyaXB0aW9uICJBIGdyb3VwIG9mIGNvLWxvY2F0ZWQgQ2VsbHMgdGhhdCBoYXZlIGEgc2hhcmVkCiAgICAgICAgY292ZXJhZ2UgYXJlYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIHNlY3RvcklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbml2ZXJzYWxseSB1bmlxdWUgSUQgZ2VuZXJhdGVkIGJ5IHRoZSBzZWN0b3IncwogICAgICAgICAgICAgICAgZGlzY292ZXJ5IG1lY2hhbmlzbS4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzZXMgZ2VvOmdlby1sb2NhdGlvbjsKCiAgICAgICAgICAgIGxlYWYgYXppbXV0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiQXZlcmFnZSB2YWx1ZSBvZiB0aGUgYXppbXV0aHMgb2YgdGhlIGNlbGxzCiAgICAgICAgICAgICAgICBjb21wcmlzaW5nIHRoZSBzZWN0b3IsIGRldGVybWluZWQgZHVyaW5nIHNlY3RvciBkaXNjb3ZlcnkuIjsKICAgICAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0ewogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxOwogICAgICAgICAgICAgICAgICAgIHJhbmdlICIwLi4zNjAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgT0RVRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMRFUgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgT0RVRnVuY3Rpb24gcmVwcmVzZW50cyB0aGUgRFUgY29tcG9uZW50IG9mIGEgZ05CIHRoYXQgcHJvdmlkZXMgdGhlIE5SQ2VsbERVLgogICAgICAgICAgICBBIE9EVUZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBtdXN0IGJlIHByb3ZpZGVkIGJ5IGFuIE9EVUZ1bmN0aW9uLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHByb3ZpZGVkLW5yQ2VsbER1IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tRFUgRnVuY3Rpb24gcHJvdmlkZXMgTlIgQ2VsbC1EVS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbC1EVSBwcm92aWRlZCBieSBPLURVIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBPRFVGVU5DVElPTl9QUk9WSURFU19OUlNFQ1RPUkNBUlJJRVIgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUlNlY3RvckNhcnJpZXIgdHlwZS4KICAgICAgICAgICAgVGhlIE9EVUZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIERVIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUlNlY3RvckNhcnJpZXIuCiAgICAgICAgICAgIEEgT0RVRnVuY3Rpb24gaW5zdGFuY2UgY2FuIHByb3ZpZGUgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgbXVzdCBiZSBwcm92aWRlZCBieSBhbiBPRFVGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uclNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBwcm92aWRlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgTy1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTlJTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE9DVUNQRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMQ1UgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbENVIHR5cGUuCiAgICAgICAgICAgIFRoZSBPQ1VDUEZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIENVLUNQIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUkNlbGxDVS4KICAgICAgICAgICAgQSBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsQ1UuCiAgICAgICAgICAgIEFuIE5SQ2VsbENVIGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQgYnkgYW4gT0NVQ1BGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uckNlbGxDdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLUNQIEZ1bmN0aW9uIHByb3ZpZGVzIE5SIENlbGwtQ1UuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE9DVUNQRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2N1Y3BGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLUNVIHByb3ZpZGVkIGJ5IE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SQ2VsbENVOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SQ0VMTERVX1VTRVNfTlJTRUNUT1JDQVJSSUVSIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTlJTZWN0b3JDYXJyaWVyIHR5cGUuCiAgICAgICAgICAgIFRoZSBOUkNlbGxEVSByZXByZXNlbnRzIHRoZSBjZWxsIHRoYXQgdXNlcyB0aGUgTlJTZWN0b3JDYXJyaWVyLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gdXNlIG1hbnkgTlJTZWN0b3JDYXJyaWVycy4KICAgICAgICAgICAgQW4gTlJTZWN0b3JDYXJyaWVyIGluc3RhbmNlIGNhbiBvbmx5IGJlIHVzZWQgYnkgb25lIE5SQ2VsbERVLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHVzZWQtbnJTZWN0b3JDYXJyaWVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIENlbGwtRFUgdXNlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTlJDZWxsRFU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdXNlZC1ieS1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBTZWN0b3IgQ2FycmllciB1c2VkIGJ5IE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SU0VDVE9SQ0FSUklFUl9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SU2VjdG9yQ2FycmllciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFDYXBhYmlsaXR5IHR5cGUuCiAgICAgICAgICAgIFRoZSBOUlNlY3RvckNhcnJpZXIgcmVwcmVzZW50cyB0aGUgY2FycmllciB0aGF0IHVzZXMgdGhlIEFudGVubmFDYXBhYmlsaXR5LgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgY2FuIHVzZSBvbmx5IG9uZSBBbnRlbm5hQ2FwYWJpbGl0eS4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHVzZWQgYnkgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiB1c2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFNlY3RvciBDYXJyaWVyIHVzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBOUlNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCB1c2VkLWJ5LW5yU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgdXNlZCBieSBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX05SQ0VMTERVIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNlY3RvciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBTZWN0b3IgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGFyZWEgdGhhdCBncm91cHMgdGhlIE5SQ2VsbERVcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gb25seSBiZSBncm91cGVkIGJ5IG9uZSBTZWN0b3IuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgZ3JvdXBlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIFNlY3RvcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBncm91cGVkLWJ5LXNlY3RvciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIGdyb3VwZWQgYnkgU2VjdG9yLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
+o-ran-smo-teiv-ran urn:o-ran:smo-teiv-ran RAN [] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbgogICAgICAgICJSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gTG9naWNhbCBkb21haW4sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGZ1bmN0aW9uYWwgY2FwYWJpbGl0eQogICAgICAgIG9mIHRoZSBkZXBsb3llZCBSQU4gdGhhdCBhcmUgcmVsZXZhbnQgdG8gckFwcHMgdXNlIGNhc2VzLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFkZGVkIHJhbmdlIGZvciBhemltdXRoIGF0dHJpYnV0ZSBvZiBTZWN0b3IuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC42LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmdzLCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIG9yIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAKICAgICAgICB0byB0aGUgY29ycmVzcG9uZGluZyB0b3BvbG9neSBvYmplY3QuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDctMTUiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyByZXZpc2lvbiBhbGlnbnMgTy1SQU4gV29yayBHcm91cCAxMCBTdGFnZSAyIFNwZWNpZmljYXRpb24gKE8tUkFOLldHMTAuVEUmSVYtQ0lNSS4wLVIwMDQudjAyLjAwKSI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBSQU47CgogICAgbGlzdCBPUlVGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIFJhZGlvIFVuaXQgKE8tUlUpLgoKICAgICAgICBBIGxvZ2ljYWwgbm9kZSBob3N0aW5nIExvdy1QSFkgbGF5ZXIgYW5kIFJGIHByb2Nlc3NpbmcgYmFzZWQgb24gYQogICAgICAgIGxvd2VyIGxheWVyIGZ1bmN0aW9uYWwgc3BsaXQuICBUaGlzIGlzIHNpbWlsYXIgdG8gM0dQUOKAmXMg4oCcVFJQ4oCdIG9yCiAgICAgICAg4oCcUlJI4oCdIGJ1dCBtb3JlIHNwZWNpZmljIGluIGluY2x1ZGluZyB0aGUgTG93LVBIWSBsYXllciAoRkZUL2lGRlQsCiAgICAgICAgUFJBQ0ggZXh0cmFjdGlvbikuIFRoZSBPLVJVIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIGludGVyZmFjZQogICAgICAgIChhbHNvIGtub3duIGFzIExMUyBpbnRlcmZhY2UpIGFzIHdlbGwgYXMgTG93LVBIWSBmdW5jdGlvbnMgb2YgdGhlCiAgICAgICAgcmFkaW8gaW50ZXJmYWNlIHRvd2FyZHMgdGhlIFVFLiBUaGlzIGlzIGRlcGxveWVkIGFzIGEgUE5GLiBUaGUgTy1SVQogICAgICAgIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIE0tUGxhbmUgaW50ZXJmYWNlIHRvd2FyZHMgdGhlIE8tRFUKICAgICAgICBhbmQgU01PLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBPLVJVIG9iamVjdC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG9ydUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE8tUlUgd2l0aGluIGEgT1JVRnVuY3Rpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5lYXJSVFJJQ0Z1bmN0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbiAiTmVhci1SZWFsLVRpbWUgUkFOIEludGVsbGlnZW50IENvbnRyb2xsZXIgKE5lYXItUlQgUklDKS4KCiAgICAgICAgQW4gTy1SQU4gTmV0d29yayBGdW5jdGlvbiAoTkYpIHRoYXQgZW5hYmxlcyBuZWFyLXJlYWwtdGltZSBjb250cm9sCiAgICAgICAgYW5kIG9wdGltaXphdGlvbiBvZiBSQU4gZWxlbWVudHMgYW5kIHJlc291cmNlcyB2aWEgZmluZS1ncmFpbmVkCiAgICAgICAgZGF0YSBjb2xsZWN0aW9uIGFuZCBhY3Rpb25zIG92ZXIgRTIgaW50ZXJmYWNlLiBJdCBtYXkgaW5jbHVkZQogICAgICAgIEFJL01MIChBcnRpZmljaWFsIEludGVsbGlnZW5jZSAvIE1hY2hpbmUgTGVhcm5pbmcpIHdvcmtmbG93CiAgICAgICAgaW5jbHVkaW5nIG1vZGVsIHRyYWluaW5nLCBpbmZlcmVuY2UsIGFuZCB1cGRhdGVzLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBOZWFyLVJUIFJJQyBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuZWFyUnRSaWNJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBOZWFyLVJUIFJJQyB3aXRoaW4gYSBOZWFyUlRSSUNGdW5jdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4KICAgICAgICAgICAgICAgIG5vZGUgaWRlbnRpdHkiOwogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0RVRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBEaXN0cmlidXRlZCBVbml0IChPLURVKS4KCiAgICAgICAgVGhlIE8tRFUgaXMgYW4gTy1SQU4gTkYgaW4gdGhlIE8tUkFOIEFyY2hpdGVjdHVyZS4gQW4gTy1EVSwgY29tYmluZWQKICAgICAgICB3aXRoIG9uZSBvciBtb3JlIE8tUlUocykgY29ubmVjdGVkIHRvIGl0LCBzdXBwb3J0cyBhbmQgaXMgZnVsbHkKICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGZ1bmN0aW9ucyBvZiBhIGdOQi1EVSBhcyBkZWZpbmVkIGJ5IDNHUFAgVFMgMzguNDAxLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1EVToKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tQ1UtQ1AgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzCiAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEYxLVUgaW50ZXJmYWNlLiBPbmUgTy1EVSBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmx5IG9uZSBPLUNVLUNQLiBPbmUgTy1EVSBjYW4gYmUgY29ubmVjdGVkIHRvCiAgICAgICAgbXVsdGlwbGUgTy1DVS1VUHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gTy1EVSBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgTkctUkFOCiAgICAgICAgbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlCiAgICAgICAgdGhlIGdOQi1EVSBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgY29udGFpbmVyIGRVcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdXNlZCBhcyBwYXJ0IG9mIFBNIEV2ZW50cyBkYXRhIjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJEVUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIERVIHdpdGhpbiBhIGdOb2RlQiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJZGVudGl0eSBvZiBnTm9kZUIgd2l0aGluIGEgUExNTiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkTGVuZ3RoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZW5ndGggb2YgZ05CSWQgYml0IHN0cmluZyByZXByZXNlbnRhdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0NVQ1BGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIENlbnRyYWxpemVkIFVuaXQgQ29udHJvbCBQbGFuZSAoTy1DVS1DUCkKCiAgICAgICAgVGhpcyBpcyBhIGxvZ2ljYWwgbm9kZSBob3N0aW5nIHRoZSBSYWRpbyBSZXNvdXJjZSBDb250cm9sIChSUkMpIGFuZAogICAgICAgIHRoZSBjb250cm9sIHBsYW5lIHBhcnQgb2YgdGhlIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sCiAgICAgICAgKFBEQ1ApLiBUaGUgTy1DVS1DUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UgY29ubmVjdGVkIHdpdGgKICAgICAgICB0aGUgTy1DVS1VUCBhbmQgdGhlIEYxLUMgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoIHRoZSBPLVJBTgogICAgICAgIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1DUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25seSBvbmUgTy1DVS1DUCBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmUgTy1EVS4gT25seSBvbmUgTy1DVS1DUCBpcyBjb25uZWN0ZWQgdG8gb25lCiAgICAgICAgTy1DVS1VUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBPLUNVLVVQcyB1bmRlcgogICAgICAgIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZSBPLUNVLVVQIGNhbiBiZSBjb25uZWN0ZWQgdG8KICAgICAgICBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1DUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtQ1Agb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CQ1VOYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIGdOb2RlQi1DVSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZExlbmd0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVuZ3RoIG9mIGdOQklkIGJpdCBzdHJpbmcgcmVwcmVzZW50YXRpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIHBMTU5JZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUExNTiBpZGVudGlmaWVyIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBnbG9iYWwgUkFOCiAgICAgICAgICAgICAgICBub2RlIGlkZW50aXR5IjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE9DVVVQRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBDZW50cmFsaXplZCBVbml0IFVzZXIgUGxhbmUgKE8tQ1UtVVApCgogICAgICAgIEFuIE8tQ1UtVVAgaXMgYSBsb2dpY2FsIG5vZGUgaG9zdGluZyB0aGUgVXNlciBQbGFuZSBwYXJ0IG9mIHRoZQogICAgICAgIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sIChQRENQKSBhbmQgdGhlIFNlcnZpY2UgRGF0YQogICAgICAgIEFkYXB0YXRpb24gUHJvdG9jb2wgKFNEQVApLiBUaGUgTy1DVS1VUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UKICAgICAgICBjb25uZWN0ZWQgd2l0aCB0aGUgTy1DVS1DUCBhbmQgdGhlIEYxLVUgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoCiAgICAgICAgdGhlIE8tUkFOIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1VUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtVSBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLUNQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25lIE8tQ1UtVVAgaXMKICAgICAgICBjb25uZWN0ZWQgdG8gb25seSBvbmUgTy1DVS1DUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0bwogICAgICAgIG11bHRpcGxlIE8tQ1UtVVBzIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZQogICAgICAgIE8tQ1UtVVAgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCiAgICAgICAgc2FtZSBPLUNVLUNQLgoKICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhbiBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1VUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtVVAgb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIklkZW50aXR5IG9mIGdOb2RlQiB3aXRoaW4gYSBQTE1OIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpc3QgcExNTklkTGlzdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4gbm9kZSBpZGVudGl0eSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBOUkNlbGxDVSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgYW4gTlIgQ2VsbCBpbiBnTm9kZUItQ1UuCgogICAgICAgIDVHIE5SIGlzIGEgbmV3IHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IChSQVQpIGRldmVsb3BlZCBieSAzR1BQIGZvcgogICAgICAgIHRoZSA1RyAoZmlmdGggZ2VuZXJhdGlvbikgbW9iaWxlIG5ldHdvcmsuIEl0IGlzIGRlc2lnbmVkIHRvIGJlIHRoZQogICAgICAgIGdsb2JhbCBzdGFuZGFyZCBmb3IgdGhlIGFpciBpbnRlcmZhY2Ugb2YgNUcgbmV0d29ya3MuCgogICAgICAgIDVHIE5SIGhhcyBzeW5jaHJvbml6YXRpb24gc2lnbmFsIHRoYXQgaXMga25vd24gYXMgUHJpbWFyeQogICAgICAgIFN5bmNocm9uaXphdGlvbiBTaWduYWwgKFBTUykgYW5kIFNlY29uZGFyeSBTeW5jaHJvbml6YXRpb24KICAgICAgICBTaWduYWwgKFNTUykuIFRoZXNlIHNpZ25hbHMgYXJlIHNwZWNpZmljIHRvIE5SIHBoeXNpY2FsIGxheWVyIGFuZAogICAgICAgIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBVRSBmb3IgZG93bmxpbmsKICAgICAgICBzeW5jaHJvbml6YXRpb246IFBTUyBwcm92aWRlcyBSYWRpbyBGcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YgMXN0CiAgICAgICAgU3ltYm9sIGluIGEgUmFkaW8gZnJhbWUpIFNTUyBwcm92aWRlcyBTdWJmcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YKICAgICAgICAxc3QgU3ltYm9sIGluIGEgU3ViZnJhbWUpIFBoeXNpY2FsIExheWVyIENlbGwgSUQgKFBDSSkgaW5mb3JtYXRpb24KICAgICAgICB1c2luZyBib3RoIFBTUyBhbmQgU1NTLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgY2VsbExvY2FsSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVzZWQgdG9nZXRoZXIgd2l0aCBnTm9kZUIgaWRlbnRpZmllciB0byBpZGVudGlmeSBOUgogICAgICAgICAgICAgICAgY2VsbCBpbiBQTE1OLiBVc2VkIHRvZ2V0aGVyIHdpdGggZ05CSWQgdG8gZm9ybSBOQ0kuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBwbG1uSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlBMTU4gSUQgZm9yIE5SIENHSS4gSWYgZW1wdHksCiAgICAgICAgICAgICAgICBHTkJDVUNQRnVuY3Rpb246OnBMTU5JZCBpcyB1c2VkIGZvciBQTE1OIElEIGluIE5SIENHSSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbkNJIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsIElkZW50aXR5IjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKSI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTlJDZWxsRFUgewogICAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIGFuIE5SIENlbGwgaW4gZ05vZGVCLURVLgoKICAgICAgICA1RyBOUiBpcyBhIG5ldyByYWRpbyBhY2Nlc3MgdGVjaG5vbG9neSAoUkFUKSBkZXZlbG9wZWQgYnkgM0dQUCBmb3IKICAgICAgICB0aGUgNUcgKGZpZnRoIGdlbmVyYXRpb24pIG1vYmlsZSBuZXR3b3JrLiBJdCBpcyBkZXNpZ25lZCB0byBiZSB0aGUKICAgICAgICBnbG9iYWwgc3RhbmRhcmQgZm9yIHRoZSBhaXIgaW50ZXJmYWNlIG9mIDVHIG5ldHdvcmtzLgoKICAgICAgICA1RyBOUiBoYXMgc3luY2hyb25pemF0aW9uIHNpZ25hbCB0aGF0IGlzIGtub3duIGFzIFByaW1hcnkKICAgICAgICBTeW5jaHJvbml6YXRpb24gc2lnbmFsIChQU1MpIGFuZCBTZWNvbmRhcnkgU3luY2hyb25pemF0aW9uIHNpZ25hbAogICAgICAgIChTU1MpLiBUaGVzZSBzaWduYWxzIGFyZSBzcGVjaWZpYyB0byBOUiBwaHlzaWNhbCBsYXllciBhbmQgcHJvdmlkZQogICAgICAgIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgVUUgZm9yIGRvd25saW5rCiAgICAgICAgc3luY2hyb25pemF0aW9uOiBQU1MgcHJvdmlkZXMgUmFkaW8gRnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mIDFzdAogICAgICAgIFN5bWJvbCBpbiBhIFJhZGlvIGZyYW1lKSBTU1MgcHJvdmlkZXMgU3ViZnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mCiAgICAgICAgMXN0IFN5bWJvbCBpbiBhIFN1YmZyYW1lKSBQaHlzaWNhbCBMYXllciBDZWxsIElEIChQQ0kpIGluZm9ybWF0aW9uCiAgICAgICAgdXNpbmcgYm90aCBQU1MgYW5kIFNTUy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGNlbGxMb2NhbElkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVc2VkIHRvZ2V0aGVyIHdpdGggZ05vZGVCIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgTlIKICAgICAgICAgICAgICAgIGNlbGwgaW4gUExNTi4gVXNlZCB0b2dldGhlciB3aXRoIGdOQklkIHRvIGZvcm0gTkNJLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG5DSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBuUlBDSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIFBoeXNpY2FsIENlbGwgSWRlbnRpdHkgKFBDSSkgb2YgdGhlIE5SIGNlbGwuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5SU2VjdG9yQ2FycmllciB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBOUiBTZWN0b3IgQ2FycmllciBvYmplY3QgcHJvdmlkZXMgdGhlIGF0dHJpYnV0ZXMgZm9yCiAgICAgICAgZGVmaW5pbmcgdGhlIGxvZ2ljYWwgY2hhcmFjdGVyaXN0aWNzIG9mIGEgY2FycmllciAoY2VsbCkgaW4gYQogICAgICAgIHNlY3Rvci4gQSBzZWN0b3IgaXMgYSBjb3ZlcmFnZSBhcmVhIGFzc29jaWF0ZWQgd2l0aCBhIGJhc2Ugc3RhdGlvbgogICAgICAgIGhhdmluZyBpdHMgb3duIGFudGVubmFzLCByYWRpbyBwb3J0cywgYW5kIGNvbnRyb2wgY2hhbm5lbHMuIFRoZQogICAgICAgIGNvbmNlcHQgb2Ygc2VjdG9ycyB3YXMgZGV2ZWxvcGVkIHRvIGltcHJvdmUgY28tY2hhbm5lbCBpbnRlcmZlcmVuY2UKICAgICAgICBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcyBzeXN0ZW1zIHVzZSB0aHJlZSBzZWN0b3IKICAgICAgICBjZWxscy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGFyZmNuREwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIEFic29sdXRlIFJhZGlvIEZyZXF1ZW5jeSBDaGFubmVsIE51bWJlcgogICAgICAgICAgICAgICAgKE5SLUFSRkNOKSBmb3IgZG93bmxpbmsiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhcmZjblVMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBBYnNvbHV0ZSBSYWRpbyBmcmVxdWVuY3kgQ2hhbm5lbCBOdW1iZXIKICAgICAgICAgICAgICAgIChOUi1BUkZDTikgZm9yIHVwbGluay4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBmcmVxdWVuY3lETCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUkYgUmVmZXJlbmNlIEZyZXF1ZW5jeSBvZiBkb3dubGluayBjaGFubmVsIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZnJlcXVlbmN5VUwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJGIFJlZmVyZW5jZSBGcmVxdWVuY3kgb2YgdXBsaW5rIGNoYW5uZWwiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBiU0NoYW5uZWxCd0RMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJCUyBDaGFubmVsIGJhbmR3aWR0aCBpbiBNSHogZm9yIGRvd25saW5rLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgQW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIE1PIHNlcnZlcyBhcyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUgY2VsbCBhbmQgdGhlIFJCUwogICAgICAgIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UgaW4gYSBjZXJ0YWluIGdlb2dyYXBoaWNhbCBhcmVhLgogICAgICAgIFRoZSBNTyBhbHNvIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG91dHB1dCBwb3dlciBvZiB0aGUgc2VjdG9yLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYtbGlzdCBlVXRyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIExURSBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGdlcmFuRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBHRVJBTiBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IG5SRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBOUiBmcmVxdWVuY3kgYmFuZHMgYXNzb2NpYXRlZCBoYXJkd2FyZQogICAgICAgICAgICAgICAgc3VwcG9ydHMiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBTZWN0b3IgewogICAgICAgIGRlc2NyaXB0aW9uICJBIGdyb3VwIG9mIGNvLWxvY2F0ZWQgQ2VsbHMgdGhhdCBoYXZlIGEgc2hhcmVkCiAgICAgICAgY292ZXJhZ2UgYXJlYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIHNlY3RvcklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbml2ZXJzYWxseSB1bmlxdWUgSUQgZ2VuZXJhdGVkIGJ5IHRoZSBzZWN0b3IncwogICAgICAgICAgICAgICAgZGlzY292ZXJ5IG1lY2hhbmlzbS4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzZXMgZ2VvOmdlby1sb2NhdGlvbjsKCiAgICAgICAgICAgIGxlYWYgYXppbXV0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiQXZlcmFnZSB2YWx1ZSBvZiB0aGUgYXppbXV0aHMgb2YgdGhlIGNlbGxzCiAgICAgICAgICAgICAgICBjb21wcmlzaW5nIHRoZSBzZWN0b3IsIGRldGVybWluZWQgZHVyaW5nIHNlY3RvciBkaXNjb3ZlcnkuIjsKICAgICAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0ewogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxOwogICAgICAgICAgICAgICAgICAgIHJhbmdlICIwLi4zNjAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgT0RVRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMRFUgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgT0RVRnVuY3Rpb24gcmVwcmVzZW50cyB0aGUgRFUgY29tcG9uZW50IG9mIGEgZ05CIHRoYXQgcHJvdmlkZXMgdGhlIE5SQ2VsbERVLgogICAgICAgICAgICBBIE9EVUZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBtdXN0IGJlIHByb3ZpZGVkIGJ5IGFuIE9EVUZ1bmN0aW9uLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHByb3ZpZGVkLW5yQ2VsbER1IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tRFUgRnVuY3Rpb24gcHJvdmlkZXMgTlIgQ2VsbC1EVS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbC1EVSBwcm92aWRlZCBieSBPLURVIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBPRFVGVU5DVElPTl9QUk9WSURFU19OUlNFQ1RPUkNBUlJJRVIgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUlNlY3RvckNhcnJpZXIgdHlwZS4KICAgICAgICAgICAgVGhlIE9EVUZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIERVIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUlNlY3RvckNhcnJpZXIuCiAgICAgICAgICAgIEEgT0RVRnVuY3Rpb24gaW5zdGFuY2UgY2FuIHByb3ZpZGUgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgbXVzdCBiZSBwcm92aWRlZCBieSBhbiBPRFVGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uclNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBwcm92aWRlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgTy1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTlJTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE9DVUNQRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMQ1UgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbENVIHR5cGUuCiAgICAgICAgICAgIFRoZSBPQ1VDUEZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIENVLUNQIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUkNlbGxDVS4KICAgICAgICAgICAgQSBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsQ1UuCiAgICAgICAgICAgIEFuIE5SQ2VsbENVIGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQgYnkgYW4gT0NVQ1BGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uckNlbGxDdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLUNQIEZ1bmN0aW9uIHByb3ZpZGVzIE5SIENlbGwtQ1UuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE9DVUNQRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2N1Y3BGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLUNVIHByb3ZpZGVkIGJ5IE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SQ2VsbENVOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SQ0VMTERVX1VTRVNfTlJTRUNUT1JDQVJSSUVSIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTlJTZWN0b3JDYXJyaWVyIHR5cGUuCiAgICAgICAgICAgIFRoZSBOUkNlbGxEVSByZXByZXNlbnRzIHRoZSBjZWxsIHRoYXQgdXNlcyB0aGUgTlJTZWN0b3JDYXJyaWVyLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gdXNlIG1hbnkgTlJTZWN0b3JDYXJyaWVycy4KICAgICAgICAgICAgQW4gTlJTZWN0b3JDYXJyaWVyIGluc3RhbmNlIGNhbiBvbmx5IGJlIHVzZWQgYnkgb25lIE5SQ2VsbERVLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHVzZWQtbnJTZWN0b3JDYXJyaWVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIENlbGwtRFUgdXNlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTlJDZWxsRFU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdXNlZC1ieS1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBTZWN0b3IgQ2FycmllciB1c2VkIGJ5IE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SU0VDVE9SQ0FSUklFUl9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SU2VjdG9yQ2FycmllciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFDYXBhYmlsaXR5IHR5cGUuCiAgICAgICAgICAgIFRoZSBOUlNlY3RvckNhcnJpZXIgcmVwcmVzZW50cyB0aGUgY2FycmllciB0aGF0IHVzZXMgdGhlIEFudGVubmFDYXBhYmlsaXR5LgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgY2FuIHVzZSBvbmx5IG9uZSBBbnRlbm5hQ2FwYWJpbGl0eS4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHVzZWQgYnkgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiB1c2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFNlY3RvciBDYXJyaWVyIHVzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBOUlNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCB1c2VkLWJ5LW5yU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgdXNlZCBieSBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX05SQ0VMTERVIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNlY3RvciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBTZWN0b3IgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGFyZWEgdGhhdCBncm91cHMgdGhlIE5SQ2VsbERVcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gb25seSBiZSBncm91cGVkIGJ5IG9uZSBTZWN0b3IuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgZ3JvdXBlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIFNlY3RvcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBncm91cGVkLWJ5LXNlY3RvciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIGdyb3VwZWQgYnkgU2VjdG9yLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
o-ran-smo-teiv-rel-cloud-ran urn:o-ran:smo-teiv-rel-cloud-ran REL_CLOUD_RAN ["o-ran-smo-teiv-cloud", "o-ran-smo-teiv-ran"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1jbG91ZC1yYW4gewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LXJlbC1jbG91ZC1yYW4iOwogICAgcHJlZml4IG9yLXRlaXYtY2xvdWR0b3JhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY2xvdWQge3ByZWZpeCBvci10ZWl2LWNsb3VkOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LXJhbiB7cHJlZml4IG9yLXRlaXYtcmFuOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBDbG91ZCB0byBSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIENsb3VkIHRvIFJBTiBMb2dpY2FsIHRvcG9sb2d5IHJlbGF0aW9ucy4KCiAgICAgICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICAgICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICAgICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICAgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICAgICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgICAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgICAgICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogICAgICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0xMC0wNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBncm91cGluZywgT3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycCB0byB0aGUgdG9wb2xvZ3kgb2JqZWN0LiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTAyIiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDctMTUiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyByZXZpc2lvbiBhbGlnbnMgTy1SQU4gV29yayBHcm91cCAxMCBTdGFnZSAyIFNwZWNpZmljYXRpb24gKE8tUkFOLldHMTAuVEUmSVYtQ0lNSS4wLVIwMDQudjAyLjAwKSI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkVMX0NMT1VEX1JBTjsKCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfT0RVRlVOQ1RJT04geyAvLyAwLi5uIHRvIDAuLm0KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1vZHVGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLURVIEZ1bmN0aW9uIHNlcnZpY2VkIGJ5IHRoaXMgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1jbG91ZDpORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLW5GRGVwbG95bWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IHRoYXQgc2VydmVzIHRoaXMgTy1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBORkRFUExPWU1FTlRfU0VSVkVTX09DVUNQRlVOQ1RJT04geyAvLyAwLi5uIHRvIDAuLm0KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1vY3VjcEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tQ1UtQ1AgRnVuY3Rpb24gc2VydmljZWQgYnkgdGhpcyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWNsb3VkOk5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctbkZEZXBsb3ltZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgdGhhdCBzZXJ2ZXMgdGhpcyBPLUNVLUNQIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpPQ1VDUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX1NFUlZFU19PQ1VVUEZVTkNUSU9OIHsgLy8gMC4ubiB0byAwLi5tCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3Qgc2VydmljZWQtb2N1dXBGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLVVQIEZ1bmN0aW9uIHNlcnZpY2VkIGJ5IHRoaXMgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1jbG91ZDpORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLW5GRGVwbG95bWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IHRoYXQgc2VydmVzIHRoaXMgTy1DVS1VUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0NVVVBGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5GREVQTE9ZTUVOVF9TRVJWRVNfTkVBUlJUUklDRlVOQ1RJT04geyAvLyAwLi5uIHRvIDAuLm0KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1uZWFyUlRSSUNGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOZWFyUlRSSUNGdW5jdGlvbiBzZXJ2aWNlZCBieSB0aGlzIE5GIERlcGxveW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtY2xvdWQ6TkZEZXBsb3ltZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTkYgRGVwbG95bWVudCB0aGF0IHNlcnZlcyB0aGlzIE5lYXJSVFJJQ0Z1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpOZWFyUlRSSUNGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
-o-ran-smo-teiv-rel-equipment-ran urn:o-ran:smo-teiv-rel-equipment-ran REL_EQUIPMENT_RAN ["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1lcXVpcG1lbnQtcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtZXF1aXBtZW50LXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtZXF1aXByYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHsgcHJlZml4IG9yLXRlaXYtZXF1aXA7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtcmFuIHsgcHJlZml4IG9yLXRlaXYtcmFuOyB9CgoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbiAKICAgICJSQU4gRXF1aXBtZW50IHRvIExvZ2ljYWwgdG9wb2xvZ3kgbW9kZWwuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIEVxdWlwbWVudCB0byBMb2dpY2FsIHRvcG9sb2d5CiAgICBlbnRpdGllcyBhbmQgcmVsYXRpb25zLgoKICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9TRVJWRVNfTlJDRUxMRFUuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkVMX0VRVUlQTUVOVF9SQU47CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BTU9EVUxFX1NFUlZFU19BTlRFTk5BQ0FQQUJJTElUWSB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBBbnRlbm5hTW9kdWxlIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYUNhcGFiaWxpdHkgdHlwZS4KICAgICAgICAgICAgVGhlIEFudGVubmFNb2R1bGUgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgYW50ZW5uYSB0aGF0IHNlcnZlcyB0aGUgQW50ZW5uYUNhcGFiaWxpdHkuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIHNlcnZlIG1hbnkgQW50ZW5uYUNhcGFiaWxpdGllcy4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHNlcnZlZCBieSBtYW55IEFudGVubmFNb2R1bGVzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHNlcnZpY2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSBzZXJ2aWNlZCBieSB0aGlzIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWVxdWlwOkFudGVubmFNb2R1bGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLWFudGVubmFNb2R1bGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgc2VydmVzIHRoaXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpBbnRlbm5hQ2FwYWJpbGl0eTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFNT0RVTEVfU0VSVkVTX05SQ0VMTERVIHsgLy8gMS4ubiB0byAwLi5tCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFNb2R1bGUgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgQW50ZW5uYU1vZHVsZSByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBhbnRlbm5hIHRoYXQgc2VydmVzIHRoZSBOUkNlbGxEVS4KICAgICAgICAgICAgQW4gQW50ZW5uYU1vZHVsZSBpbnN0YW5jZSBjYW4gc2VydmUgbWFueSBOUkNlbGxEVXMuCiAgICAgICAgICAgIEFuIE5SQ2VsbERVIGluc3RhbmNlIGNhbiBiZSBzZXJ2ZWQgYnkgbWFueSBBbnRlbm5hTW9kdWxlcy4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIHNlcnZpY2VkIGJ5IHRoaXMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBzZXJ2ZXMgdGhpcyBOUiBDZWxsLURVLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX0FOVEVOTkFNT0RVTEUgeyAvLyAwLi4xIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU2VjdG9yIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYU1vZHVsZSB0eXBlLgogICAgICAgICAgICBUaGUgU2VjdG9yIHJlcHJlc2VudHMgdGhlIGdlb2dyYXBoaWNhbCBhcmVhIHRoYXQgZ3JvdXBzIHRoZSBBbnRlbm5hTW9kdWxlcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgQW50ZW5uYU1vZHVsZXMuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIG9ubHkgYmUgZ3JvdXBlZCBieSBvbmUgU2VjdG9yLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGdyb3VwZWQtYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LXJhbjpTZWN0b3I7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgZ3JvdXBlZC1ieS1zZWN0b3IgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgZ3JvdXBlZCBieSBTZWN0b3IuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
+o-ran-smo-teiv-rel-equipment-ran urn:o-ran:smo-teiv-rel-equipment-ran REL_EQUIPMENT_RAN ["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1lcXVpcG1lbnQtcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtZXF1aXBtZW50LXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtZXF1aXByYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHsgcHJlZml4IG9yLXRlaXYtZXF1aXA7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtcmFuIHsgcHJlZml4IG9yLXRlaXYtcmFuOyB9CgoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbiAKICAgICJSQU4gRXF1aXBtZW50IHRvIExvZ2ljYWwgdG9wb2xvZ3kgbW9kZWwuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgUkFOIEVxdWlwbWVudCB0byBMb2dpY2FsIHRvcG9sb2d5CiAgICBlbnRpdGllcyBhbmQgcmVsYXRpb25zLgoKICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFkZGVkIG5ldyByZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9TRVJWRVNfTlJDRUxMRFUuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gUkVMX0VRVUlQTUVOVF9SQU47CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBBTlRFTk5BTU9EVUxFX1NFUlZFU19BTlRFTk5BQ0FQQUJJTElUWSB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBBbnRlbm5hTW9kdWxlIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYUNhcGFiaWxpdHkgdHlwZS4KICAgICAgICAgICAgVGhlIEFudGVubmFNb2R1bGUgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgYW50ZW5uYSB0aGF0IHNlcnZlcyB0aGUgQW50ZW5uYUNhcGFiaWxpdHkuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIHNlcnZlIG1hbnkgQW50ZW5uYUNhcGFiaWxpdGllcy4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHNlcnZlZCBieSBtYW55IEFudGVubmFNb2R1bGVzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHNlcnZpY2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgQ2FwYWJpbGl0eSBzZXJ2aWNlZCBieSB0aGlzIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWVxdWlwOkFudGVubmFNb2R1bGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLWFudGVubmFNb2R1bGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgc2VydmVzIHRoaXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpBbnRlbm5hQ2FwYWJpbGl0eTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEFOVEVOTkFNT0RVTEVfU0VSVkVTX05SQ0VMTERVIHsgLy8gMS4ubiB0byAwLi5tCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFNb2R1bGUgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgQW50ZW5uYU1vZHVsZSByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBhbnRlbm5hIHRoYXQgc2VydmVzIHRoZSBOUkNlbGxEVS4KICAgICAgICAgICAgQW4gQW50ZW5uYU1vZHVsZSBpbnN0YW5jZSBjYW4gc2VydmUgbWFueSBOUkNlbGxEVXMuCiAgICAgICAgICAgIEFuIE5SQ2VsbERVIGluc3RhbmNlIGNhbiBiZSBzZXJ2ZWQgYnkgbWFueSBBbnRlbm5hTW9kdWxlcy4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIHNlcnZpY2VkIGJ5IHRoaXMgQW50ZW5uYSBNb2R1bGUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNlcnZpbmctYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIE1vZHVsZSBzZXJ2ZXMgdGhpcyBOUiBDZWxsLURVLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX0FOVEVOTkFNT0RVTEUgeyAvLyAwLi4xIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU2VjdG9yIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgQW50ZW5uYU1vZHVsZSB0eXBlLgogICAgICAgICAgICBUaGUgU2VjdG9yIHJlcHJlc2VudHMgdGhlIGdlb2dyYXBoaWNhbCBhcmVhIHRoYXQgZ3JvdXBzIHRoZSBBbnRlbm5hTW9kdWxlcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgQW50ZW5uYU1vZHVsZXMuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIG9ubHkgYmUgZ3JvdXBlZCBieSBvbmUgU2VjdG9yLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGdyb3VwZWQtYW50ZW5uYU1vZHVsZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LXJhbjpTZWN0b3I7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgZ3JvdXBlZC1ieS1zZWN0b3IgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQW50ZW5uYSBNb2R1bGUgZ3JvdXBlZCBieSBTZWN0b3IuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtZXF1aXA6QW50ZW5uYU1vZHVsZTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
o-ran-smo-teiv-rel-oam-cloud urn:o-ran:smo-teiv-rel-oam-cloud REL_OAM_CLOUD ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-cloud"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1vYW0tY2xvdWQgewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LXJlbC1vYW0tY2xvdWQiOwogICAgcHJlZml4IG9yLXRlaXYtb2FtdG9jbG91ZDsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtb2FtIHtwcmVmaXggb3ItdGVpdi1vYW07IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY2xvdWQge3ByZWZpeCBvci10ZWl2LWNsb3VkOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBPJk0gdG8gQ2xvdWQgdG9wb2xvZ3kgbW9kZWwuCgogICAgICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIFJBTiBPJk0gdG8gQ2xvdWQgdG9wb2xvZ3kgcmVsYXRpb25zCgogICAgICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA3LTE1IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcmV2aXNpb24gYWxpZ25zIE8tUkFOIFdvcmsgR3JvdXAgMTAgU3RhZ2UgMiBTcGVjaWZpY2F0aW9uIChPLVJBTi5XRzEwLlRFJklWLUNJTUkuMC1SMDA0LnYwMi4wMCkiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9PQU1fQ0xPVUQ7CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBNQU5BR0VERUxFTUVOVF9ERVBMT1lFRF9BU19DTE9VRElGSUVETkYgeyAgLy8gMC4uMSB0byAxCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGRlcGxveWVkLWFzLWNsb3VkaWZpZWRORiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYW5hZ2VkIEVsZW1lbnQgZGVwbG95ZWQgYXMgQ2xvdWRpZmllZCBORi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgZGVwbG95ZWQtbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2xvdWRpZmllZCBORiBkZXBsb3lzIE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1jbG91ZDpDbG91ZGlmaWVkTkY7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX1NFUlZFU19NQU5BR0VERUxFTUVOVCB7IC8vIDEuLm4gdG8gMQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiBzZXJ2aWNlZC1tYW5hZ2VkRWxlbWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNYW5hZ2VkIEVsZW1lbnQgc2VydmljZWQgYnkgdGhpcyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBvci10ZWl2LWNsb3VkOk5GRGVwbG95bWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aW5nLW5GRGVwbG95bWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IHRoYXQgc2VydmVzIHRoaXMgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LW9hbTpNYW5hZ2VkRWxlbWVudDsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgICB9CiAgICB9Cn0=
-o-ran-smo-teiv-rel-oam-ran urn:o-ran:smo-teiv-rel-oam-ran REL_OAM_RAN ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-ran"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1vYW0tcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtb2FtLXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtb2FtcmFuOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LW9hbSB7IHByZWZpeCBvci10ZWl2LW9hbTsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1yYW4geyBwcmVmaXggb3ItdGVpdi1yYW47IH0KCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICAgICAiUkFOIE8mTSB0byBMb2dpY2FsIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBSQU4gTyZNIHRvIExvZ2ljYWwgdG9wb2xvZ3kgcmVsYXRpb25zCgogICAgICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjUuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNy0xNSIgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHJldmlzaW9uIGFsaWducyBPLVJBTiBXb3JrIEdyb3VwIDEwIFN0YWdlIDIgU3BlY2lmaWNhdGlvbiAoTy1SQU4uV0cxMC5URSZJVi1DSU1JLjAtUjAwNC52MDIuMDApIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9PQU1fUkFOOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PRFVGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE9EVUZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0RVRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9EVUZ1bmN0aW9ucy4KICAgICAgICAgICAgQW4gT0RVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9kdUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tRFUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PQ1VDUEZVTkNUSU9OIHsgICAgLy8gMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE1hbmFnZWRFbGVtZW50IHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9DVUNQRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9DVUNQRnVuY3Rpb25zLgogICAgICAgICAgICBBbiBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIG11c3QgYmUgbWFuYWdlZCBieSBvbmUgTWFuYWdlZEVsZW1lbnQuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbWFuYWdlZC1vY3VjcEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1DVS1DUCBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0NVQ1BGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBNQU5BR0VERUxFTUVOVF9NQU5BR0VTX09DVVVQRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPQ1VVUEZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0NVVVBGdW5jdGlvbi4KICAgICAgICAgICAgQSBNYW5hZ2VkRWxlbWVudCBpbnN0YW5jZSBjYW4gbWFuYWdlIG1hbnkgT0NVVVBGdW5jdGlvbnMuCiAgICAgICAgICAgIEFuIE9DVVVQRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9jdXVwRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTy1DVS1VUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgbWFuYWdlZC1ieS1tYW5hZ2VkRWxlbWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLVVQIEZ1bmN0aW9uIG1hbmFnZWQgYnkgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpPQ1VVUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE1BTkFHRURFTEVNRU5UX01BTkFHRVNfT1JVRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPUlVGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9SVUZ1bmN0aW9uLgogICAgICAgICAgICBBIE1hbmFnZWRFbGVtZW50IGluc3RhbmNlIGNhbiBtYW5hZ2UgbWFueSBPUlVGdW5jdGlvbi4KICAgICAgICAgICAgQW4gT1JVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9ydUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tUlUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1SVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T1JVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19ORUFSUlRSSUNGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5lYXJSVFJJQ0Z1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgTmVhclJUUklDRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE5lYXJSVFJJQ0Z1bmN0aW9uLgogICAgICAgICAgICBBbiBOZWFyUlRSSUNGdW5jdGlvbiBpbnN0YW5jZSBtdXN0IGJlIG1hbmFnZWQgYnkgb25lIE1hbmFnZWRFbGVtZW50LgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IG1hbmFnZWQtbmVhclJUUklDRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTmVhciBSVCBSSUMgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmVhciBSVCBSSUMgRnVuY3Rpb24gbWFuYWdlZCBieSBNYW5hZ2VkIEVsZW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOk5lYXJSVFJJQ0Z1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KfQ==
+o-ran-smo-teiv-rel-oam-ran urn:o-ran:smo-teiv-rel-oam-ran REL_OAM_RAN ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-ran"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1vYW0tcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtb2FtLXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtb2FtcmFuOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LW9hbSB7IHByZWZpeCBvci10ZWl2LW9hbTsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1yYW4geyBwcmVmaXggb3ItdGVpdi1yYW47IH0KCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICAgICAiUkFOIE8mTSB0byBMb2dpY2FsIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBSQU4gTyZNIHRvIExvZ2ljYWwgdG9wb2xvZ3kgcmVsYXRpb25zCgogICAgICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjUuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNy0xNSIgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHJldmlzaW9uIGFsaWducyBPLVJBTiBXb3JrIEdyb3VwIDEwIFN0YWdlIDIgU3BlY2lmaWNhdGlvbiAoTy1SQU4uV0cxMC5URSZJVi1DSU1JLjAtUjAwNC52MDIuMDApIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9PQU1fUkFOOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PRFVGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE9EVUZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0RVRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9EVUZ1bmN0aW9ucy4KICAgICAgICAgICAgQW4gT0RVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9kdUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tRFUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PQ1VDUEZVTkNUSU9OIHsgICAgLy8gMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE1hbmFnZWRFbGVtZW50IHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9DVUNQRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9DVUNQRnVuY3Rpb25zLgogICAgICAgICAgICBBbiBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIG11c3QgYmUgbWFuYWdlZCBieSBvbmUgTWFuYWdlZEVsZW1lbnQuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbWFuYWdlZC1vY3VjcEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1DVS1DUCBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0NVQ1BGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBNQU5BR0VERUxFTUVOVF9NQU5BR0VTX09DVVVQRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPQ1VVUEZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0NVVVBGdW5jdGlvbi4KICAgICAgICAgICAgQSBNYW5hZ2VkRWxlbWVudCBpbnN0YW5jZSBjYW4gbWFuYWdlIG1hbnkgT0NVVVBGdW5jdGlvbnMuCiAgICAgICAgICAgIEFuIE9DVVVQRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9jdXVwRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTy1DVS1VUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgbWFuYWdlZC1ieS1tYW5hZ2VkRWxlbWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLVVQIEZ1bmN0aW9uIG1hbmFnZWQgYnkgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpPQ1VVUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE1BTkFHRURFTEVNRU5UX01BTkFHRVNfT1JVRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPUlVGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9SVUZ1bmN0aW9uLgogICAgICAgICAgICBBIE1hbmFnZWRFbGVtZW50IGluc3RhbmNlIGNhbiBtYW5hZ2UgbWFueSBPUlVGdW5jdGlvbi4KICAgICAgICAgICAgQW4gT1JVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9ydUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tUlUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1SVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T1JVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19ORUFSUlRSSUNGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5lYXJSVFJJQ0Z1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgTmVhclJUUklDRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE5lYXJSVFJJQ0Z1bmN0aW9uLgogICAgICAgICAgICBBbiBOZWFyUlRSSUNGdW5jdGlvbiBpbnN0YW5jZSBtdXN0IGJlIG1hbmFnZWQgYnkgb25lIE1hbmFnZWRFbGVtZW50LgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IG1hbmFnZWQtbmVhclJUUklDRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTmVhciBSVCBSSUMgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmVhciBSVCBSSUMgRnVuY3Rpb24gbWFuYWdlZCBieSBNYW5hZ2VkIEVsZW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOk5lYXJSVFJJQ0Z1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KfQ==
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
o-ran-smo-teiv-cloud_CloudifiedNF CloudifiedNF o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-cloud_NFDeployment NFDeployment o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-cloud_NodeCluster NodeCluster o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-ran_Sector Sector o-ran-smo-teiv-ran ["azimuth", "geo-location", "sectorId"]
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
ANTENNAMODULE_INSTALLED_AT_SITE installed-at-site AntennaModule o-ran-smo-teiv-equipment 0 9223372036854775807 installed-antennaModule Site o-ran-smo-teiv-equipment 0 1 BI_DIRECTIONAL false A_SIDE o-ran-smo-teiv-equipment_AntennaModule o-ran-smo-teiv-equipment
ANTENNAMODULE_SERVES_ANTENNACAPABILITY serviced-antennaCapability AntennaModule o-ran-smo-teiv-equipment 0 9223372036854775807 serving-antennaModule AntennaCapability o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY o-ran-smo-teiv-rel-equipment-ran
ANTENNAMODULE_SERVES_NRCELLDU serviced-nrCellDu AntennaModule o-ran-smo-teiv-equipment 1 9223372036854775807 serving-antennaModule NRCellDU o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU o-ran-smo-teiv-rel-equipment-ran
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO topology_exposure_user;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO topology_exposure_user;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO topology_exposure_user;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO topology_exposure_user;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE topology_exposure_user;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE OR REPLACE FUNCTION ties_data.create_enum_type(
+CREATE OR REPLACE FUNCTION teiv_data.create_enum_type(
schema_name TEXT, type_name TEXT, enum_values TEXT[]
) RETURNS VOID AS $$
BEGIN
END;
$$ language 'plpgsql';
-SELECT ties_data.create_enum_type('ties_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
+SELECT teiv_data.create_enum_type('teiv_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
-CREATE TABLE IF NOT EXISTS ties_data."responsible_adapter" (
+CREATE TABLE IF NOT EXISTS teiv_data."responsible_adapter" (
"id" TEXT,
"hashed_id" BYTEA
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'PK_responsible_adapter_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'UNIQUE_responsible_adapter_hashed_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
-);CREATE TABLE IF NOT EXISTS ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" (
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
+);CREATE TABLE IF NOT EXISTS teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_NearRTRICFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
+CREATE TABLE IF NOT EXISTS teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
"id" TEXT,
"aSide_AntennaModule" TEXT,
"bSide_AntennaCapability" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCloudNamespace" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NFDeployment" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NFDeployment" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"REL_metadata_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" (
"id" TEXT,
"aSide_NodeCluster" TEXT,
"bSide_OCloudSite" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NodeCluster" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NodeCluster" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"REL_metadata_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_OCloudSite" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_OCloudSite" (
"id" TEXT,
"geo-location" geography,
"name" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_AntennaModule" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-equipment_AntennaModule" (
"id" TEXT,
"antennaBeamWidth" jsonb,
"antennaModelNumber" TEXT,
"REL_metadata_SECTOR_GROUPS_ANTENNAMODULE" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_Site" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-equipment_Site" (
"id" TEXT,
"geo-location" geography,
"name" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-oam_ManagedElement" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-oam_ManagedElement" (
"id" TEXT,
"CD_sourceIds" jsonb,
"CD_classifiers" jsonb,
"REL_metadata_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_AntennaCapability" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_AntennaCapability" (
"id" TEXT,
"eUtranFqBands" jsonb,
"geranFqBands" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRCellCU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRCellCU" (
"id" TEXT,
"cellLocalId" INTEGER,
"nCI" BIGINT,
"REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRCellDU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRCellDU" (
"id" TEXT,
"cellLocalId" INTEGER,
"nCI" BIGINT,
"REL_metadata_SECTOR_GROUPS_NRCELLDU" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" (
"id" TEXT,
"arfcnDL" INTEGER,
"arfcnUL" INTEGER,
"REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" (
"id" TEXT,
"nearRtRicId" BIGINT,
"pLMNId" jsonb,
"REL_metadata_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_OCUCPFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" (
"id" TEXT,
"gNBCUName" TEXT,
"gNBId" BIGINT,
"REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_OCUUPFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" (
"id" TEXT,
"gNBId" BIGINT,
"gNBIdLength" INTEGER,
"REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ODUFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ODUFunction" (
"id" TEXT,
"dUpLMNId" jsonb,
"gNBDUId" BIGINT,
"REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ORUFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ORUFunction" (
"id" TEXT,
"oruId" BIGINT,
"CD_sourceIds" jsonb,
"REL_metadata_MANAGEDELEMENT_MANAGES_ORUFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"geo-location" geography,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCUCPFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCUUPFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_ODUFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" (
"id" TEXT,
"aSide_AntennaModule" TEXT,
"bSide_NRCellDU" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_CloudifiedNF',
'PK_o-ran-smo-teiv-cloud_CloudifiedNF_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_CloudifiedNF_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_CloudifiedNF_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'PK_o-ran-smo-teiv-cloud_NFDeployment_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NFDeployment_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NFDeployment_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NodeCluster',
'PK_o-ran-smo-teiv-cloud_NodeCluster_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NodeCluster" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NodeCluster_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NodeCluster_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'PK_o-ran-smo-teiv-cloud_OCloudNamespace_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudNamespace_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudNamespace_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudSite',
'PK_o-ran-smo-teiv-cloud_OCloudSite_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudSite" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudSite_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudSite_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'PK_o-ran-smo-teiv-equipment_AntennaModule_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_Site',
'PK_o-ran-smo-teiv-equipment_Site_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_Site" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_Site_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_Site" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_Site_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'PK_o-ran-smo-teiv-oam_ManagedElement_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "PK_o-ran-smo-teiv-oam_ManagedElement_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "PK_o-ran-smo-teiv-oam_ManagedElement_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_AntennaCapability',
'PK_o-ran-smo-teiv-ran_AntennaCapability_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'PK_o-ran-smo-teiv-ran_NRCellCU_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellCU_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellCU_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'PK_o-ran-smo-teiv-ran_NRCellDU_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellDU_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellDU_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'PK_o-ran-smo-teiv-ran_NRSectorCarrier_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRSectorCarrier_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRSectorCarrier_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'PK_o-ran-smo-teiv-ran_NearRTRICFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NearRTRICFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NearRTRICFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'PK_o-ran-smo-teiv-ran_OCUCPFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUCPFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUCPFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'PK_o-ran-smo-teiv-ran_OCUUPFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUUPFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUUPFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'PK_o-ran-smo-teiv-ran_ODUFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ODUFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ODUFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'PK_o-ran-smo-teiv-ran_ORUFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ORUFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ORUFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_Sector',
'PK_o-ran-smo-teiv-ran_Sector_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_Sector" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_Sector" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'PK_E551D02D14B3C04A565DC73A386BEB29627D3C08',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "PK_E551D02D14B3C04A565DC73A386BEB29627D3C08" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "PK_E551D02D14B3C04A565DC73A386BEB29627D3C08" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'PK_F41873285F3BD831F63C6041B4356A063403406D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "PK_F41873285F3BD831F63C6041B4356A063403406D" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "PK_F41873285F3BD831F63C6041B4356A063403406D" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5" FOREIGN KEY ("bSide_NearRTRICFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ("id");'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5" FOREIGN KEY ("bSide_NearRTRICFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'FK_A08D274894ECB6799E56C2089A494AF0345B9B16',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_A08D274894ECB6799E56C2089A494AF0345B9B16" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_A08D274894ECB6799E56C2089A494AF0345B9B16" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F" FOREIGN KEY ("bSide_OCloudNamespace") REFERENCES ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F" FOREIGN KEY ("bSide_OCloudNamespace") REFERENCES teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0" FOREIGN KEY ("REL_FK_comprised-by-cloudifiedNF") REFERENCES ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0" FOREIGN KEY ("REL_FK_comprised-by-cloudifiedNF") REFERENCES teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC" UNIQUE ("REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC" UNIQUE ("REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9" FOREIGN KEY ("REL_FK_serviced-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9" FOREIGN KEY ("REL_FK_serviced-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC" UNIQUE ("REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC" UNIQUE ("REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92" FOREIGN KEY ("aSide_NodeCluster") REFERENCES ties_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92" FOREIGN KEY ("aSide_NodeCluster") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'FK_888BF6FF782916E61B3FE80643A549A1CFDB6117',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_888BF6FF782916E61B3FE80643A549A1CFDB6117" FOREIGN KEY ("bSide_OCloudSite") REFERENCES ties_data."o-ran-smo-teiv-cloud_OCloudSite" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_888BF6FF782916E61B3FE80643A549A1CFDB6117" FOREIGN KEY ("bSide_OCloudSite") REFERENCES teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF" FOREIGN KEY ("REL_FK_deployed-on-nodeCluster") REFERENCES ties_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF" FOREIGN KEY ("REL_FK_deployed-on-nodeCluster") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0" UNIQUE ("REL_ID_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0" UNIQUE ("REL_ID_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC" FOREIGN KEY ("REL_FK_installed-at-site") REFERENCES ties_data."o-ran-smo-teiv-equipment_Site" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC" FOREIGN KEY ("REL_FK_installed-at-site") REFERENCES teiv_data."o-ran-smo-teiv-equipment_Site" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1" UNIQUE ("REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1" UNIQUE ("REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'FK_078764B2F3D613D44CC6E3586F564C83164D2481',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_078764B2F3D613D44CC6E3586F564C83164D2481" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."o-ran-smo-teiv-ran_Sector" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_078764B2F3D613D44CC6E3586F564C83164D2481" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES teiv_data."o-ran-smo-teiv-ran_Sector" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0" UNIQUE ("REL_ID_SECTOR_GROUPS_ANTENNAMODULE");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0" UNIQUE ("REL_ID_SECTOR_GROUPS_ANTENNAMODULE");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'FK_899B8130A861D1450FC49D3159D8B29C0628A717',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "FK_899B8130A861D1450FC49D3159D8B29C0628A717" FOREIGN KEY ("REL_FK_deployed-as-cloudifiedNF") REFERENCES ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "FK_899B8130A861D1450FC49D3159D8B29C0628A717" FOREIGN KEY ("REL_FK_deployed-as-cloudifiedNF") REFERENCES teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708" UNIQUE ("REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708" UNIQUE ("REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction" FOREIGN KEY ("REL_FK_provided-by-ocucpFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction" FOREIGN KEY ("REL_FK_provided-by-ocucpFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497" UNIQUE ("REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497" UNIQUE ("REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."o-ran-smo-teiv-ran_Sector" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES teiv_data."o-ran-smo-teiv-ran_Sector" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4" UNIQUE ("REL_ID_SECTOR_GROUPS_NRCELLDU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4" UNIQUE ("REL_ID_SECTOR_GROUPS_NRCELLDU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu" FOREIGN KEY ("REL_FK_used-by-nrCellDu") REFERENCES ties_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu" FOREIGN KEY ("REL_FK_used-by-nrCellDu") REFERENCES teiv_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25" UNIQUE ("REL_ID_NRCELLDU_USES_NRSECTORCARRIER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25" UNIQUE ("REL_ID_NRCELLDU_USES_NRSECTORCARRIER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_65D538D54EB33081C808540235FEB28823428E64',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_65D538D54EB33081C808540235FEB28823428E64" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_65D538D54EB33081C808540235FEB28823428E64" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192" UNIQUE ("REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192" UNIQUE ("REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'UNIQUE_E020461673334EB824643649B6B31670FB064EC8',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "UNIQUE_E020461673334EB824643649B6B31670FB064EC8" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "UNIQUE_E020461673334EB824643649B6B31670FB064EC8" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'FK_122DD9709032528D161177B3624AD7AAF6589005',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "FK_122DD9709032528D161177B3624AD7AAF6589005" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "FK_122DD9709032528D161177B3624AD7AAF6589005" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6" FOREIGN KEY ("bSide_OCUCPFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6" FOREIGN KEY ("bSide_OCUCPFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'FK_8585D545BC37A473A298E0F5F5942F897A7105B1',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_8585D545BC37A473A298E0F5F5942F897A7105B1" FOREIGN KEY ("bSide_OCUUPFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_8585D545BC37A473A298E0F5F5942F897A7105B1" FOREIGN KEY ("bSide_OCUUPFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08" FOREIGN KEY ("bSide_ODUFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08" FOREIGN KEY ("bSide_ODUFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649" FOREIGN KEY ("aSide_AntennaModule") REFERENCES teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'FK_8605800A4923C52258A8CE3989E18A7C93D22E8C',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_8605800A4923C52258A8CE3989E18A7C93D22E8C" FOREIGN KEY ("bSide_NRCellDU") REFERENCES ties_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_8605800A4923C52258A8CE3989E18A7C93D22E8C" FOREIGN KEY ("bSide_NRCellDU") REFERENCES teiv_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
);
-CREATE INDEX IF NOT EXISTS "IDX_996D2C34C2458A6EFE8599C1A0E6942D3D288B7A" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_996D2C34C2458A6EFE8599C1A0E6942D3D288B7A" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F52FEEDBAF1B04D2D22EBAE051BB5125DF6A6968" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F52FEEDBAF1B04D2D22EBAE051BB5125DF6A6968" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D333FA5882890B7CD3599712FFFB2641B9E04C80" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_D333FA5882890B7CD3599712FFFB2641B9E04C80" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_9EDB5C47201FC82A4565BFED9EF369D6C6529B19" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_9EDB5C47201FC82A4565BFED9EF369D6C6529B19" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_BD96130868B69147B2F87B0D15F5829690DEF454" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_BD96130868B69147B2F87B0D15F5829690DEF454" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_CloudifiedNF_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_CloudifiedNF_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_F97E398B17532BCD9923CE0CF98E73227D890037" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F97E398B17532BCD9923CE0CF98E73227D890037" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1BCFD9635C4FA089EDC2E18FFEF56DBF3C5E7A52" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1BCFD9635C4FA089EDC2E18FFEF56DBF3C5E7A52" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_4055A796F223DD01411AFFB5AD97EEEAB6B2320C" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_4055A796F223DD01411AFFB5AD97EEEAB6B2320C" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_6433B9B7D69E51E828BDCFCAF59729EDCD10DA60" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6433B9B7D69E51E828BDCFCAF59729EDCD10DA60" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_BED5B5FAA75FEE133E27581EAA611B89D20F24E1" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_BED5B5FAA75FEE133E27581EAA611B89D20F24E1" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NFDeployment_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NFDeployment_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_072EB0C094138AB2D90F9CFBDA765B3B464EE86F" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_072EB0C094138AB2D90F9CFBDA765B3B464EE86F" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_31F185F0F700C0AE11C5A9B8D28DBF6E37538635" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_31F185F0F700C0AE11C5A9B8D28DBF6E37538635" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_46CDB369134F042EC021F7496DF721B49A9D43C0" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");
+CREATE INDEX IF NOT EXISTS "IDX_46CDB369134F042EC021F7496DF721B49A9D43C0" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");
-CREATE INDEX IF NOT EXISTS "IDX_4DD95BAED8503502101FEB9ECA25DDA8F371816C" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_4DD95BAED8503502101FEB9ECA25DDA8F371816C" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1EE98ACCAE5537752BD51A3D5F6429585CC543F6" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1EE98ACCAE5537752BD51A3D5F6429585CC543F6" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_39A292C3C42B34C2AD7C2A0FD087739C253B06FC" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");
+CREATE INDEX IF NOT EXISTS "IDX_39A292C3C42B34C2AD7C2A0FD087739C253B06FC" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");
-CREATE INDEX IF NOT EXISTS "IDX_1D7F9BD4B5BBF73CC3D06D949731DC169DDED26D" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1D7F9BD4B5BBF73CC3D06D949731DC169DDED26D" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_29702D5C8D0B9B20BFB534FA233B9D9FADC2E3A1" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_29702D5C8D0B9B20BFB534FA233B9D9FADC2E3A1" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_98A32BE3A8C1FF8CDEC95561DE4A74852FE70322" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_98A32BE3A8C1FF8CDEC95561DE4A74852FE70322" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_DC1829E4241BA7C9B3E5281AC0DF00A766F9452E" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DC1829E4241BA7C9B3E5281AC0DF00A766F9452E" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_CB29E8DDA990051B2A3DF193D8E4912F25D5FA0D" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_CB29E8DDA990051B2A3DF193D8E4912F25D5FA0D" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NodeCluster_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NodeCluster_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_1B8DF6B061E229E5B6AC796911E6C8C23ECAD585" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1B8DF6B061E229E5B6AC796911E6C8C23ECAD585" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_57EB74DEF745DE4BA9AAD8E735BACB71F2E8C417" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_57EB74DEF745DE4BA9AAD8E735BACB71F2E8C417" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudNamespace_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudNamespace_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_A7A50200F582AB86EF483F9BA74F999F17B7F653" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A7A50200F582AB86EF483F9BA74F999F17B7F653" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6EE081E80342904B676496DA42DFAEC3EDA2CE27" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6EE081E80342904B676496DA42DFAEC3EDA2CE27" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_9AB8994DE0826F790D70614D4C52DD270AEF946B" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");
+CREATE INDEX IF NOT EXISTS "IDX_9AB8994DE0826F790D70614D4C52DD270AEF946B" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");
-CREATE INDEX IF NOT EXISTS "IDX_30C83E5F8447D28D8E2A73048DF751C886AF318B" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_30C83E5F8447D28D8E2A73048DF751C886AF318B" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_281A2DE604D25D6CFECB9B26D1FF70429FDB0FD0" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_281A2DE604D25D6CFECB9B26D1FF70429FDB0FD0" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudSite_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudSite_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_F497DEC01DA066CB09DA2AA7EDE3F4410078491B" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F497DEC01DA066CB09DA2AA7EDE3F4410078491B" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_17E417F7EF56809674BE1D5F5154DCCE01E00A96" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_17E417F7EF56809674BE1D5F5154DCCE01E00A96" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2321BFA482AD2700F41E2BA359F6EB00F47601B9" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE");
+CREATE INDEX IF NOT EXISTS "IDX_2321BFA482AD2700F41E2BA359F6EB00F47601B9" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE");
-CREATE INDEX IF NOT EXISTS "IDX_5ABDB19E55A6BDEF33855F14CB1B3B8CF457912C" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5ABDB19E55A6BDEF33855F14CB1B3B8CF457912C" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_83B6347C0C0A005D5E3D856D973D3322DFEDEA35" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_83B6347C0C0A005D5E3D856D973D3322DFEDEA35" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6C6FBD69F47F41970595A8775DC99CA0F5E894A1" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE");
+CREATE INDEX IF NOT EXISTS "IDX_6C6FBD69F47F41970595A8775DC99CA0F5E894A1" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE");
-CREATE INDEX IF NOT EXISTS "IDX_102A50584376DE25B6BBD7157594C607A5C957F2" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_102A50584376DE25B6BBD7157594C607A5C957F2" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_EEBF1BC3344E97988232825777AB13FAB6C4F3F0" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_EEBF1BC3344E97988232825777AB13FAB6C4F3F0" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_Site_CD_decorators" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_Site_CD_decorators" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_DDD73D6F4004BF3A96AA118281EE3E565A922B47" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DDD73D6F4004BF3A96AA118281EE3E565A922B47" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_98AC4232BC02323E03416954215889CEE874A1E9" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_98AC4232BC02323E03416954215889CEE874A1E9" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-oam_ManagedElement_CD_decorators" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-oam_ManagedElement_CD_decorators" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_8065626F3F48D4E5A4285654739D3B26499E4C4E" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8065626F3F48D4E5A4285654739D3B26499E4C4E" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_634619CF7333EBC0AFDE990900B79220FC626EBA" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_634619CF7333EBC0AFDE990900B79220FC626EBA" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F15A070FC83B2E49223B4232E0BEB8931C2B7A4C" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");
+CREATE INDEX IF NOT EXISTS "IDX_F15A070FC83B2E49223B4232E0BEB8931C2B7A4C" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");
-CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_plmnId" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("plmnId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_plmnId" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("plmnId");
-CREATE INDEX IF NOT EXISTS "IDX_0C443A16285D233F16966C2F0314CDC9D0F6D0B8" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0C443A16285D233F16966C2F0314CDC9D0F6D0B8" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E5930226819982DC0CFC1FA64FB3600647222435" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E5930226819982DC0CFC1FA64FB3600647222435" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_6891C1BB8EE214340A362906C08955E8ACC1C597" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6891C1BB8EE214340A362906C08955E8ACC1C597" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D366F952FD4A52645C45A19CBFD02B8897FC1F18" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_D366F952FD4A52645C45A19CBFD02B8897FC1F18" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5D761303176D3B9338784DFBEE0CEC51046ADC30" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU");
+CREATE INDEX IF NOT EXISTS "IDX_5D761303176D3B9338784DFBEE0CEC51046ADC30" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU");
-CREATE INDEX IF NOT EXISTS "IDX_FFD60DD99D80C276F402E66546F5DACB2D81EE26" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FFD60DD99D80C276F402E66546F5DACB2D81EE26" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_C437D39632DC79BAB6AC4F0880826A05425F9C32" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_C437D39632DC79BAB6AC4F0880826A05425F9C32" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellDU_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellDU_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_B48D188E92ACBE9A2CAF8CD730A5DDFD7E086705" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B48D188E92ACBE9A2CAF8CD730A5DDFD7E086705" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A950BF337D5D820E5B39AC3F1B1AC09C062F30C9" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A950BF337D5D820E5B39AC3F1B1AC09C062F30C9" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F494CB3BA4C726D4C45D53B1EF62E1E26811CCEF" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU");
+CREATE INDEX IF NOT EXISTS "IDX_F494CB3BA4C726D4C45D53B1EF62E1E26811CCEF" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU");
-CREATE INDEX IF NOT EXISTS "IDX_6325926B4D2FDD1FBBB34250DABEA5E7229FF9F5" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6325926B4D2FDD1FBBB34250DABEA5E7229FF9F5" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7CB4A7724F68D1CB2D12E8DE779BA9103F7DBE0A" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_7CB4A7724F68D1CB2D12E8DE779BA9103F7DBE0A" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0A03C47C13AD3B5C84D3D8081493D670E9CBDCD1" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_NRCELLDU");
+CREATE INDEX IF NOT EXISTS "IDX_0A03C47C13AD3B5C84D3D8081493D670E9CBDCD1" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_NRCELLDU");
-CREATE INDEX IF NOT EXISTS "IDX_8E34EC0B1DE7DDCE3B32ADD85B11E15F95C5644E" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8E34EC0B1DE7DDCE3B32ADD85B11E15F95C5644E" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_050A80BEEF775E4D3CE216F282F23DB99DA2D798" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_050A80BEEF775E4D3CE216F282F23DB99DA2D798" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRSectorCarrier_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRSectorCarrier_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_7BFD17A71AB1B7765FE6431DA4E66C2EDE88AC3B" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_7BFD17A71AB1B7765FE6431DA4E66C2EDE88AC3B" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_ED50A5139F1449DBAD8DA10D45F5A5BF819EACBA" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_ED50A5139F1449DBAD8DA10D45F5A5BF819EACBA" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2ADB5C6DCAEE8811FB1CA8FD9EB53381F35FCB70" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER");
+CREATE INDEX IF NOT EXISTS "IDX_2ADB5C6DCAEE8811FB1CA8FD9EB53381F35FCB70" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER");
-CREATE INDEX IF NOT EXISTS "IDX_1F27C515A028616FAC422A02ABBEC402D5DBB2E5" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1F27C515A028616FAC422A02ABBEC402D5DBB2E5" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B975D24291849007D4AA6686C5D3983885D5C884" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B975D24291849007D4AA6686C5D3983885D5C884" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_902B73F741160B9D4FBF62406D3D9ABBECAD8BE7" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY");
+CREATE INDEX IF NOT EXISTS "IDX_902B73F741160B9D4FBF62406D3D9ABBECAD8BE7" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY");
-CREATE INDEX IF NOT EXISTS "IDX_986B2223E72FF79237337329F4C3BB9DA9025A34" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_986B2223E72FF79237337329F4C3BB9DA9025A34" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_FC70CCFDC1359B698BBBE5CA7AA158F0AF693461" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FC70CCFDC1359B698BBBE5CA7AA158F0AF693461" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5AB1D780E57D940C42BAD29772E9E2B6C63498A0" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");
+CREATE INDEX IF NOT EXISTS "IDX_5AB1D780E57D940C42BAD29772E9E2B6C63498A0" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_pLMNId" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("pLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_pLMNId" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("pLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_E4E40B26C322AF63A662706AF8B0B36E1043B793" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E4E40B26C322AF63A662706AF8B0B36E1043B793" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_8BCCF388DFC8652AD5CD0675C64F49D2D2EDC7A1" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8BCCF388DFC8652AD5CD0675C64F49D2D2EDC7A1" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_B608D8F6B8A79097EA61A1B4777A96CD3D2D1E98" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B608D8F6B8A79097EA61A1B4777A96CD3D2D1E98" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0ECC814A408874C9F8E73EEE3968984A6345A606" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0ECC814A408874C9F8E73EEE3968984A6345A606" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B10FD045A6C3E169953CCC38CC2D801FCE15A75F" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_B10FD045A6C3E169953CCC38CC2D801FCE15A75F" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_pLMNId" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("pLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_pLMNId" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("pLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_84A29F8571860AC5A7BD1A99923485ECB6A3939D" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_84A29F8571860AC5A7BD1A99923485ECB6A3939D" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_8D9862DBF6A721FABAEA4204E04B374692C1C5B8" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8D9862DBF6A721FABAEA4204E04B374692C1C5B8" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_4C6B5CB5CF018656DC8191CE6FE3B9DA2CD0C819" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_4C6B5CB5CF018656DC8191CE6FE3B9DA2CD0C819" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_21F2560C8330A795E8AFB54C6D31CDCF6CCD3070" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_21F2560C8330A795E8AFB54C6D31CDCF6CCD3070" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D856E84F300B6711E81931AE1CBC8AD905FA384F" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_D856E84F300B6711E81931AE1CBC8AD905FA384F" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_9122DAA7A60DB585BE5ECA68A2EDB9ABF1E7156A" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("pLMNIdList"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_9122DAA7A60DB585BE5ECA68A2EDB9ABF1E7156A" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("pLMNIdList"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6C81B2BBFCFE94C87598869A2099E04571202BA7" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6C81B2BBFCFE94C87598869A2099E04571202BA7" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_25E4BCFBF8F5344DFC60BCB159FA873FFC8109E9" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_25E4BCFBF8F5344DFC60BCB159FA873FFC8109E9" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUUPFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUUPFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_50209F1FF59B49F79FF194887B631994F2B5148A" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_50209F1FF59B49F79FF194887B631994F2B5148A" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_3346DFB8C2B7D6EEA12B7C1DE4A84B058C24A657" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_3346DFB8C2B7D6EEA12B7C1DE4A84B058C24A657" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_ADD3393C27589066C4993A3491436C6FB57A539F" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_ADD3393C27589066C4993A3491436C6FB57A539F" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_dUpLMNId" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("dUpLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_dUpLMNId" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("dUpLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_73790DA8FF6365B752DC8B399893AC6DE8CF26C4" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_73790DA8FF6365B752DC8B399893AC6DE8CF26C4" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5CE9EDE1F25AB2D880A41BC5D297FDBE668182E8" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5CE9EDE1F25AB2D880A41BC5D297FDBE668182E8" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_0E5C91A3252FBAFA72DB644D4E949A379F0CB910" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0E5C91A3252FBAFA72DB644D4E949A379F0CB910" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5DD192861541E0EB2776C6BFE34B327FF27F93C3" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5DD192861541E0EB2776C6BFE34B327FF27F93C3" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0B9AC962B1E07740CE43D912B5FBC54E0B39DD24" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_0B9AC962B1E07740CE43D912B5FBC54E0B39DD24" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_D0D11CFAA917F4FA12748A041A34D2B39A3AD707" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_D0D11CFAA917F4FA12748A041A34D2B39A3AD707" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2A5AAAD13FDCFF7F2958005C22937366F6604A0D" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_2A5AAAD13FDCFF7F2958005C22937366F6604A0D" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ORUFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ORUFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_AF235FB2C9CCA99D94CC4038669EDD1BB6C7B2DF" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_AF235FB2C9CCA99D94CC4038669EDD1BB6C7B2DF" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DA79A3F946C1F4E8D05B4D6ADEF5E4C65E47635E" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DA79A3F946C1F4E8D05B4D6ADEF5E4C65E47635E" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7B916E1753D2860DF434831CF1E9697ED9973C8F" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_7B916E1753D2860DF434831CF1E9697ED9973C8F" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_E234B43A7CD7843672F08F2197AB46A2A50BECB0" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E234B43A7CD7843672F08F2197AB46A2A50BECB0" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_19C19556F9714850389595E0A16218FA229205FE" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_19C19556F9714850389595E0A16218FA229205FE" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_Sector_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_Sector_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_10BCC6B44663A8D5431668BEE5DF80423420C616" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_10BCC6B44663A8D5431668BEE5DF80423420C616" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_03F9C6A2FA82614A788443AC6044BCED2401C465" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_03F9C6A2FA82614A788443AC6044BCED2401C465" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0867A1E865A904F4BB513948DAEB60412BE67DF3" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_0867A1E865A904F4BB513948DAEB60412BE67DF3" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_64B7C127C01069009A3FB13592DAE249B0029283" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_64B7C127C01069009A3FB13592DAE249B0029283" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_69152691D777DDB084C053915D4A4B15F7F8B3EB" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_69152691D777DDB084C053915D4A4B15F7F8B3EB" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_3AB53A0DB6DC4B4C8BB6194D6D487EBDC3D0E88F" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_3AB53A0DB6DC4B4C8BB6194D6D487EBDC3D0E88F" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_5996D077978D38D0C1A951A262F1F7E1E339F052" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5996D077978D38D0C1A951A262F1F7E1E339F052" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F4A1999634924C7E4D1CBD05E83996A5B1262A8A" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F4A1999634924C7E4D1CBD05E83996A5B1262A8A" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5BAC6D2F05A63FDE27F082E8C8F4D766C145E835" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_5BAC6D2F05A63FDE27F082E8C8F4D766C145E835" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_0E1BE8724BEBB21C5AE3986BE150BEC8F8CD903E" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0E1BE8724BEBB21C5AE3986BE150BEC8F8CD903E" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F93AD0AE5C6940EE73D0B661A2E2E5BB10B3772C" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F93AD0AE5C6940EE73D0B661A2E2E5BB10B3772C" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_319FDFF6C9E6BC1D922F0A2AFEAAC294E520F753" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_319FDFF6C9E6BC1D922F0A2AFEAAC294E520F753" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN ("CD_decorators");
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-ran_ODUFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_ODUFunction";
-ANALYZE ties_data."o-ran-smo-teiv-equipment_Site";
+ANALYZE teiv_data."o-ran-smo-teiv-equipment_Site";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE";
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NodeCluster";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NodeCluster";
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-ran_OCUCPFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction";
-ANALYZE ties_data."o-ran-smo-teiv-oam_ManagedElement";
+ANALYZE teiv_data."o-ran-smo-teiv-oam_ManagedElement";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRCellDU";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRCellDU";
-ANALYZE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_CloudifiedNF";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NFDeployment";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NFDeployment";
-ANALYZE ties_data."o-ran-smo-teiv-ran_AntennaCapability";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_AntennaCapability";
-ANALYZE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82";
+ANALYZE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE";
-ANALYZE ties_data."o-ran-smo-teiv-equipment_AntennaModule";
+ANALYZE teiv_data."o-ran-smo-teiv-equipment_AntennaModule";
-ANALYZE ties_data."o-ran-smo-teiv-ran_ORUFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_ORUFunction";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRCellCU";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRCellCU";
-ANALYZE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
+ANALYZE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
-ANALYZE ties_data."o-ran-smo-teiv-ran_OCUUPFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier";
-ANALYZE ties_data."o-ran-smo-teiv-ran_Sector";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_Sector";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_OCloudSite";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_OCloudSite";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace";
COMMIT;
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
-ALTER SCHEMA ties_consumer_data OWNER TO topology_exposure_user;
+CREATE SCHEMA IF NOT EXISTS teiv_consumer_data;
+ALTER SCHEMA teiv_consumer_data OWNER TO topology_exposure_user;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE topology_exposure_user;
-CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."module_reference" (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"revision" TEXT NOT NULL,
"status" VARCHAR(127) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."decorators" (
"name" TEXT PRIMARY KEY,
"dataType" VARCHAR(511) NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."classifiers" (
"name" TEXT PRIMARY KEY,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
COMMIT;
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_groups;
-ALTER SCHEMA ties_groups OWNER TO topology_exposure_user;
+CREATE SCHEMA IF NOT EXISTS teiv_groups;
+ALTER SCHEMA teiv_groups OWNER TO topology_exposure_user;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE topology_exposure_user;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_groups.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_groups.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_groups' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_groups' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE TABLE IF NOT EXISTS ties_groups."groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."groups" (
"id" VARCHAR(150) PRIMARY KEY,
"name" VARCHAR(150) NOT NULL,
"type" VARCHAR(50) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_groups."static_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."static_groups" (
"id" VARCHAR(150),
"topology_type" TEXT NOT NULL,
"provided_members_ids" TEXT[] NOT NULL,
PRIMARY KEY ("id", "topology_type"),
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_groups."dynamic_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."dynamic_groups" (
"id" VARCHAR(150) PRIMARY KEY,
"criteria" JSONB NOT NULL,
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-SELECT ties_groups.create_constraint_if_not_exists(
+SELECT teiv_groups.create_constraint_if_not_exists(
'groups',
'CHECK_groups_type',
- 'ALTER TABLE ties_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
+ 'ALTER TABLE teiv_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
);
COMMIT;
+-------------+-----------------------------------------------------------------------------------+
| not-present | Entity or relationship IDs that do not exist in your topology. |
+-------------+-----------------------------------------------------------------------------------+
-| invalid | Entity or relationship IDs of a topology type that does not match the TIES model. |
+| invalid | Entity or relationship IDs of a topology type that does not match the TEIV model. |
+-------------+-----------------------------------------------------------------------------------+
well defined user specified string with an entity or relationship.</p>
<p>Decorators are user-defined attributes (key-value pairs) which can
be applied to topology entities and relationships.</p>
+<p>Metadata provides additional information about entities and relationships within the database.
+The reliabilityIndicator is used to indicate the reliability status of the topology data within the network.
+The firstDiscovered timestamp is set for an entity and relationship instance when the instances are created for
+the first time in Topology & Inventory.
+The lastModified timestamp is set for updates to entities or relationships in Topology & Inventory,
+excluding updates to classifiers or decorators.
+reliabilityIndicator, firstDiscovered, and lastModified are implemented as name-value pairs within the metadata.
+They apply to every entity and relationship.</p>
<p>Topology groups provide the capability to create user-defined collections of
topology entities and/or relationships of any type. Groups can be either
static or dynamic based on how they are created.</p>
to it. If there is no connection between the RootObject and the other
object(s), the query is not constructed. The RootObject still can be
retrieved and filtered using the <em>/attributes</em>.</p>
-<p>| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
-|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:---------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------|
-| To return the ids for all instances of the entityTypeName used in the query. | RAN | GNBDUFunction | | | All ids of every GNBDUFunction |
-| To return all attributes of every instance of the entityTypeName used in the query. | RAN | GNBDUFunction | /attributes | | All GNBDUFunctions with every attribute |
-| To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the <em>targetFilter</em> parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | GNBDUFunction | /attributes(gNBId) | | All gNBIds of every GNBDUFunction |
-| To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the <em>targetFilter</em> parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()". | RAN | GNBDUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every GNBDUFunction |
-| To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the <em>scopeFilter</em> parameter. | RAN | GNBDUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where sourceIds contains <em>SubNetwork=Ireland</em> |
-| To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the <em>scopeFilter</em> parameter. <br/> Note: The attributes must be separated by a <em>AND</em> or <em>OR</em>". | RAN | GNBDUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |
-| To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the <em>scopeFilter</em> parameter. A condition is a complete unit of <em>scopeFilter</em> parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "|" to represent OR. | RAN | GNBDUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |</p>
+<p>| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
+|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:----------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| To return the ids for all instances of the entityTypeName used in the query. | RAN | ODUFunction | | | All ids of every ODUFunction |
+| To return all attributes of every instance of the entityTypeName used in the query. | RAN | ODUFunction | /attributes | | All ODUFunctions with every attribute |
+| To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the <em>targetFilter</em> parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | ODUFunction | /attributes(gNBId) | | All gNBIds of every ODUFunction |
+| To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the <em>targetFilter</em> parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()". | RAN | ODUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every ODUFunction |
+| To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the <em>scopeFilter</em> parameter. | RAN | ODUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where sourceIds contains <em>SubNetwork=Ireland</em> |
+| To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the <em>scopeFilter</em> parameter. <br/> Note: The attributes must be separated by a <em>AND</em> or <em>OR</em>. | RAN | ODUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |
+| To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the <em>scopeFilter</em> parameter. A condition is a complete unit of <em>scopeFilter</em> parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "|" to represent OR. | RAN | ODUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |
+| To return the metadata for all instances of the entityTypeName used in the query, that is <em>firstDiscovered</em> within the given timeframe in the <em>scopeFilter</em> parameter. <br/> Note: The timestamps can be queried in any timezone. | RAN | ODUFunction | | /metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30'] | Unique set of ids of ODUFunctions, where metadata contains <em>firstDiscovered</em> timestamp within the range '2025-01-06T12:34:56.789+05:30' and '2025-01-09T16:10:36.461565+05:30' |</p>
<h2>Querying connected entities</h2>
<p>The <em>entityTypeName</em> is used as the root of the queries.</p>
<p>| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| To return the ids for all instances of an entityTypeName related by an association. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement | All ENodeBFunction entities that are managed by any Managed Element. |
| To return the ids for all instances of an entityTypeName related by an association to another entity specified by its <em>id</em>. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All ENodeBFunction entities that are managed by the Managed Element <em>urn:3gpp:dn: ManagedElement=1</em>. |
-| To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their <em>id</em>. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All EnodeBFunction entities with enbId as <em>1</em>, managed by the Managed Element <em>urn:3gpp:dn: ManagedElement=1</em> or <em>urn:3gpp:dn: ManagedElement=2</em>, and provides EuTranCell <em>urn:3gpp:dn: ManagedElement=1, EUtranCell=2</em>. |
-| To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given <em>scopeFilter</em> parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All EnodeBFunction entities that provide an EuTranCell whose tac equals 1 |</p>
+| To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their <em>id</em>. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All ENodeBFunction entities with enbId as <em>1</em>, managed by the Managed Element <em>urn:3gpp:dn: ManagedElement=1</em> or <em>urn:3gpp:dn: ManagedElement=2</em>, and provides EuTranCell <em>urn:3gpp:dn: ManagedElement=1, EUtranCell=2</em>. |
+| To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given <em>scopeFilter</em> parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All ENodeBFunction entities that provide an EUTranCell whose tac equals 1 |</p>
<h2>Querying based on geographical location</h2>
<p>The <em>entityTypeName</em> is used as the root of the queries. Use the "Well-known text" (WKT) representation of geometry to specify geometry objects.</p>
<p>| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
<p>The <em>entityTypeName</em> is used as the root of the queries.</p>
<p>| Use case | domainName | entityTypeName | entityId | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------|-------------|:---------------|------------------------------------------------|:----------------------------------------|:-------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| To return the relationships for a given entity specified by its id. | RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | | All relations for the GNBDUFunction with id <em>urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1</em>. |
-| To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | /MANAGEDELEMENT _MANAGES _GNBDUFUNCTION | | All <em>MANAGEDELEMENT _MANAGES _GNBDUFUNCTION</em> relations for the GNBDUFunction with id <em>urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1</em>. |
-| To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All <em>MANAGEDELEMENT _MANAGES _GNBDUFUNCTION</em> relations for the GNBDUFunction with id <em>urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1</em> where the managed element is <em>urn:3gpp:dn: ManagedElement=1</em>. |</p>
+| To return the relationships for a given entity specified by its id. | RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | | All relations for the ODUFunction with id <em>urn:3gpp:dn: ManagedElement=1, ODUFunction=1</em>. |
+| To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | /MANAGEDELEMENT _MANAGES _ODUFUNCTION | | All <em>MANAGEDELEMENT _MANAGES _ODUFUNCTION</em> relations for the ODUFunction with id <em>urn:3gpp:dn: ManagedElement=1, ODUFunction=1</em>. |
+| To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All <em>MANAGEDELEMENT _MANAGES _ODUFUNCTION</em> relations for the ODUFunction with id <em>urn:3gpp:dn: ManagedElement=1, ODUFunction=1</em> where the managed element is <em>urn:3gpp:dn: ManagedElement=1</em>. |</p>
<h2>Querying on relationships</h2>
<p>Here, the <em>relationshipTypeName</em> is used as the root of the queries.</p>
<p>| Use case | domainName | relationshipTypeName | targetFilter | scopeFilter | Query result |
<p>The <em>domainName</em> is used as the root of the queries.</p>
<p>| Use case | domainName | targetFilter | scopeFilter | Query result |
|:--------------------------------------------------------------------------------------------------------------------------------------------------|------------|--------------|:----------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------|
-| Return all related entity IDs that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'gnbdu-function-model:Indoor'] | All the entity IDs that are classified with "gnbdu-function-model:Indoor" in RAN domain. |
-| Return all related entity IDs that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity IDs that are partially matched with "Ind" in RAN domain. |
-| Return all related entity IDs that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@gnbdu-function-model:textdata = 'Stockholm'] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata = 'Stockholm'" in RAN domain. |
-| Return all related entity IDs that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@gnbdu-function-model:textdata, '')] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata as key of the decorator in RAN domain. |</p>
+| Return all related entity ids that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'odu-function-model:Indoor'] | All the entity ids that are classified with "odu-function-model:Indoor" in RAN domain. |
+| Return all related entity ids that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity ids that are partially matched with "Ind" in RAN domain. |
+| Return all related entity ids that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@odu-function-model:textdata = 'Stockholm'] | All the entity ids that are exactly matched with "odu-function-model:textdata = 'Stockholm'" in RAN domain. |
+| Return all related entity ids that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@odu-function-model:textdata, '')] | All the entity ids that are exactly matched with "odu-function-model:textdata as key of the decorator in RAN domain. |</p>
<p>The <em>entityName</em> is used as the root of the queries.</p>
<p>| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|:---------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Return all related entity IDs and classifiers. | NRCellDU | | /classifiers | | All NRCellDU IDs and classifiers. |
-| Return all related entity IDs and decorators. | NRCellDU | | /decorators | | All NRCellDU IDs and decorators. |
-| Return all related entity IDs that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All NRCellDU IDs where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "gnbdu-function-model:Indoor". |
-| Return all related entity IDs and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU IDs and classifiers partially contains the text "Ind". |
-| Return all related entity IDs and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc'. |
-| Return all related entity IDs, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind". |</p>
+| Return all related entity ids and classifiers. | NRCellDU | | /classifiers | | All NRCellDU ids and classifiers. |
+| Return all related entity ids and decorators. | NRCellDU | | /decorators | | All NRCellDU ids and decorators. |
+| Return all related entity ids that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All NRCellDU ids where key of the decorator is "odu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "odu-function-model:Indoor". |
+| Return all related entity ids and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU ids and classifiers partially contains the text "Ind". |
+| Return all related entity ids and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stoc'. |
+| Return all related entity ids, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind". |</p>
<p>The <em>relationshipTypeName</em> is used as the root of the queries.</p>
<p>| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:----------------------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Return all related relationships IDs and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and classifiers. |
-| Return all related relationships IDs and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators. |
-| Return all related relationship IDs that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "gnbdu-function-model:Indoor". |
-| Return all related relationships IDs and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind". |
-| Return all related relationships IDs and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock'. |
-| Return all related relationships IDs,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind". |</p>
+| Return all related relationship ids and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and classifiers. |
+| Return all related relationship ids and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators. |
+| Return all related relationship ids that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "odu-function-model:Indoor". |
+| Return all related relationship ids and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind". |
+| Return all related relationship ids and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stock'. |
+| Return all related relationship ids,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind". |</p>
</div>
</div>
well defined user specified string with an entity or relationship.</p>
<p>Decorators are user-defined attributes (key-value pairs) which can
be applied to topology entities and relationships.</p>
+<p>Metadata provides additional information about entities and relationships within the database.
+The reliabilityIndicator is used to indicate the reliability status of the topology data within the network.
+The firstDiscovered timestamp is set for an entity and relationship instance when the instances are created for
+the first time in Topology & Inventory.
+The lastModified timestamp is set for updates to entities or relationships in Topology & Inventory,
+excluding updates to classifiers or decorators.
+reliabilityIndicator, firstDiscovered, and lastModified are implemented as name-value pairs within the metadata.
+They apply to every entity and relationship.</p>
<p>Topology groups provide the capability to create user-defined collections of
topology entities and/or relationships of any type. Groups can be either
static or dynamic based on how they are created.</p>
to it. If there is no connection between the RootObject and the other
object(s), the query is not constructed. The RootObject still can be
retrieved and filtered using the <em>/attributes</em>.</p>
-<p>| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
-|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:---------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------|
-| To return the ids for all instances of the entityTypeName used in the query. | RAN | GNBDUFunction | | | All ids of every GNBDUFunction |
-| To return all attributes of every instance of the entityTypeName used in the query. | RAN | GNBDUFunction | /attributes | | All GNBDUFunctions with every attribute |
-| To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the <em>targetFilter</em> parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | GNBDUFunction | /attributes(gNBId) | | All gNBIds of every GNBDUFunction |
-| To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the <em>targetFilter</em> parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()". | RAN | GNBDUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every GNBDUFunction |
-| To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the <em>scopeFilter</em> parameter. | RAN | GNBDUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where sourceIds contains <em>SubNetwork=Ireland</em> |
-| To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the <em>scopeFilter</em> parameter. <br/> Note: The attributes must be separated by a <em>AND</em> or <em>OR</em>". | RAN | GNBDUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |
-| To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the <em>scopeFilter</em> parameter. A condition is a complete unit of <em>scopeFilter</em> parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "|" to represent OR. | RAN | GNBDUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |</p>
+<p>| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
+|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:----------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| To return the ids for all instances of the entityTypeName used in the query. | RAN | ODUFunction | | | All ids of every ODUFunction |
+| To return all attributes of every instance of the entityTypeName used in the query. | RAN | ODUFunction | /attributes | | All ODUFunctions with every attribute |
+| To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the <em>targetFilter</em> parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | ODUFunction | /attributes(gNBId) | | All gNBIds of every ODUFunction |
+| To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the <em>targetFilter</em> parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()". | RAN | ODUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every ODUFunction |
+| To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the <em>scopeFilter</em> parameter. | RAN | ODUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where sourceIds contains <em>SubNetwork=Ireland</em> |
+| To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the <em>scopeFilter</em> parameter. <br/> Note: The attributes must be separated by a <em>AND</em> or <em>OR</em>. | RAN | ODUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |
+| To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the <em>scopeFilter</em> parameter. A condition is a complete unit of <em>scopeFilter</em> parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "|" to represent OR. | RAN | ODUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |
+| To return the metadata for all instances of the entityTypeName used in the query, that is <em>firstDiscovered</em> within the given timeframe in the <em>scopeFilter</em> parameter. <br/> Note: The timestamps can be queried in any timezone. | RAN | ODUFunction | | /metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30'] | Unique set of ids of ODUFunctions, where metadata contains <em>firstDiscovered</em> timestamp within the range '2025-01-06T12:34:56.789+05:30' and '2025-01-09T16:10:36.461565+05:30' |</p>
<h2>Querying connected entities</h2>
<p>The <em>entityTypeName</em> is used as the root of the queries.</p>
<p>| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| To return the ids for all instances of an entityTypeName related by an association. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement | All ENodeBFunction entities that are managed by any Managed Element. |
| To return the ids for all instances of an entityTypeName related by an association to another entity specified by its <em>id</em>. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All ENodeBFunction entities that are managed by the Managed Element <em>urn:3gpp:dn: ManagedElement=1</em>. |
-| To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their <em>id</em>. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All EnodeBFunction entities with enbId as <em>1</em>, managed by the Managed Element <em>urn:3gpp:dn: ManagedElement=1</em> or <em>urn:3gpp:dn: ManagedElement=2</em>, and provides EuTranCell <em>urn:3gpp:dn: ManagedElement=1, EUtranCell=2</em>. |
-| To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given <em>scopeFilter</em> parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All EnodeBFunction entities that provide an EuTranCell whose tac equals 1 |</p>
+| To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their <em>id</em>. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All ENodeBFunction entities with enbId as <em>1</em>, managed by the Managed Element <em>urn:3gpp:dn: ManagedElement=1</em> or <em>urn:3gpp:dn: ManagedElement=2</em>, and provides EuTranCell <em>urn:3gpp:dn: ManagedElement=1, EUtranCell=2</em>. |
+| To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given <em>scopeFilter</em> parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All ENodeBFunction entities that provide an EUTranCell whose tac equals 1 |</p>
<h2>Querying based on geographical location</h2>
<p>The <em>entityTypeName</em> is used as the root of the queries. Use the "Well-known text" (WKT) representation of geometry to specify geometry objects.</p>
<p>| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
<p>The <em>entityTypeName</em> is used as the root of the queries.</p>
<p>| Use case | domainName | entityTypeName | entityId | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------|-------------|:---------------|------------------------------------------------|:----------------------------------------|:-------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| To return the relationships for a given entity specified by its id. | RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | | All relations for the GNBDUFunction with id <em>urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1</em>. |
-| To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | /MANAGEDELEMENT _MANAGES _GNBDUFUNCTION | | All <em>MANAGEDELEMENT _MANAGES _GNBDUFUNCTION</em> relations for the GNBDUFunction with id <em>urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1</em>. |
-| To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All <em>MANAGEDELEMENT _MANAGES _GNBDUFUNCTION</em> relations for the GNBDUFunction with id <em>urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1</em> where the managed element is <em>urn:3gpp:dn: ManagedElement=1</em>. |</p>
+| To return the relationships for a given entity specified by its id. | RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | | All relations for the ODUFunction with id <em>urn:3gpp:dn: ManagedElement=1, ODUFunction=1</em>. |
+| To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | /MANAGEDELEMENT _MANAGES _ODUFUNCTION | | All <em>MANAGEDELEMENT _MANAGES _ODUFUNCTION</em> relations for the ODUFunction with id <em>urn:3gpp:dn: ManagedElement=1, ODUFunction=1</em>. |
+| To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All <em>MANAGEDELEMENT _MANAGES _ODUFUNCTION</em> relations for the ODUFunction with id <em>urn:3gpp:dn: ManagedElement=1, ODUFunction=1</em> where the managed element is <em>urn:3gpp:dn: ManagedElement=1</em>. |</p>
<h2>Querying on relationships</h2>
<p>Here, the <em>relationshipTypeName</em> is used as the root of the queries.</p>
<p>| Use case | domainName | relationshipTypeName | targetFilter | scopeFilter | Query result |
<p>The <em>domainName</em> is used as the root of the queries.</p>
<p>| Use case | domainName | targetFilter | scopeFilter | Query result |
|:--------------------------------------------------------------------------------------------------------------------------------------------------|------------|--------------|:----------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------|
-| Return all related entity IDs that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'gnbdu-function-model:Indoor'] | All the entity IDs that are classified with "gnbdu-function-model:Indoor" in RAN domain. |
-| Return all related entity IDs that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity IDs that are partially matched with "Ind" in RAN domain. |
-| Return all related entity IDs that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@gnbdu-function-model:textdata = 'Stockholm'] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata = 'Stockholm'" in RAN domain. |
-| Return all related entity IDs that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@gnbdu-function-model:textdata, '')] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata as key of the decorator in RAN domain. |</p>
+| Return all related entity ids that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'odu-function-model:Indoor'] | All the entity ids that are classified with "odu-function-model:Indoor" in RAN domain. |
+| Return all related entity ids that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity ids that are partially matched with "Ind" in RAN domain. |
+| Return all related entity ids that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@odu-function-model:textdata = 'Stockholm'] | All the entity ids that are exactly matched with "odu-function-model:textdata = 'Stockholm'" in RAN domain. |
+| Return all related entity ids that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@odu-function-model:textdata, '')] | All the entity ids that are exactly matched with "odu-function-model:textdata as key of the decorator in RAN domain. |</p>
<p>The <em>entityName</em> is used as the root of the queries.</p>
<p>| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|:---------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Return all related entity IDs and classifiers. | NRCellDU | | /classifiers | | All NRCellDU IDs and classifiers. |
-| Return all related entity IDs and decorators. | NRCellDU | | /decorators | | All NRCellDU IDs and decorators. |
-| Return all related entity IDs that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All NRCellDU IDs where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "gnbdu-function-model:Indoor". |
-| Return all related entity IDs and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU IDs and classifiers partially contains the text "Ind". |
-| Return all related entity IDs and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc'. |
-| Return all related entity IDs, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind". |</p>
+| Return all related entity ids and classifiers. | NRCellDU | | /classifiers | | All NRCellDU ids and classifiers. |
+| Return all related entity ids and decorators. | NRCellDU | | /decorators | | All NRCellDU ids and decorators. |
+| Return all related entity ids that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All NRCellDU ids where key of the decorator is "odu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "odu-function-model:Indoor". |
+| Return all related entity ids and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU ids and classifiers partially contains the text "Ind". |
+| Return all related entity ids and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stoc'. |
+| Return all related entity ids, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind". |</p>
<p>The <em>relationshipTypeName</em> is used as the root of the queries.</p>
<p>| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:----------------------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| Return all related relationships IDs and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and classifiers. |
-| Return all related relationships IDs and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators. |
-| Return all related relationship IDs that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "gnbdu-function-model:Indoor". |
-| Return all related relationships IDs and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind". |
-| Return all related relationships IDs and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock'. |
-| Return all related relationships IDs,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind". |</p>
+| Return all related relationship ids and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and classifiers. |
+| Return all related relationship ids and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators. |
+| Return all related relationship ids that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "odu-function-model:Indoor". |
+| Return all related relationship ids and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind". |
+| Return all related relationship ids and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stock'. |
+| Return all related relationship ids,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind". |</p>
</div>
<div class="app-desc">More information: <a href="https://openapi-generator.tech">https://openapi-generator.tech</a></div>
<div class="app-desc">Contact Info: <a href="team@openapitools.org">team@openapitools.org</a></div>
{
"openapi" : "3.0.2",
"info" : {
- "description" : "Topology Exposure and Inventory data is the information that represents entities\nin a telecommunications network and the relationships between them that\nprovide insight into a particular aspect of the network of importance to\nspecific use cases. Topology and Inventory data can be derived from\ninventory, configuration, or other data.\n\nTopology Exposure and Inventory supports several topology domains. A domain is a\ngrouping of topology and inventory entities that handles topology and\ninventory data.\n\nEntities are enabling the modelling and storage of complex network\ninfrastructure and relationships.\n\nA relationship is a bi-directional connection between two entities, one\nof which is the originating side (A-side) and the other is the\nterminating side (B-side). The order of the sides matters since it\ndefines the relationship itself which must be unique.\n\nClassifier (also known as tag or label) permits the association of a \nwell defined user specified string with an entity or relationship.\n\nDecorators are user-defined attributes (key-value pairs) which can\nbe applied to topology entities and relationships.\n\nTopology groups provide the capability to create user-defined collections of\ntopology entities and/or relationships of any type. Groups can be either\nstatic or dynamic based on how they are created.\n\nTopology Exposure and Inventory API provides the capabilities to fetch topology\ndata. Using the filtering options, it is possible to define more specific\nquery requests.\n\n## Querying simple entities\nThe *entityTypeName* is used as the root of the queries (from here\nreferred to as RootObject). Every other object, either in *targetFilter* or\n*scopeFilter*, has to relate to the RootObject. The queries are\nconstructed starting from the RootObject and all other objects are joined\nto it. If there is no connection between the RootObject and the other\nobject(s), the query is not constructed. The RootObject still can be\nretrieved and filtered using the */attributes*.\n\n| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |\n|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:---------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------|\n| To return the ids for all instances of the entityTypeName used in the query. | RAN | GNBDUFunction | | | All ids of every GNBDUFunction |\n| To return all attributes of every instance of the entityTypeName used in the query. | RAN | GNBDUFunction | /attributes | | All GNBDUFunctions with every attribute |\n| To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the *targetFilter* parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | GNBDUFunction | /attributes(gNBId) | | All gNBIds of every GNBDUFunction |\n| To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the *targetFilter* parameter. <br/> Note: The attributes must be separated by a comma \",\" when using parenthesis \"()\". | RAN | GNBDUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every GNBDUFunction |\n| To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the *scopeFilter* parameter. | RAN | GNBDUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where sourceIds contains *SubNetwork=Ireland* |\n| To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the *scopeFilter* parameter. <br/> Note: The attributes must be separated by a *AND* or *OR*\". | RAN | GNBDUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |\n| To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the *scopeFilter* parameter. A condition is a complete unit of *scopeFilter* parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon \";\" to represent AND, or a pipe symbol \"|\" to represent OR. | RAN | GNBDUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with \"SubNetwork=Europe\" |\n\n## Querying connected entities\nThe *entityTypeName* is used as the root of the queries.\n\n| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |\n|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return the ids for all instances of an entityTypeName related by an association. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement | All ENodeBFunction entities that are managed by any Managed Element. |\n| To return the ids for all instances of an entityTypeName related by an association to another entity specified by its *id*. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All ENodeBFunction entities that are managed by the Managed Element *urn:3gpp:dn: ManagedElement=1*. |\n| To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their *id*. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All EnodeBFunction entities with enbId as *1*, managed by the Managed Element *urn:3gpp:dn: ManagedElement=1* or *urn:3gpp:dn: ManagedElement=2*, and provides EuTranCell *urn:3gpp:dn: ManagedElement=1, EUtranCell=2*. |\n| To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given *scopeFilter* parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All EnodeBFunction entities that provide an EuTranCell whose tac equals 1 |\n\n## Querying based on geographical location\nThe *entityTypeName* is used as the root of the queries. Use the \"Well-known text\" (WKT) representation of geometry to specify geometry objects.\n\n| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |\n|:-----------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return the ids for all instances of an entityTypeName where the given attribute is covered by the given polygon. | EQUIPMENT | AntennaModule | | /attributes[coveredBy(@geo-location, 'POLYGON ((-73.958444 40.800533, -73.981962 40.768558, -73.973207 40.765048, -73.949861 40.797024, -73.958444 40.800533))')] | All AntennaModule entities covered by the given polygon. |\n| To return the attributes for all instances of an entityTypeName where the given attribute is covered by the given collection of polygons. | EQUIPMENT | AntennaModule | /attributes | /attributes[coveredBy(@geo-location, 'MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), (30 20, 20 15, 20 25, 30 20)))')] | All AntennaModule entities covered by the given polygons. |\n| To return the ids for all instances of an entityTypeName within the given distance in meters from a given attribute. | EQUIPMENT | AntennaModule | | /attributes[withinMeters(@geo-location, 'POINT(-73.958444 40.800533)', 500.5)] | All AntennaModule entities within the given distance from the given point. |\n| To return the attributes for all instances of an entityTypeName which has a connected entity whose given attribute is within a polygon | RAN | NRCellDU | /attributes | /serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON ((-73.958444 40.800533, -73.981962 40.768558, -73.973207 40.765048, -73.949861 40.797024, -73.958444 40.800533))')] | All NRCellDU entities that have at least one connected AntennaModule with a geo-location attribute within the given polygon. |\n\n## Querying entities for relationships\nThe *entityTypeName* is used as the root of the queries.\n\n| Use case | domainName | entityTypeName | entityId | targetFilter | scopeFilter | Query result |\n|:-------------------------------------------------------------------------------------------------------------------|-------------|:---------------|------------------------------------------------|:----------------------------------------|:-------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return the relationships for a given entity specified by its id. | RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | | All relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1*. |\n| To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | /MANAGEDELEMENT _MANAGES _GNBDUFUNCTION | | All *MANAGEDELEMENT _MANAGES _GNBDUFUNCTION* relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1*. |\n| To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All *MANAGEDELEMENT _MANAGES _GNBDUFUNCTION* relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1* where the managed element is *urn:3gpp:dn: ManagedElement=1*. |\n\n## Querying on relationships\nHere, the *relationshipTypeName* is used as the root of the queries.\n\n| Use case | domainName | relationshipTypeName | targetFilter | scopeFilter | Query result |\n|:---------------------------------------------------------------------------------------------------------|-------------|:----------------------------------------|:-------------|:-----------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return all relationships for a specified relationship type. | REL_OAM_RAN | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | | All MANAGEDELEMENT_MANAGES_ENODEBFUNCTION relationships. |\n| To return all relationships for a specified relationship type with a specified association to an entity. | REL_OAM_RAN | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | All MANAGEDELEMENT_MANAGES_ENODEBFUNCTION relationships having an association *managed-by-managedElement* to ManagedElement *urn:3gpp:dn: ManagedElement=1*. |\n\n## Querying on classifiers and decorators\nThe *domainName* is used as the root of the queries.\n\n| Use case | domainName | targetFilter | scopeFilter | Query result |\n|:--------------------------------------------------------------------------------------------------------------------------------------------------|------------|--------------|:----------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------|\n| Return all related entity IDs that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'gnbdu-function-model:Indoor'] | All the entity IDs that are classified with \"gnbdu-function-model:Indoor\" in RAN domain. |\n| Return all related entity IDs that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity IDs that are partially matched with \"Ind\" in RAN domain. |\n| Return all related entity IDs that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@gnbdu-function-model:textdata = 'Stockholm'] | All the entity IDs that are exactly matched with \"gnbdu-function-model:textdata = 'Stockholm'\" in RAN domain. |\n| Return all related entity IDs that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@gnbdu-function-model:textdata, '')] | All the entity IDs that are exactly matched with \"gnbdu-function-model:textdata as key of the decorator in RAN domain. |\n\nThe *entityName* is used as the root of the queries.\n\n| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |\n|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|:---------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Return all related entity IDs and classifiers. | NRCellDU | | /classifiers | | All NRCellDU IDs and classifiers. |\n| Return all related entity IDs and decorators. | NRCellDU | | /decorators | | All NRCellDU IDs and decorators. |\n| Return all related entity IDs that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All NRCellDU IDs where key of the decorator is \"gnbdu-function-model:textdata\" and the value of the decorator is 'Stockholm'\" and where classifier exactly contains \"gnbdu-function-model:Indoor\". |\n| Return all related entity IDs and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU IDs and classifiers partially contains the text \"Ind\". |\n| Return all related entity IDs and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and where key of the decorator is \"gnbdu-function-model:textdata\" and the value of the decorator partially contains 'Stoc'. |\n| Return all related entity IDs, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and decorators where key of the decorator is \"gnbdu-function-model:textdata\" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text \"Ind\". |\n\n The *relationshipTypeName* is used as the root of the queries.\n\n| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |\n|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:----------------------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Return all related relationships IDs and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and classifiers. |\n| Return all related relationships IDs and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators. |\n| Return all related relationship IDs that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is \"gnbdu-function-model:textdata\" and the value of the decorator is 'Stockholm'\" and classifiers exactly contains \"gnbdu-function-model:Indoor\". |\n| Return all related relationships IDs and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text \"Ind\". |\n| Return all related relationships IDs and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is \"gnbdu-function-model:textdata\" and the value of the decorator partially contains 'Stock'. |\n| Return all related relationships IDs,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is \"gnbdu-function-model:textdata\" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text \"Ind\". |\n",
+ "description" : "Topology Exposure and Inventory data is the information that represents entities\nin a telecommunications network and the relationships between them that\nprovide insight into a particular aspect of the network of importance to\nspecific use cases. Topology and Inventory data can be derived from\ninventory, configuration, or other data.\n\nTopology Exposure and Inventory supports several topology domains. A domain is a\ngrouping of topology and inventory entities that handles topology and\ninventory data.\n\nEntities are enabling the modelling and storage of complex network\ninfrastructure and relationships.\n\nA relationship is a bi-directional connection between two entities, one\nof which is the originating side (A-side) and the other is the\nterminating side (B-side). The order of the sides matters since it\ndefines the relationship itself which must be unique.\n\nClassifier (also known as tag or label) permits the association of a \nwell defined user specified string with an entity or relationship.\n\nDecorators are user-defined attributes (key-value pairs) which can\nbe applied to topology entities and relationships.\n\nMetadata provides additional information about entities and relationships within the database.\nThe reliabilityIndicator is used to indicate the reliability status of the topology data within the network.\nThe firstDiscovered timestamp is set for an entity and relationship instance when the instances are created for \nthe first time in Topology & Inventory. \nThe lastModified timestamp is set for updates to entities or relationships in Topology & Inventory, \nexcluding updates to classifiers or decorators.\nreliabilityIndicator, firstDiscovered, and lastModified are implemented as name-value pairs within the metadata.\nThey apply to every entity and relationship.\n\nTopology groups provide the capability to create user-defined collections of\ntopology entities and/or relationships of any type. Groups can be either\nstatic or dynamic based on how they are created.\n\nTopology Exposure and Inventory API provides the capabilities to fetch topology\ndata. Using the filtering options, it is possible to define more specific\nquery requests.\n\n## Querying simple entities\nThe *entityTypeName* is used as the root of the queries (from here\nreferred to as RootObject). Every other object, either in *targetFilter* or\n*scopeFilter*, has to relate to the RootObject. The queries are\nconstructed starting from the RootObject and all other objects are joined\nto it. If there is no connection between the RootObject and the other\nobject(s), the query is not constructed. The RootObject still can be\nretrieved and filtered using the */attributes*.\n\n| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |\n|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:----------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return the ids for all instances of the entityTypeName used in the query. | RAN | ODUFunction | | | All ids of every ODUFunction |\n| To return all attributes of every instance of the entityTypeName used in the query. | RAN | ODUFunction | /attributes | | All ODUFunctions with every attribute |\n| To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the *targetFilter* parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | ODUFunction | /attributes(gNBId) | | All gNBIds of every ODUFunction |\n| To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the *targetFilter* parameter. <br/> Note: The attributes must be separated by a comma \",\" when using parenthesis \"()\". | RAN | ODUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every ODUFunction |\n| To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the *scopeFilter* parameter. | RAN | ODUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where sourceIds contains *SubNetwork=Ireland* |\n| To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the *scopeFilter* parameter. <br/> Note: The attributes must be separated by a *AND* or *OR*. | RAN | ODUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |\n| To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the *scopeFilter* parameter. A condition is a complete unit of *scopeFilter* parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon \";\" to represent AND, or a pipe symbol \"|\" to represent OR. | RAN | ODUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with \"SubNetwork=Europe\" |\n| To return the metadata for all instances of the entityTypeName used in the query, that is *firstDiscovered* within the given timeframe in the *scopeFilter* parameter. <br/> Note: The timestamps can be queried in any timezone. | RAN | ODUFunction | | /metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30'] | Unique set of ids of ODUFunctions, where metadata contains *firstDiscovered* timestamp within the range '2025-01-06T12:34:56.789+05:30' and '2025-01-09T16:10:36.461565+05:30' |\n\n## Querying connected entities\nThe *entityTypeName* is used as the root of the queries.\n\n| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |\n|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return the ids for all instances of an entityTypeName related by an association. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement | All ENodeBFunction entities that are managed by any Managed Element. |\n| To return the ids for all instances of an entityTypeName related by an association to another entity specified by its *id*. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All ENodeBFunction entities that are managed by the Managed Element *urn:3gpp:dn: ManagedElement=1*. |\n| To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their *id*. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All ENodeBFunction entities with enbId as *1*, managed by the Managed Element *urn:3gpp:dn: ManagedElement=1* or *urn:3gpp:dn: ManagedElement=2*, and provides EuTranCell *urn:3gpp:dn: ManagedElement=1, EUtranCell=2*. |\n| To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given *scopeFilter* parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All ENodeBFunction entities that provide an EUTranCell whose tac equals 1 |\n\n## Querying based on geographical location\nThe *entityTypeName* is used as the root of the queries. Use the \"Well-known text\" (WKT) representation of geometry to specify geometry objects.\n\n| Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |\n|:-----------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return the ids for all instances of an entityTypeName where the given attribute is covered by the given polygon. | EQUIPMENT | AntennaModule | | /attributes[coveredBy(@geo-location, 'POLYGON ((-73.958444 40.800533, -73.981962 40.768558, -73.973207 40.765048, -73.949861 40.797024, -73.958444 40.800533))')] | All AntennaModule entities covered by the given polygon. |\n| To return the attributes for all instances of an entityTypeName where the given attribute is covered by the given collection of polygons. | EQUIPMENT | AntennaModule | /attributes | /attributes[coveredBy(@geo-location, 'MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 10 30, 10 10, 30 5, 45 20, 20 35), (30 20, 20 15, 20 25, 30 20)))')] | All AntennaModule entities covered by the given polygons. |\n| To return the ids for all instances of an entityTypeName within the given distance in meters from a given attribute. | EQUIPMENT | AntennaModule | | /attributes[withinMeters(@geo-location, 'POINT(-73.958444 40.800533)', 500.5)] | All AntennaModule entities within the given distance from the given point. |\n| To return the attributes for all instances of an entityTypeName which has a connected entity whose given attribute is within a polygon | RAN | NRCellDU | /attributes | /serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON ((-73.958444 40.800533, -73.981962 40.768558, -73.973207 40.765048, -73.949861 40.797024, -73.958444 40.800533))')] | All NRCellDU entities that have at least one connected AntennaModule with a geo-location attribute within the given polygon. |\n\n## Querying entities for relationships\nThe *entityTypeName* is used as the root of the queries.\n\n| Use case | domainName | entityTypeName | entityId | targetFilter | scopeFilter | Query result |\n|:-------------------------------------------------------------------------------------------------------------------|-------------|:---------------|------------------------------------------------|:----------------------------------------|:-------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return the relationships for a given entity specified by its id. | RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | | All relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1*. |\n| To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | /MANAGEDELEMENT _MANAGES _ODUFUNCTION | | All *MANAGEDELEMENT _MANAGES _ODUFUNCTION* relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1*. |\n| To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All *MANAGEDELEMENT _MANAGES _ODUFUNCTION* relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1* where the managed element is *urn:3gpp:dn: ManagedElement=1*. |\n\n## Querying on relationships\nHere, the *relationshipTypeName* is used as the root of the queries.\n\n| Use case | domainName | relationshipTypeName | targetFilter | scopeFilter | Query result |\n|:---------------------------------------------------------------------------------------------------------|-------------|:----------------------------------------|:-------------|:-----------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| To return all relationships for a specified relationship type. | REL_OAM_RAN | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | | All MANAGEDELEMENT_MANAGES_ENODEBFUNCTION relationships. |\n| To return all relationships for a specified relationship type with a specified association to an entity. | REL_OAM_RAN | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | All MANAGEDELEMENT_MANAGES_ENODEBFUNCTION relationships having an association *managed-by-managedElement* to ManagedElement *urn:3gpp:dn: ManagedElement=1*. |\n\n## Querying on classifiers and decorators\nThe *domainName* is used as the root of the queries.\n\n| Use case | domainName | targetFilter | scopeFilter | Query result |\n|:--------------------------------------------------------------------------------------------------------------------------------------------------|------------|--------------|:----------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------|\n| Return all related entity ids that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'odu-function-model:Indoor'] | All the entity ids that are classified with \"odu-function-model:Indoor\" in RAN domain. |\n| Return all related entity ids that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity ids that are partially matched with \"Ind\" in RAN domain. |\n| Return all related entity ids that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@odu-function-model:textdata = 'Stockholm'] | All the entity ids that are exactly matched with \"odu-function-model:textdata = 'Stockholm'\" in RAN domain. |\n| Return all related entity ids that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@odu-function-model:textdata, '')] | All the entity ids that are exactly matched with \"odu-function-model:textdata as key of the decorator in RAN domain. |\n\nThe *entityName* is used as the root of the queries.\n\n| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |\n|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|:---------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Return all related entity ids and classifiers. | NRCellDU | | /classifiers | | All NRCellDU ids and classifiers. |\n| Return all related entity ids and decorators. | NRCellDU | | /decorators | | All NRCellDU ids and decorators. |\n| Return all related entity ids that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All NRCellDU ids where key of the decorator is \"odu-function-model:textdata\" and the value of the decorator is 'Stockholm'\" and where classifier exactly contains \"odu-function-model:Indoor\". |\n| Return all related entity ids and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU ids and classifiers partially contains the text \"Ind\". |\n| Return all related entity ids and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and where key of the decorator is \"odu-function-model:textdata\" and the value of the decorator partially contains 'Stoc'. |\n| Return all related entity ids, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and decorators where key of the decorator is \"odu-function-model:textdata\" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text \"Ind\". |\n\n The *relationshipTypeName* is used as the root of the queries.\n\n| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |\n|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:----------------------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Return all related relationship ids and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and classifiers. |\n| Return all related relationship ids and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators. |\n| Return all related relationship ids that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is \"odu-function-model:textdata\" and the value of the decorator is 'Stockholm'\" and classifiers exactly contains \"odu-function-model:Indoor\". |\n| Return all related relationship ids and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text \"Ind\". |\n| Return all related relationship ids and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is \"odu-function-model:textdata\" and the value of the decorator partially contains 'Stock'. |\n| Return all related relationship ids,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is \"odu-function-model:textdata\" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text \"Ind\". |\n",
"license" : {
"name" : "Copyright (C) 2024 Ericsson, Modifications Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.",
"url" : "http://www.apache.org/licenses/LICENSE-2.0"
"value" : {
"operation" : "merge",
"classifiers" : [ "module-x:Outdoor", "module-y:Rural", "module-z:Weekend" ],
- "entityIds" : [ "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2" ],
+ "entityIds" : [ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2" ],
"relationshipIds" : [ "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B" ]
}
},
"value" : {
"operation" : "delete",
"classifiers" : [ "module-x:Outdoor", "module-z:Weekend" ],
- "entityIds" : [ "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2" ],
+ "entityIds" : [ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2" ],
"relationshipIds" : [ "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B" ]
}
},
"module-x:location" : "Stockholm",
"module-y:vendor" : "Ericsson"
},
- "entityIds" : [ "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2" ],
+ "entityIds" : [ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2" ],
"relationshipIds" : [ "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B" ]
}
},
"decorators" : {
"module-x:location" : "Stockholm"
},
- "entityIds" : [ "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2" ],
+ "entityIds" : [ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2" ],
"relationshipIds" : [ "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B" ]
}
},
"EntityResponseExample" : {
"value" : {
"o-ran-smo-teiv-ran:NRCellDU" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1",
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1",
"attributes" : {
"cellLocalId" : 91,
"nCI" : 91,
"location" : "Stockholm"
},
"classifiers" : [ "Rural" ],
- "sourceIds" : [ "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1", "urn:cmHandle:395221E080CCF0FD1924103B15873814" ]
+ "sourceIds" : [ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1", "urn:cmHandle:395221E080CCF0FD1924103B15873814" ],
+ "metadata" : {
+ "reliabilityIndicator" : "OK",
+ "firstDiscovered" : "2025-01-07T12:20:12.24523200Z",
+ "lastModified" : "2025-01-08T10:40:36.46156500Z"
+ }
} ]
}
},
"gNBId" : 10,
"gNBIdLength" : 2
},
- "sourceIds" : [ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,GNBCUUPFunction=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E" ]
+ "sourceIds" : [ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,GNBCUUPFunction=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E" ],
+ "metadata" : {
+ "reliabilityIndicator" : "OK",
+ "firstDiscovered" : "2025-01-07T12:20:12.24523200Z",
+ "lastModified" : "2025-01-08T10:40:36.46156500Z"
+ }
} ]
}, {
"o-ran-smo-teiv-ran:GNBCUUPFunction" : [ {
"gNBId" : 13,
"gNBIdLength" : 2
},
- "sourceIds" : [ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,GNBCUUPFunction=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155" ]
+ "sourceIds" : [ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,GNBCUUPFunction=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155" ],
+ "metadata" : {
+ "reliabilityIndicator" : "OK",
+ "firstDiscovered" : "2025-01-07T12:20:12.24523200Z",
+ "lastModified" : "2025-01-08T10:40:36.46156500Z"
+ }
} ]
}, {
"o-ran-smo-teiv-ran:GNBCUUPFunction" : [ {
"gNBId" : 14,
"gNBIdLength" : 2
},
- "sourceIds" : [ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,GNBCUUPFunction=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4" ]
+ "sourceIds" : [ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,GNBCUUPFunction=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4" ],
+ "metadata" : {
+ "reliabilityIndicator" : "OK",
+ "firstDiscovered" : "2025-01-07T12:20:12.24523200Z",
+ "lastModified" : "2025-01-08T10:40:36.46156500Z"
+ }
} ]
} ],
"self" : {
"value" : {
"o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER" : [ {
"id" : "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B",
- "aSide" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1",
- "bSide" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1",
- "sourceIds" : [ ]
+ "aSide" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1",
+ "bSide" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1",
+ "sourceIds" : [ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1" ],
+ "metadata" : {
+ "reliabilityIndicator" : "OK",
+ "firstDiscovered" : "2025-01-07T12:20:12.24523200Z",
+ "lastModified" : "2025-01-08T10:40:36.46156500Z"
+ }
} ]
}
},
"items" : [ {
"o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER" : [ {
"id" : "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B",
- "aSide" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1",
- "bSide" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1",
- "sourceIds" : [ ]
+ "aSide" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1",
+ "bSide" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1",
+ "sourceIds" : [ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1", "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1" ],
+ "metadata" : {
+ "reliabilityIndicator" : "OK",
+ "firstDiscovered" : "2025-01-07T12:20:12.24523200Z",
+ "lastModified" : "2025-01-08T10:40:36.46156500Z"
+ }
} ]
}, {
"o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER" : [ {
"id" : "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=11AB21444F9D7C6DAC7453879AB5586D294B495E43AC6F94750767DD624014DB7317E9A5EE73239876649D801037D6347355B19C5D97222B3C25000CF8A97C78",
- "aSide" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2",
- "bSide" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=2",
- "sourceIds" : [ ]
+ "aSide" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2",
+ "bSide" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=2",
+ "sourceIds" : [ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2", "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=2" ],
+ "metadata" : {
+ "reliabilityIndicator" : "OK",
+ "firstDiscovered" : "2025-01-07T12:20:12.24523200Z",
+ "lastModified" : "2025-01-08T10:40:36.46156500Z"
+ }
} ]
} ],
"self" : {
"RelationshipTypesResponseExample" : {
"value" : {
"items" : [ {
- "name" : "MANAGEDELEMENT_MANAGES_GNBDUFUNCTION",
+ "name" : "MANAGEDELEMENT_MANAGES_ODUFUNCTION",
"relationships" : {
- "href" : "/domains/RAN/relationship-types/MANAGEDELEMENT_MANAGES_GNBDUFUNCTION/relationships"
+ "href" : "/domains/RAN/relationship-types/MANAGEDELEMENT_MANAGES_ODUFUNCTION/relationships"
}
}, {
- "name" : "GNBDUFUNCTION_PROVIDES_NRCELLDU",
+ "name" : "ODUFUNCTION_PROVIDES_NRCELLDU",
"relationships" : {
- "href" : "/domains/RAN/relationship-types/GNBDUFUNCTION_PROVIDES_NRCELLDU/relationships"
+ "href" : "/domains/RAN/relationship-types/ODUFUNCTION_PROVIDES_NRCELLDU/relationships"
}
}, {
"name" : "NRCELLDU_USES_NRSECTORCARRIER",
}
},
"SchemaResponseExample" : {
- "value" : "module o-ran-smo-teiv-ran {\nyang-version 1.1;\nnamespace \"urn:o-ran:smo-teiv-ran\";\nprefix or-teiv-ran;\nimport o-ran-smo-teiv-common-yang-types {prefix or-teiv-types; }\nimport o-ran-smo-teiv-common-yang-extensions {prefix or-teiv-yext; }\nimport _3gpp-common-yang-types { prefix types3gpp; }\norganization \"ORAN\";\ndescription\n\"Sample Model.\";\nrevision \"2024-05-24\" {\n description \"Initial revision.\"\n or-teiv-yext:label 0.1.0;\n}\nor-teiv-yext:domain RAN;\nlist GNBDUFunction {\n uses or-teiv-types:Top_Grp_Type;\n key id;\n container attributes {\n container dUpLMNId {\n uses types3gpp:PLMNId;\n }\n leaf gNBDUId {\n type uint32;\n }\n leaf gNBId {\n type uint32;\n }\n leaf gNBIdLength {\n type uint32;\n }\n }\n}\nlist NRCellDU {\n uses or-teiv-types:Top_Grp_Type;\n key id;\n container attributes {\n leaf cellLocalId {\n type uint32;\n }\n leaf nCI {\n type uint32;\n }\n leaf nRPCI {\n type uint32;\n }\n leaf nRTAC {\n type uint32;\n }\n }\n}\nlist NRSectorCarrier {\n uses or-teiv-types:Top_Grp_Type;\n key id;\n container attributes {\n leaf arfcnDL {\n type uint32;\n }\n leaf arfcnUL {\n type uint32;\n }\n leaf frequencyDL {\n type uint32;\n }\n leaf frequencyUL {\n type uint32;\n }\n leaf bSChannelBwDL {\n type uint32;\n }\n }\n }\n}\n"
+ "value" : "module o-ran-smo-teiv-ran {\nyang-version 1.1;\nnamespace \"urn:o-ran:smo-teiv-ran\";\nprefix or-teiv-ran;\nimport o-ran-smo-teiv-common-yang-types {prefix or-teiv-types; }\nimport o-ran-smo-teiv-common-yang-extensions {prefix or-teiv-yext; }\nimport _3gpp-common-yang-types { prefix types3gpp; }\norganization \"ORAN\";\ndescription\n\"Sample Model.\";\nrevision \"2024-05-24\" {\n description \"Initial revision.\"\n or-teiv-yext:label 0.1.0;\n}\nor-teiv-yext:domain RAN;\nlist ODUFunction {\n uses or-teiv-types:Top_Grp_Type;\n key id;\n container attributes {\n container dUpLMNId {\n uses types3gpp:PLMNId;\n }\n leaf gNBDUId {\n type uint32;\n }\n leaf gNBId {\n type uint32;\n }\n leaf gNBIdLength {\n type uint32;\n }\n }\n}\nlist NRCellDU {\n uses or-teiv-types:Top_Grp_Type;\n key id;\n container attributes {\n leaf cellLocalId {\n type uint32;\n }\n leaf nCI {\n type uint32;\n }\n leaf nRPCI {\n type uint32;\n }\n leaf nRTAC {\n type uint32;\n }\n }\n}\nlist NRSectorCarrier {\n uses or-teiv-types:Top_Grp_Type;\n key id;\n container attributes {\n leaf arfcnDL {\n type uint32;\n }\n leaf arfcnUL {\n type uint32;\n }\n leaf frequencyDL {\n type uint32;\n }\n leaf frequencyUL {\n type uint32;\n }\n leaf bSChannelBwDL {\n type uint32;\n }\n }\n }\n}\n"
},
"CreateStaticGroupPayloadExample" : {
"value" : {
"type" : "static",
"providedMembers" : [ {
"o-ran-smo-teiv-ran:NRCellDU" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
} ]
}, {
- "o-ran-smo-teiv-ran:GNBDUFunction" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1"
+ "o-ran-smo-teiv-ran:ODUFunction" : [ {
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1"
} ]
}, {
"o-ran-smo-teiv-oam:ManagedElement" : [ {
"id" : "urn:3gpp:dn:ManagedElement=1"
} ]
}, {
- "o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU" : [ {
- "id" : "urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418"
+ "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU" : [ {
+ "id" : "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624"
} ]
}, {
- "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" : [ {
- "id" : "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56"
+ "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION" : [ {
+ "id" : "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8"
} ]
} ]
}
"value" : {
"items" : [ {
"o-ran-smo-teiv-ran:NRCellDU" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
} ]
}, {
- "o-ran-smo-teiv-ran:GNBDUFunction" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1"
+ "o-ran-smo-teiv-ran:ODUFunction" : [ {
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1"
} ]
}, {
"o-ran-smo-teiv-oam:ManagedElement" : [ {
"id" : "urn:3gpp:dn:ManagedElement=1"
} ]
}, {
- "o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU" : [ {
- "id" : "urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418"
+ "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU" : [ {
+ "id" : "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624"
} ]
}, {
- "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" : [ {
- "id" : "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56"
+ "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION" : [ {
+ "id" : "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8"
} ]
} ],
"self" : {
"value" : {
"items" : [ {
"o-ran-smo-teiv-ran:NRCellDU" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
} ]
}, {
- "o-ran-smo-teiv-ran:GNBDUFunction" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1"
+ "o-ran-smo-teiv-ran:ODUFunction" : [ {
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1"
} ]
}, {
"o-ran-smo-teiv-oam:ManagedElement" : [ {
"id" : "urn:3gpp:dn:ManagedElement=1"
} ]
}, {
- "o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU" : [ {
- "id" : "urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418"
+ "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU" : [ {
+ "id" : "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624"
} ]
}, {
- "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION" : [ {
- "id" : "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56"
+ "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION" : [ {
+ "id" : "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8"
} ]
} ],
"self" : {
"operation" : "merge",
"providedMembers" : [ {
"o-ran-smo-teiv-ran:NRCellDU" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
} ]
} ]
}
"operation" : "remove",
"providedMembers" : [ {
"o-ran-smo-teiv-ran:NRCellDU" : [ {
- "id" : "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ "id" : "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
} ]
} ]
}
Decorators are user-defined attributes (key-value pairs) which can
be applied to topology entities and relationships.
+ Metadata provides additional information about entities and relationships within the database.
+ The reliabilityIndicator is used to indicate the reliability status of the topology data within the network.
+ The firstDiscovered timestamp is set for an entity and relationship instance when the instances are created for
+ the first time in Topology & Inventory.
+ The lastModified timestamp is set for updates to entities or relationships in Topology & Inventory,
+ excluding updates to classifiers or decorators.
+ reliabilityIndicator, firstDiscovered, and lastModified are implemented as name-value pairs within the metadata.
+ They apply to every entity and relationship.
+
Topology groups provide the capability to create user-defined collections of
topology entities and/or relationships of any type. Groups can be either
static or dynamic based on how they are created.
object(s), the query is not constructed. The RootObject still can be
retrieved and filtered using the */attributes*.
- | Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
- |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:---------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------|
- | To return the ids for all instances of the entityTypeName used in the query. | RAN | GNBDUFunction | | | All ids of every GNBDUFunction |
- | To return all attributes of every instance of the entityTypeName used in the query. | RAN | GNBDUFunction | /attributes | | All GNBDUFunctions with every attribute |
- | To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the *targetFilter* parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | GNBDUFunction | /attributes(gNBId) | | All gNBIds of every GNBDUFunction |
- | To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the *targetFilter* parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()". | RAN | GNBDUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every GNBDUFunction |
- | To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the *scopeFilter* parameter. | RAN | GNBDUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where sourceIds contains *SubNetwork=Ireland* |
- | To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the *scopeFilter* parameter. <br/> Note: The attributes must be separated by a *AND* or *OR*". | RAN | GNBDUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |
- | To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the *scopeFilter* parameter. A condition is a complete unit of *scopeFilter* parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "|" to represent OR. | RAN | GNBDUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |
+ | Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
+ |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:----------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+ | To return the ids for all instances of the entityTypeName used in the query. | RAN | ODUFunction | | | All ids of every ODUFunction |
+ | To return all attributes of every instance of the entityTypeName used in the query. | RAN | ODUFunction | /attributes | | All ODUFunctions with every attribute |
+ | To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the *targetFilter* parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | ODUFunction | /attributes(gNBId) | | All gNBIds of every ODUFunction |
+ | To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the *targetFilter* parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()". | RAN | ODUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every ODUFunction |
+ | To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the *scopeFilter* parameter. | RAN | ODUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where sourceIds contains *SubNetwork=Ireland* |
+ | To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the *scopeFilter* parameter. <br/> Note: The attributes must be separated by a *AND* or *OR*. | RAN | ODUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |
+ | To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the *scopeFilter* parameter. A condition is a complete unit of *scopeFilter* parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "|" to represent OR. | RAN | ODUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |
+ | To return the metadata for all instances of the entityTypeName used in the query, that is *firstDiscovered* within the given timeframe in the *scopeFilter* parameter. <br/> Note: The timestamps can be queried in any timezone. | RAN | ODUFunction | | /metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30'] | Unique set of ids of ODUFunctions, where metadata contains *firstDiscovered* timestamp within the range '2025-01-06T12:34:56.789+05:30' and '2025-01-09T16:10:36.461565+05:30' |
## Querying connected entities
The *entityTypeName* is used as the root of the queries.
|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| To return the ids for all instances of an entityTypeName related by an association. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement | All ENodeBFunction entities that are managed by any Managed Element. |
| To return the ids for all instances of an entityTypeName related by an association to another entity specified by its *id*. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All ENodeBFunction entities that are managed by the Managed Element *urn:3gpp:dn: ManagedElement=1*. |
- | To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their *id*. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All EnodeBFunction entities with enbId as *1*, managed by the Managed Element *urn:3gpp:dn: ManagedElement=1* or *urn:3gpp:dn: ManagedElement=2*, and provides EuTranCell *urn:3gpp:dn: ManagedElement=1, EUtranCell=2*. |
- | To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given *scopeFilter* parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All EnodeBFunction entities that provide an EuTranCell whose tac equals 1 |
+ | To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their *id*. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All ENodeBFunction entities with enbId as *1*, managed by the Managed Element *urn:3gpp:dn: ManagedElement=1* or *urn:3gpp:dn: ManagedElement=2*, and provides EuTranCell *urn:3gpp:dn: ManagedElement=1, EUtranCell=2*. |
+ | To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given *scopeFilter* parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All ENodeBFunction entities that provide an EUTranCell whose tac equals 1 |
## Querying based on geographical location
The *entityTypeName* is used as the root of the queries. Use the "Well-known text" (WKT) representation of geometry to specify geometry objects.
| Use case | domainName | entityTypeName | entityId | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------|-------------|:---------------|------------------------------------------------|:----------------------------------------|:-------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
- | To return the relationships for a given entity specified by its id. | RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | | All relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1*. |
- | To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | /MANAGEDELEMENT _MANAGES _GNBDUFUNCTION | | All *MANAGEDELEMENT _MANAGES _GNBDUFUNCTION* relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1*. |
- | To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All *MANAGEDELEMENT _MANAGES _GNBDUFUNCTION* relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1* where the managed element is *urn:3gpp:dn: ManagedElement=1*. |
+ | To return the relationships for a given entity specified by its id. | RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | | All relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1*. |
+ | To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | /MANAGEDELEMENT _MANAGES _ODUFUNCTION | | All *MANAGEDELEMENT _MANAGES _ODUFUNCTION* relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1*. |
+ | To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All *MANAGEDELEMENT _MANAGES _ODUFUNCTION* relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1* where the managed element is *urn:3gpp:dn: ManagedElement=1*. |
## Querying on relationships
Here, the *relationshipTypeName* is used as the root of the queries.
| Use case | domainName | targetFilter | scopeFilter | Query result |
|:--------------------------------------------------------------------------------------------------------------------------------------------------|------------|--------------|:----------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------|
- | Return all related entity IDs that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'gnbdu-function-model:Indoor'] | All the entity IDs that are classified with "gnbdu-function-model:Indoor" in RAN domain. |
- | Return all related entity IDs that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity IDs that are partially matched with "Ind" in RAN domain. |
- | Return all related entity IDs that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@gnbdu-function-model:textdata = 'Stockholm'] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata = 'Stockholm'" in RAN domain. |
- | Return all related entity IDs that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@gnbdu-function-model:textdata, '')] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata as key of the decorator in RAN domain. |
+ | Return all related entity ids that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'odu-function-model:Indoor'] | All the entity ids that are classified with "odu-function-model:Indoor" in RAN domain. |
+ | Return all related entity ids that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity ids that are partially matched with "Ind" in RAN domain. |
+ | Return all related entity ids that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@odu-function-model:textdata = 'Stockholm'] | All the entity ids that are exactly matched with "odu-function-model:textdata = 'Stockholm'" in RAN domain. |
+ | Return all related entity ids that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@odu-function-model:textdata, '')] | All the entity ids that are exactly matched with "odu-function-model:textdata as key of the decorator in RAN domain. |
The *entityName* is used as the root of the queries.
| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|:---------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
- | Return all related entity IDs and classifiers. | NRCellDU | | /classifiers | | All NRCellDU IDs and classifiers. |
- | Return all related entity IDs and decorators. | NRCellDU | | /decorators | | All NRCellDU IDs and decorators. |
- | Return all related entity IDs that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All NRCellDU IDs where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "gnbdu-function-model:Indoor". |
- | Return all related entity IDs and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU IDs and classifiers partially contains the text "Ind". |
- | Return all related entity IDs and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc'. |
- | Return all related entity IDs, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind". |
-
+ | Return all related entity ids and classifiers. | NRCellDU | | /classifiers | | All NRCellDU ids and classifiers. |
+ | Return all related entity ids and decorators. | NRCellDU | | /decorators | | All NRCellDU ids and decorators. |
+ | Return all related entity ids that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All NRCellDU ids where key of the decorator is "odu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "odu-function-model:Indoor". |
+ | Return all related entity ids and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU ids and classifiers partially contains the text "Ind". |
+ | Return all related entity ids and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stoc'. |
+ | Return all related entity ids, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind". |
+
The *relationshipTypeName* is used as the root of the queries.
-
+
| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:----------------------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
- | Return all related relationships IDs and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and classifiers. |
- | Return all related relationships IDs and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators. |
- | Return all related relationship IDs that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "gnbdu-function-model:Indoor". |
- | Return all related relationships IDs and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind". |
- | Return all related relationships IDs and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock'. |
- | Return all related relationships IDs,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind". |
+ | Return all related relationship ids and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and classifiers. |
+ | Return all related relationship ids and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators. |
+ | Return all related relationship ids that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "odu-function-model:Indoor". |
+ | Return all related relationship ids and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind". |
+ | Return all related relationship ids and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stock'. |
+ | Return all related relationship ids,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind". |
version: 0.11.0
title: Topology Exposure and Inventory API
- module-y:Rural
- module-z:Weekend
entityIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
ClassifierDeleteExample:
- module-x:Outdoor
- module-z:Weekend
entityIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
module-x:location: Stockholm
module-y:vendor: Ericsson
entityIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
DecoratorDeleteExample:
decorators:
module-x:location: Stockholm
entityIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
EntityResponseExample:
value:
o-ran-smo-teiv-ran:NRCellDU:
- - id: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ - id: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
attributes:
cellLocalId: 91
nCI: 91
classifiers:
- Rural
sourceIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
- "urn:cmHandle:395221E080CCF0FD1924103B15873814"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
EntitiesResponseExample:
value:
sourceIds:
- "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,GNBCUUPFunction=10"
- "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
- o-ran-smo-teiv-ran:GNBCUUPFunction:
- id: "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,GNBCUUPFunction=13"
attributes:
sourceIds:
- "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,GNBCUUPFunction=13"
- "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
- o-ran-smo-teiv-ran:GNBCUUPFunction:
- id: "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,GNBCUUPFunction=14"
attributes:
sourceIds:
- "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,GNBCUUPFunction=14"
- "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
self:
href: "/domains/RAN/entities?offset=0&limit=3&targetFilter=/sourceIds;/attributes"
first:
value:
o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
- aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1"
- sourceIds: []
+ aSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ bSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1"
+ sourceIds:
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
RelationshipsResponseExample:
value:
items:
- o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
- aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1"
- sourceIds: []
+ aSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ bSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1"
+ sourceIds:
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
- o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=11AB21444F9D7C6DAC7453879AB5586D294B495E43AC6F94750767DD624014DB7317E9A5EE73239876649D801037D6347355B19C5D97222B3C25000CF8A97C78"
- aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
- bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=2"
- sourceIds: []
+ aSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
+ bSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=2"
+ sourceIds:
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=2"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
self:
href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500"
first:
RelationshipTypesResponseExample:
value:
items:
- - name: "MANAGEDELEMENT_MANAGES_GNBDUFUNCTION"
+ - name: "MANAGEDELEMENT_MANAGES_ODUFUNCTION"
relationships:
- href: "/domains/RAN/relationship-types/MANAGEDELEMENT_MANAGES_GNBDUFUNCTION/relationships"
- - name: "GNBDUFUNCTION_PROVIDES_NRCELLDU"
+ href: "/domains/RAN/relationship-types/MANAGEDELEMENT_MANAGES_ODUFUNCTION/relationships"
+ - name: "ODUFUNCTION_PROVIDES_NRCELLDU"
relationships:
- href: "/domains/RAN/relationship-types/GNBDUFUNCTION_PROVIDES_NRCELLDU/relationships"
+ href: "/domains/RAN/relationship-types/ODUFUNCTION_PROVIDES_NRCELLDU/relationships"
- name: "NRCELLDU_USES_NRSECTORCARRIER"
relationships:
href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships"
or-teiv-yext:label 0.1.0;
}
or-teiv-yext:domain RAN;
- list GNBDUFunction {
+ list ODUFunction {
uses or-teiv-types:Top_Grp_Type;
key id;
container attributes {
type: static
providedMembers:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
- - o-ran-smo-teiv-ran:GNBDUFunction:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
+ - o-ran-smo-teiv-ran:ODUFunction:
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1
- o-ran-smo-teiv-oam:ManagedElement:
- id: urn:3gpp:dn:ManagedElement=1
- - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
- - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
- - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
- - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56
+ - o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU:
+ - id: urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624
+ - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION:
+ - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8
CreateDynamicGroupGetEntitiesByDomainPayloadExample:
value:
value:
items:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
- - o-ran-smo-teiv-ran:GNBDUFunction:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
+ - o-ran-smo-teiv-ran:ODUFunction:
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1
- o-ran-smo-teiv-oam:ManagedElement:
- id: urn:3gpp:dn:ManagedElement=1
- - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
- - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
- - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
- - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56
+ - o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU:
+ - id: urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624
+ - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION:
+ - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8
self:
href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members?offset=0&limit=500"
first:
value:
items:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
- - o-ran-smo-teiv-ran:GNBDUFunction:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
+ - o-ran-smo-teiv-ran:ODUFunction:
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1
- o-ran-smo-teiv-oam:ManagedElement:
- id: urn:3gpp:dn:ManagedElement=1
- - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
- - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
- - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
- - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56
+ - o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU:
+ - id: urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624
+ - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION:
+ - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8
self:
href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/provided-members?offset=0&limit=500"
first:
operation: "merge"
providedMembers:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
RemoveProvidedMembersPayloadExample:
value:
operation: "remove"
providedMembers:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
StaticGroupResponseExample:
value:
| moduleReferenceName | TEXT NOT NULL | A reference to an associated module |
+------------------------------------------+------------------+-----------------------------------------+
| | FOREIGN KEY ("moduleReferenceName") | FOREIGN KEY | Foreign key constraint |
-| | REFERENCES ties_model.module_reference | | |
+| | REFERENCES teiv_model.module_reference | | |
| | ("name") ON DELETE CASCADE | | |
+------------------------------------------+------------------+-----------------------------------------+
| moduleReferenceName | TEXT PRIMARY KEY | The name of the module reference associated with the relationship |
+------------------------------------------+------------------+-------------------------------------------------------------------+
| | FOREIGN KEY ("aSideModule") REFERENCES | FOREIGN KEY | Foreign key constraint |
-| | ties_model.module_reference ("name") | | |
+| | teiv_model.module_reference ("name") | | |
| | ON DELETE CASCADE | | |
+------------------------------------------+------------------+-------------------------------------------------------------------+
| | FOREIGN KEY ("bSideModule") REFERENCES | FOREIGN KEY | Foreign key constraint |
-| | ties_model.module_reference ("name") | | |
+| | teiv_model.module_reference ("name") | | |
| | ON DELETE CASCADE | | | |
+------------------------------------------+------------------+-------------------------------------------------------------------+
| | FOREIGN KEY ("moduleReferenceName") |FOREIGN KEY | Foreign key constraint |
| | REFERENCES | | |
-| | ties_model.module_reference ("name") | | |
+| | teiv_model.module_reference ("name") | | |
| | ON DELETE CASCADE | | |
+------------------------------------------+------------------+-------------------------------------------------------------------+
| | | | belongs to. |
+--------------------------------------------------+------------------+-----------------------------------+
| | FOREIGN KEY ("moduleReferenceName") REFERENCES | FOREIGN KEY | Foreign key constraint |
-| | ties_consumer_data.module_reference ("name") | | |
+| | teiv_consumer_data.module_reference ("name") | | |
| | ON DELETE CASCADE | | |
+--------------------------------------------------+------------------+-----------------------------------+
| | | | belongs to. |
+--------------------------------------------------+------------------+-----------------------------------+
| | FOREIGN KEY ("moduleReferenceName") REFERENCES | FOREIGN KEY | Foreign key constraint |
-| | ties_consumer_data.module_reference ("name") | | |
+| | teiv_consumer_data.module_reference ("name") | | |
| | ON DELETE CASCADE | | |
+--------------------------------------------------+------------------+-----------------------------------+
.. code-block:: sql
- CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+ CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
.. code-block:: sql
- SELECT ties_data.create_constraint_if_not_exists(
+ SELECT teiv_data.create_constraint_if_not_exists(
'CloudNativeApplication',
'PK_CloudNativeApplication_id',
- 'ALTER TABLE ties_data."CloudNativeApplication" ADD CONSTRAINT "PK_CloudNativeApplication_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."CloudNativeApplication" ADD CONSTRAINT "PK_CloudNativeApplication_id" PRIMARY KEY ("id");'
);
- "01_init-oran-smo-teiv-model.sql "src/main/resources/scripts/01_init-oran-smo-teiv-model.sql"
+++ /dev/null
-============LICENSE_START=======================================================
-Copyright (C) 2024 Ericsson
-Modifications Copyright (C) 2024 OpenInfra Foundation Europe
-================================================================================
-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.
-
-SPDX-License-Identifier: Apache-2.0
-============LICENSE_END=========================================================
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ============LICENSE_START=======================================================
- Copyright (C) 2024 Ericsson
- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
- ================================================================================
- 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.
-
- SPDX-License-Identifier: Apache-2.0
- ============LICENSE_END=========================================================
--->
-<additionalHeaders>
- <javadoc_style>
- <firstLine>/*</firstLine>
- <beforeEachLine> * </beforeEachLine>
- <endLine> */</endLine>
- <!--skipLine></skipLine-->
- <firstLineDetectionPattern>(\s|\t)*/\*.*$</firstLineDetectionPattern>
- <lastLineDetectionPattern>.*\*/(\s|\t)*$</lastLineDetectionPattern>
- <allowBlankLines>false</allowBlankLines>
- <multiLine>true</multiLine>
- <padLines>false</padLines>
- </javadoc_style>
-</additionalHeaders>
+++ /dev/null
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!--
- ============LICENSE_START=======================================================
- Copyright (C) 2024 Ericsson
- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
- ================================================================================
- 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.
-
- SPDX-License-Identifier: Apache-2.0
- ============LICENSE_END=========================================================
--->
-<additionalHeaders>
- <xml_style>
- <firstLine><![CDATA[<!--]]></firstLine>
- <beforeEachLine> </beforeEachLine>
- <endLine><![CDATA[ -->]]></endLine>
- <skipLine><![CDATA[^<\?xml.*>$]]></skipLine>
- <firstLineDetectionPattern><![CDATA[(\s|\t)*<!--.*$]]></firstLineDetectionPattern>
- <lastLineDetectionPattern><![CDATA[.*-->(\s|\t)*$]]></lastLineDetectionPattern>
- <allowBlankLines>false</allowBlankLines>
- <multiLine>true</multiLine>
- <padLines>false</padLines>
- </xml_style>
-</additionalHeaders>
+<!--
+ ============LICENSE_START=======================================================
+ Copyright (C) 2024 Ericsson
+ Modifications Copyright (C) 2025 OpenInfra Foundation Europe
+ ================================================================================
+ 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.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+-->
+
+
# PG SQL Schema Generator
*PG SQL Schema Generator* provides the capability of generating a PostgresSQL schema from the YANG models. This schema
| storedAt | TEXT PRIMARY KEY | Un-hashed table name where entity type instances are stored |
| name | TEXT NOT NULL | The entity type name |
| moduleReferenceName | TEXT NOT NULL | A reference to an associated module |
- | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
+ | FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
**relationship_info:** When it comes to relationship info generation module reference names
are assigned to relationships. For each relationship the max cardinality is taken and then
| storedAt | TEXT NOT NULL | The un-hashed table name where relation instance information is stored |
| connectSameEntity | BOOLEAN NOT NULL | Indicates whether the relationship connects the same entity |
| moduleReferenceName | TEXT PRIMARY KEY | The name of the module reference associated with the relationship |
- | FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
- | FOREIGN KEY ("bSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
- | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
+ | FOREIGN KEY ("aSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
+ | FOREIGN KEY ("bSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
+ | FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
Along with this it ensures that the structure for the model schema SQL file starts with
the correct structure by importing the baseline schema information.
| name | TEXT PRIMARY KEY | The key of the decorator. |
| dataType | VARCHAR(511) | The data type of the decorator, needed for parsing. |
| moduleReferenceName | TEXT | References the corresponding consumer module reference the decorator belongs to. |
- | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
+ | FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
- **classifiers:** There will be the ability for client applications to apply user-defined keywords/tags (classifiers) to
topology entities and relationships.
|---------------------------------------------------------------------------------------------------------------|------------------|-----------------------------------------------------------------------------------|
| name | TEXT PRIMARY KEY | The actual classifier. |
| moduleReferenceName | TEXT | References the corresponding consumer module reference the classifier belongs to. |
- | FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
+ | FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data.module_reference ("name") ON DELETE CASCADE | FOREIGN KEY | Foreign key constraint |
##### How to use classifiers and decorators
1. Create a schema with the /schemas endpoint using Yang Module. After a successful schema creation, the topology objects are ready to be classified.
- Create constant if it doesn't exist
```text
- CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+ CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
Example:
```text
- SELECT ties_data.create_constraint_if_not_exists(
+ SELECT teiv_data.create_constraint_if_not_exists(
'CloudNativeApplication',
'PK_CloudNativeApplication_id',
- 'ALTER TABLE ties_data."CloudNativeApplication" ADD CONSTRAINT "PK_CloudNativeApplication_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."CloudNativeApplication" ADD CONSTRAINT "PK_CloudNativeApplication_id" PRIMARY KEY ("id");'
);
```
- [01_init-oran-smo-teiv-model.sql](src/main/resources/scripts/01_init-oran-smo-teiv-model.sql)
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <version>0.15</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
public static final String ALTER = "ALTER";
public static final String DEFAULT = "DEFAULT";
public static final String INDEX = "INDEX";
- public static final String ALTER_TABLE_TIES_DATA_S = "ALTER TABLE ties_data.\"%s\" ";
- public static final String ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S = ALTER_TABLE_TIES_DATA_S + "ADD CONSTRAINT \"%s\" ";
+ public static final String ALTER_TABLE_TEIV_DATA_S = "ALTER TABLE teiv_data.\"%s\" ";
+ public static final String ALTER_TABLE_TEIV_DATA_S_ADD_CONSTRAINT_S = ALTER_TABLE_TEIV_DATA_S + "ADD CONSTRAINT \"%s\" ";
public static final String CLASSIFIERS = "classifiers";
public static final String DECORATORS = "decorators";
public static final String A_SIDE = "A_SIDE";
public static final String B_SIDE = "B_SIDE";
public static final String RELATION = "RELATION";
- public static final String GEO_LOCATION = "geo-location";
+ public static final String GEO_LOCATION = "__geo-location";
public static final String GEOGRAPHY = "geography";
public static final String METADATA = "metadata";
- public static final String UPDATED_TIME = "updated_time";
- public static final String TIMESTAMPTZ = "TIMESTAMPTZ";
public static final String REL_PREFIX = "REL_";
- public static final String RESP_PREFIX = "RESP_";
public static final String BYTEA = "BYTEA";
public static final String REL_METADATA_PREFIX = "REL_" + METADATA + "_";
public static final String HASHED_ID = "hashed_id";
- public static final String REL_UPDATETIME_PREFIX = "REL_" + UPDATED_TIME + "_";
- public static final String REL_RESP_PREFIX = REL_PREFIX + RESP_PREFIX + ID + "_";
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@Getter
@AllArgsConstructor
public enum IndexType {
- GIN("CREATE INDEX IF NOT EXISTS \"%s\" ON ties_data.\"%s\" USING GIN (\"%s\");"),
+ GIN("CREATE INDEX IF NOT EXISTS \"%s\" ON teiv_data.\"%s\" USING GIN (\"%s\");"),
GIN_TRGM_OPS_ON_LIST_AS_JSONB(
- "CREATE INDEX IF NOT EXISTS \"%s\" ON ties_data.\"%s\" USING GIN ((\"%s\"::TEXT) gin_trgm_ops);");
+ "CREATE INDEX IF NOT EXISTS \"%s\" ON teiv_data.\"%s\" USING GIN ((\"%s\"::TEXT) gin_trgm_ops);");
private final String createIndexStmt;
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
public static PgSchemaGeneratorException assignModuleRefException(final String relationshipName, Exception ex) {
- return new PgSchemaGeneratorException(String.format("ties.model : Unable to assign module reference to - %s",
+ return new PgSchemaGeneratorException(String.format("teiv.model : Unable to assign module reference to - %s",
relationshipName), ex);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
outputStream.write(strToBytes);
} catch (IOException exception) {
if (schema.getName().endsWith("data.sql")) {
- throw PgSchemaGeneratorException.writeGeneratedSchemaException("ties.data", exception);
+ throw PgSchemaGeneratorException.writeGeneratedSchemaException("teiv.data", exception);
} else {
- throw PgSchemaGeneratorException.writeGeneratedSchemaException("ties.model", exception);
+ throw PgSchemaGeneratorException.writeGeneratedSchemaException("teiv.model", exception);
}
}
} else {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
String line;
while ((line = br.readLine()) != null) {
line = line.trim();
- if (line.startsWith("COPY ties_model.relationship_info") && !line.startsWith("\\.")) {
+ if (line.startsWith("COPY teiv_model.relationship_info") && !line.startsWith("\\.")) {
line = br.readLine();
List<String> relData = Arrays.asList(line.replace("\"", "").split("\\s+"));
identifiedRelationships.add(Relationship.builder().name(relData.get(0)).aSideAssociationName(relData
}
}
} catch (IOException exception) {
- throw PgSchemaGeneratorException.readBaselineException("ties.data", exception);
+ throw PgSchemaGeneratorException.readBaselineException("teiv.data", exception);
}
}
return identifiedRelationships;
extractDefaultValueFromBaseline(line, identifiedTables);
} else if ((line.contains("CREATE TABLE") || line.contains("ALTER TABLE")) && !line.startsWith("'")) {
extractTableColumns(line, identifiedTables, br);
- } else if (line.contains("SELECT") && line.contains("ties_data.create_constraint_if_not_exists")) {
+ } else if (line.contains("SELECT") && line.contains("teiv_data.create_constraint_if_not_exists")) {
extractConstraints(identifiedTables, br);
} else if (line.startsWith("CREATE INDEX IF NOT EXISTS")) {
extractIndex(line, identifiedTables);
}
}
} catch (IOException exception) {
- throw PgSchemaGeneratorException.readBaselineException("ties.data", exception);
+ throw PgSchemaGeneratorException.readBaselineException("teiv.data", exception);
}
}
return identifiedTables;
.tableName(tableToAddConstraintTo).columnToAddConstraintTo(columnToAddForeignKeyTo)
.build());
} else if (alterStatement.contains("FOREIGN KEY")) {
- String substringFromLastTiesData = alterStatement.substring(StringUtils.lastIndexOf(
- alterStatement, "ties_data.\""));
- String referenceTable = StringUtils.substringBetween(substringFromLastTiesData, "\"", "\"");
+ String substringFromLastTeivData = alterStatement.substring(StringUtils.lastIndexOf(
+ alterStatement, "teiv_data.\""));
+ String referenceTable = StringUtils.substringBetween(substringFromLastTeivData, "\"", "\"");
String referenceTableColumn = alterStatement.substring(StringUtils.lastIndexOf(
alterStatement, "(") + 1, StringUtils.lastIndexOf(alterStatement, ")")).replace(
"\"", "").trim();
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
FileHelper.copyResourceToFile(skeletonResource, destinationPath.toFile());
this.schema = destinationPath.toFile();
} catch (IOException exception) {
- throw PgSchemaGeneratorException.prepareBaselineException("ties.consumer-data", exception);
+ throw PgSchemaGeneratorException.prepareBaselineException("teiv.consumer-data", exception);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
this.schema = newDataSchema;
} catch (IOException exception) {
- throw PgSchemaGeneratorException.prepareBaselineException("ties.data", exception);
+ throw PgSchemaGeneratorException.prepareBaselineException("teiv.data", exception);
}
}
List<Table> tablesFromSkeleton = SchemaParser.extractDataFromBaseline(tmpSkeletonFile.getAbsolutePath());
tablesForNbcCheck.addAll(tablesFromSkeleton);
} catch (IOException exception) {
- throw PgSchemaGeneratorException.prepareBaselineException("ties.data", exception);
+ throw PgSchemaGeneratorException.prepareBaselineException("teiv.data", exception);
}
// Get tables from baseline sql
List<Table> tablesFromBaselineSql = isGreenFieldInstallation ?
});
}
} catch (IOException exception) {
- throw PgSchemaGeneratorException.readCustomSqlFileException("ties.data", exception);
+ throw PgSchemaGeneratorException.readCustomSqlFileException("teiv.data", exception);
}
return customSqlQueries;
}
private StringBuilder generateAnalyzeTableStatement(List<Table> tablesFromModelSvc) {
StringBuilder analyzeTableStmt = new StringBuilder();
- tablesFromModelSvc.forEach(table -> analyzeTableStmt.append(String.format("ANALYZE ties_data.\"%s\";%n%n", table
+ tablesFromModelSvc.forEach(table -> analyzeTableStmt.append(String.format("ANALYZE teiv_data.\"%s\";%n%n", table
.getName())));
return analyzeTableStmt;
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.oran.smo.teiv.pgsqlgenerator.Constants.CREATE;
import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER;
-import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER_TABLE_TEIV_DATA_S_ADD_CONSTRAINT_S;
import static org.oran.smo.teiv.pgsqlgenerator.Constants.DEFAULT;
import static org.oran.smo.teiv.pgsqlgenerator.Constants.GEOGRAPHY;
import static org.oran.smo.teiv.pgsqlgenerator.Constants.GEO_LOCATION;
import static org.oran.smo.teiv.pgsqlgenerator.Constants.ID;
-import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER_TABLE_TIES_DATA_S;
+import static org.oran.smo.teiv.pgsqlgenerator.Constants.ALTER_TABLE_TEIV_DATA_S;
import static org.oran.smo.teiv.pgsqlgenerator.Constants.INDEX;
@Slf4j
*/
private StringBuilder generateCreateTableStatements(List<Column> newColumns, String tableName) {
- StringBuilder storeTableSchema = new StringBuilder(String.format("CREATE TABLE IF NOT EXISTS ties_data.\"%s\" (%n",
+ StringBuilder storeTableSchema = new StringBuilder(String.format("CREATE TABLE IF NOT EXISTS teiv_data.\"%s\" (%n",
tableName));
StringBuilder storeColumns = new StringBuilder();
StringBuilder storeDefaultValues = new StringBuilder();
*/
private StringBuilder generateDefaultValueStatements(Column newColumn, String tableName) {
return new StringBuilder(String.format(
- "ALTER TABLE ONLY ties_data.\"%s\" ALTER COLUMN \"%s\" SET DEFAULT '%s';%n%n", tableName, newColumn
+ "ALTER TABLE ONLY teiv_data.\"%s\" ALTER COLUMN \"%s\" SET DEFAULT '%s';%n%n", tableName, newColumn
.getName(), newColumn.getDefaultValue()));
}
private String generateConstraintStatement(PostgresConstraint postgresConstraint) {
String constraintSql = generateConstraintSql(postgresConstraint);
- return String.format("SELECT ties_data.create_constraint_if_not_exists(%n\t'%s',%n '%s',%n '%s;'%n);%n%n",
+ return String.format("SELECT teiv_data.create_constraint_if_not_exists(%n\t'%s',%n '%s',%n '%s;'%n);%n%n",
postgresConstraint.getTableToAddConstraintTo(), postgresConstraint.getConstraintName(), constraintSql);
}
private String generateConstraintSql(PostgresConstraint postgresConstraint) {
if (postgresConstraint instanceof PrimaryKeyConstraint) {
- return String.format(ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S + "PRIMARY KEY (\"%s\")", postgresConstraint
+ return String.format(ALTER_TABLE_TEIV_DATA_S_ADD_CONSTRAINT_S + "PRIMARY KEY (\"%s\")", postgresConstraint
.getTableToAddConstraintTo(), postgresConstraint.getConstraintName(), postgresConstraint
.getColumnToAddConstraintTo());
} else if (postgresConstraint instanceof ForeignKeyConstraint fkConstraint) {
return String.format(
- ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S + "FOREIGN KEY (\"%s\") REFERENCES ties_data.\"%s\" (\"%s\")",
+ ALTER_TABLE_TEIV_DATA_S_ADD_CONSTRAINT_S + "FOREIGN KEY (\"%s\") REFERENCES teiv_data.\"%s\" (\"%s\")",
fkConstraint.getTableToAddConstraintTo(), fkConstraint.getConstraintName(), fkConstraint
.getColumnToAddConstraintTo(), fkConstraint.getReferencedTable(), fkConstraint
.getReferencedColumn());
} else if (postgresConstraint instanceof UniqueConstraint) {
- return String.format(ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S + "UNIQUE (\"%s\")", postgresConstraint
+ return String.format(ALTER_TABLE_TEIV_DATA_S_ADD_CONSTRAINT_S + "UNIQUE (\"%s\")", postgresConstraint
.getTableToAddConstraintTo(), postgresConstraint.getConstraintName(), postgresConstraint
.getColumnToAddConstraintTo());
} else if (postgresConstraint instanceof NotNullConstraint) {
- return String.format(ALTER_TABLE_TIES_DATA_S_ADD_CONSTRAINT_S + "NOT NULL (\"%s\")", postgresConstraint
+ return String.format(ALTER_TABLE_TEIV_DATA_S_ADD_CONSTRAINT_S + "NOT NULL (\"%s\")", postgresConstraint
.getTableToAddConstraintTo(), postgresConstraint.getConstraintName(), postgresConstraint
.getColumnToAddConstraintTo());
} else {
* Generate ALTER sql statements for attributes who have no constraints, default value or enums defined.
*/
private StringBuilder generateAlterTableStatements(Column newColumn, String tableName) {
- return new StringBuilder(String.format(ALTER_TABLE_TIES_DATA_S + "ADD COLUMN IF NOT EXISTS \"%s\" %s;%n%n",
+ return new StringBuilder(String.format(ALTER_TABLE_TEIV_DATA_S + "ADD COLUMN IF NOT EXISTS \"%s\" %s;%n%n",
tableName, newColumn.getName(), newColumn.getDataType()));
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
FileHelper.copyResourceToFile(skeletonResource, destinationPath.toFile());
this.schema = destinationPath.toFile();
} catch (IOException exception) {
- throw PgSchemaGeneratorException.prepareBaselineException("ties.group", exception);
+ throw PgSchemaGeneratorException.prepareBaselineException("teiv.group", exception);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
this.schema = newGeneratedModelFile;
} catch (IOException exception) {
- throw PgSchemaGeneratorException.prepareBaselineException("ties.model", exception);
+ throw PgSchemaGeneratorException.prepareBaselineException("teiv.model", exception);
}
}
// Check for NBCs
backwardCompatibilityChecker.checkForNBCChangesInModel(relFromBaselineSql, relationships);
}
- StringBuilder tiesModelSql = new StringBuilder();
+ StringBuilder teivModelSql = new StringBuilder();
List<HashInfoEntity> hashInfoList = new ArrayList<>(hashInfoDataGenerator.getHashInfoRowsList().stream().toList());
hashInfoList.sort(Comparator.comparing(HashInfoEntity::getName));
- tiesModelSql.append(prepareCopyStatement(hashInfoList));
- tiesModelSql.append(prepareCopyStatement(modules));
- tiesModelSql.append(prepareCopyStatement(entities));
- tiesModelSql.append(prepareCopyStatement(relationships));
- tiesModelSql.append(";\n").append("\nCOMMIT;");
- this.sqlStatements = tiesModelSql.toString();
+ teivModelSql.append(prepareCopyStatement(hashInfoList));
+ teivModelSql.append(prepareCopyStatement(modules));
+ teivModelSql.append(prepareCopyStatement(entities));
+ teivModelSql.append(prepareCopyStatement(relationships));
+ teivModelSql.append(";\n").append("\nCOMMIT;");
+ this.sqlStatements = teivModelSql.toString();
}
private StringBuilder prepareCopyStatement(List<? extends Table> table) {
StringBuilder copyStatement = new StringBuilder();
if (!table.isEmpty()) {
- copyStatement.append("COPY ties_model.").append(table.get(0).getTableName()).append(table.get(0)
+ copyStatement.append("COPY teiv_model.").append(table.get(0).getTableName()).append(table.get(0)
.getColumnsForCopyStatement()).append(" FROM stdin;\n");
table.forEach(table1 -> copyStatement.append(table1.getRecordForCopyStatement()));
copyStatement.append("\\.\n\n");
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE OR REPLACE FUNCTION ties_data.create_enum_type(
+CREATE OR REPLACE FUNCTION teiv_data.create_enum_type(
schema_name TEXT, type_name TEXT, enum_values TEXT[]
) RETURNS VOID AS $$
BEGIN
END;
$$ language 'plpgsql';
-SELECT ties_data.create_enum_type('ties_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
+SELECT teiv_data.create_enum_type('teiv_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
-CREATE TABLE IF NOT EXISTS ties_data."responsible_adapter" (
+CREATE TABLE IF NOT EXISTS teiv_data."responsible_adapter" (
"id" TEXT,
"hashed_id" BYTEA
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'PK_responsible_adapter_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'UNIQUE_responsible_adapter_hashed_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
);
\ No newline at end of file
BEGIN;
-DROP SCHEMA IF EXISTS ties_model cascade;
-CREATE SCHEMA IF NOT EXISTS ties_model;
-ALTER SCHEMA ties_model OWNER TO :pguser;
+DROP SCHEMA IF EXISTS teiv_model cascade;
+CREATE SCHEMA IF NOT EXISTS teiv_model;
+ALTER SCHEMA teiv_model OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-CREATE TABLE IF NOT EXISTS ties_model.hash_info (
+CREATE TABLE IF NOT EXISTS teiv_model.hash_info (
"name" TEXT PRIMARY KEY,
"hashedValue" VARCHAR(63) NOT NULL,
"type" VARCHAR(511)
);
-CREATE TABLE IF NOT EXISTS ties_model.module_reference (
+CREATE TABLE IF NOT EXISTS teiv_model.module_reference (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"domain" TEXT,
"content" TEXT NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_model.entity_info (
+CREATE TABLE IF NOT EXISTS teiv_model.entity_info (
"storedAt" TEXT PRIMARY KEY,
"name" TEXT NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
"attributeNames" jsonb DEFAULT '[]'::jsonb,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
+CREATE TABLE IF NOT EXISTS teiv_model.relationship_info (
"name" TEXT NOT NULL,
"aSideAssociationName" TEXT NOT NULL,
"aSideMOType" TEXT NOT NULL,
"connectSameEntity" BOOLEAN NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
PRIMARY KEY ("name", "moduleReferenceName"),
- FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("bSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("aSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("bSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
-ALTER SCHEMA ties_consumer_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_consumer_data;
+ALTER SCHEMA teiv_consumer_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."module_reference" (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"revision" TEXT NOT NULL,
"status" VARCHAR(127) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."decorators" (
"name" TEXT PRIMARY KEY,
"dataType" VARCHAR(511) NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."classifiers" (
"name" TEXT PRIMARY KEY,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
COMMIT;
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_groups;
-ALTER SCHEMA ties_groups OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_groups;
+ALTER SCHEMA teiv_groups OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_groups.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_groups.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_groups' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_groups' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE TABLE IF NOT EXISTS ties_groups."groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."groups" (
"id" VARCHAR(150) PRIMARY KEY,
"name" VARCHAR(150) NOT NULL,
"type" VARCHAR(50) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_groups."static_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."static_groups" (
"id" VARCHAR(150),
"topology_type" TEXT NOT NULL,
"provided_members_ids" TEXT[] NOT NULL,
PRIMARY KEY ("id", "topology_type"),
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_groups."dynamic_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."dynamic_groups" (
"id" VARCHAR(150) PRIMARY KEY,
"criteria" JSONB NOT NULL,
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-SELECT ties_groups.create_constraint_if_not_exists(
+SELECT teiv_groups.create_constraint_if_not_exists(
'groups',
'CHECK_groups_type',
- 'ALTER TABLE ties_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
+ 'ALTER TABLE teiv_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
);
COMMIT;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
}
} catch (IOException exception) {
- throw PgSchemaGeneratorException.readBaselineException("ties.data", exception);
+ throw PgSchemaGeneratorException.readBaselineException("teiv.data", exception);
}
return lines;
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Files.copy(mockSqlFile.toPath(), testSqlFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
// Add to copy
- String sampleLine = "ALTER TABLE ONLY ties_data.\"Namespace\" ALTER COLUMN \"name\" SET DEFAULT 'hello-to-the-world';\n\n";
+ String sampleLine = "ALTER TABLE ONLY teiv_data.\"Namespace\" ALTER COLUMN \"name\" SET DEFAULT 'hello-to-the-world';\n\n";
// When
TestHelper.appendToFile(testSqlFileForProcessorTest, sampleLine);
Files.copy(mockSqlFile.toPath(), testSqlFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
// Add to copy
- String sampleLine = "ALTER TABLE ties_data.\"Namespace\" ADD COLUMN IF NOT EXISTS \"namespaceId\" DECIMAL;";
+ String sampleLine = "ALTER TABLE teiv_data.\"Namespace\" ADD COLUMN IF NOT EXISTS \"namespaceId\" DECIMAL;";
// When
TestHelper.appendToFile(testSqlFileForProcessorTest, sampleLine);
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-- Update data schema exec status
-INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
+INSERT INTO teiv_model.entity_info("schema", "status") VALUES ('teiv_data', 'success');
-CREATE TABLE IF NOT EXISTS ties_data."Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"sectorId" jsonb,
"geo-location" "geography"
);
-CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."Namespace" (
"id" TEXT,
"name" TEXT
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'PK_Sector_id',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Namespace',
'PK_Namespace_id',
- 'ALTER TABLE ties_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
COMMIT;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-- Update data schema exec status
-INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
+INSERT INTO teiv_model.entity_info("schema", "status") VALUES ('teiv_data', 'success');
-CREATE TABLE IF NOT EXISTS ties_data."Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"sectorId" jsonb,
"geo-location" "geography"
);
-CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."Namespace" (
"id" TEXT,
"name" TEXT
);
-CREATE TABLE IF NOT EXISTS ties_data."REL_serviced-sector_serving-namespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."REL_serviced-sector_serving-namespace" (
"id" TEXT,
"aSide_Sector" TEXT,
"bSide_Namespace" TEXT
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'PK_Sector_id',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Namespace',
'PK_Namespace_id',
- 'ALTER TABLE ties_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'REL_serviced-sector_serving-namespace',
'PK_REL_serviced-sector_serving-namespace_id',
- 'ALTER TABLE ties_data."REL_serviced-sector_serving-namespace" ADD CONSTRAINT "PK_REL_serviced-sector_serving-namespace_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."REL_serviced-sector_serving-namespace" ADD CONSTRAINT "PK_REL_serviced-sector_serving-namespace_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'REL_serviced-sector_serving-namespace',
'FK_REL_serviced-sector_serving-namespace_aSide_Sector',
- 'ALTER TABLE ties_data."REL_serviced-sector_serving-namespace" ADD CONSTRAINT FK_REL_serviced-sector_serving-namespace_aSide_Sector FOREIGN KEY ("aSide_Sector") REFERENCES ties_data."Sector" (id) ON DELETE CASCADE;')
+ 'ALTER TABLE teiv_data."REL_serviced-sector_serving-namespace" ADD CONSTRAINT FK_REL_serviced-sector_serving-namespace_aSide_Sector FOREIGN KEY ("aSide_Sector") REFERENCES teiv_data."Sector" (id) ON DELETE CASCADE;')
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'REL_serviced-sector_serving-namespace',
'FK_REL_serviced-sector_serving-namespace_bSide_Namespace',
- 'ALTER TABLE ties_data."REL_serviced-sector_serving-namespace" ADD CONSTRAINT FK_REL_serviced-sector_serving-namespace_bSide_Namespace FOREIGN KEY ("bSide_Namespace") REFERENCES ties_data."Namespace" (id) ON DELETE CASCADE;')
+ 'ALTER TABLE teiv_data."REL_serviced-sector_serving-namespace" ADD CONSTRAINT FK_REL_serviced-sector_serving-namespace_bSide_Namespace FOREIGN KEY ("bSide_Namespace") REFERENCES teiv_data."Namespace" (id) ON DELETE CASCADE;')
COMMIT;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-- Update data schema exec status
-INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
+INSERT INTO teiv_model.entity_info("schema", "status") VALUES ('teiv_data', 'success');
-CREATE TABLE IF NOT EXISTS ties_data."Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"sectorId" jsonb,
"REL_ID_serviced-sector_serving-namespace" TEXT
);
-CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."Namespace" (
"id" TEXT,
"name" TEXT
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'PK_Sector_id',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Namespace',
'PK_Namespace_id',
- 'ALTER TABLE ties_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'FK_Sector_REL_FK_serviced-sector',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "FK_Sector_REL_FK_serviced-sector" FOREIGN KEY ("REL_FK_serviced-sector") REFERENCES ties_data."Namespace" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "FK_Sector_REL_FK_serviced-sector" FOREIGN KEY ("REL_FK_serviced-sector") REFERENCES teiv_data."Namespace" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'UNIQUE_Sector_REL_ID_serviced-sector_serving-namespace',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "UNIQUE_Sector_REL_ID_serviced-sector_serving-namespace" UNIQUE ("REL_ID_serviced-sector_serving-namespace");'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "UNIQUE_Sector_REL_ID_serviced-sector_serving-namespace" UNIQUE ("REL_ID_serviced-sector_serving-namespace");'
);
COMMIT;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-- Update data schema exec status
-INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
+INSERT INTO teiv_model.entity_info("schema", "status") VALUES ('teiv_data', 'success');
-CREATE TABLE IF NOT EXISTS ties_data."Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"sectorId" jsonb,
"geo-location" "geography"
);
-CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."Namespace" (
"id" TEXT,
"name" TEXT,
"REL_FK_serving-namespace" TEXT,
"REL_ID_serviced-sector_serving-namespace" TEXT
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'PK_Sector_id',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Namespace',
'PK_Namespace_id',
- 'ALTER TABLE ties_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Namespace',
'FK_Namespace_REL_FK_serving-namespace',
- 'ALTER TABLE ties_data."Namespace" ADD CONSTRAINT "FK_Namespace_REL_FK_serving-namespace" FOREIGN KEY ("REL_FK_serving-namespace") REFERENCES ties_data."Sector" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."Namespace" ADD CONSTRAINT "FK_Namespace_REL_FK_serving-namespace" FOREIGN KEY ("REL_FK_serving-namespace") REFERENCES teiv_data."Sector" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Namespace',
'UNIQUE_Namespace_REL_ID_serviced-sector_serving-namespace',
- 'ALTER TABLE ties_data."Namespace" ADD CONSTRAINT "UNIQUE_Namespace_REL_ID_serviced-sector_serving-namespace" UNIQUE ("REL_ID_serviced-sector_serving-namespace");'
+ 'ALTER TABLE teiv_data."Namespace" ADD CONSTRAINT "UNIQUE_Namespace_REL_ID_serviced-sector_serving-namespace" UNIQUE ("REL_ID_serviced-sector_serving-namespace");'
);
COMMIT;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-- Update data schema exec status
-INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
+INSERT INTO teiv_model.entity_info("schema", "status") VALUES ('teiv_data', 'success');
-CREATE TABLE IF NOT EXISTS ties_data."Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"sectorId" jsonb,
"REL_ID_serviced-sector_serving-namespace" TEXT
);
-CREATE TABLE IF NOT EXISTS ties_data."Namespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."Namespace" (
"id" TEXT,
"name" TEXT,
"REL_FK_serving-namespace" TEXT
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'PK_Sector_id',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Namespace',
'PK_Namespace_id',
- 'ALTER TABLE ties_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Namespace" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'FK_Sector_REL_FK_serviced-sector',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "FK_Sector_REL_FK_serviced-sector" FOREIGN KEY ("REL_FK_serviced-sector") REFERENCES ties_data."Namespace" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "FK_Sector_REL_FK_serviced-sector" FOREIGN KEY ("REL_FK_serviced-sector") REFERENCES teiv_data."Namespace" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Namespace',
'FK_Namespace_REL_FK_serving-namespace',
- 'ALTER TABLE ties_data."Namespace" ADD CONSTRAINT "FK_Namespace_REL_FK_serving-namespace" FOREIGN KEY ("REL_FK_serving-namespace") REFERENCES ties_data."Sector" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."Namespace" ADD CONSTRAINT "FK_Namespace_REL_FK_serving-namespace" FOREIGN KEY ("REL_FK_serving-namespace") REFERENCES teiv_data."Sector" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'UNIQUE_Sector_REL_ID_serviced-sector_serving-namespace',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "UNIQUE_Sector_REL_ID_serviced-sector_serving-namespace" UNIQUE ("REL_ID_serviced-sector_serving-namespace");'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "UNIQUE_Sector_REL_ID_serviced-sector_serving-namespace" UNIQUE ("REL_ID_serviced-sector_serving-namespace");'
);
COMMIT;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-- Update data schema exec status
-INSERT INTO ties_model.entity_info("schema", "status") VALUES ('ties_data', 'success');
+INSERT INTO teiv_model.entity_info("schema", "status") VALUES ('teiv_data', 'success');
-CREATE TABLE IF NOT EXISTS ties_data."Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"sectorId" jsonb,
"geo-location" "geography"
);
-CREATE TABLE IF NOT EXISTS ties_data."REL_serviced-sector_serving-sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."REL_serviced-sector_serving-sector" (
"id" TEXT,
"aSide_Sector" TEXT,
"bSide_Sector" TEXT
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'Sector',
'PK_Sector_id',
- 'ALTER TABLE ties_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."Sector" ADD CONSTRAINT "PK_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'REL_serviced-sector_serving-sector',
'PK_REL_serviced-sector_serving-sector_id',
- 'ALTER TABLE ties_data."REL_serviced-sector_serving-sector" ADD CONSTRAINT "PK_REL_serviced-sector_serving-sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."REL_serviced-sector_serving-sector" ADD CONSTRAINT "PK_REL_serviced-sector_serving-sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'REL_serviced-sector_serving-sector',
'FK_REL_serviced-sector_serving-sector_aSide_Sector',
- 'ALTER TABLE ties_data."REL_serviced-sector_serving-sector" ADD CONSTRAINT "FK_REL_serviced-sector_serving-sector_aSide_Sector" FOREIGN KEY ("aSide_Sector") REFERENCES ties_data."Sector" (id) ON DELETE CASCADE;')
+ 'ALTER TABLE teiv_data."REL_serviced-sector_serving-sector" ADD CONSTRAINT "FK_REL_serviced-sector_serving-sector_aSide_Sector" FOREIGN KEY ("aSide_Sector") REFERENCES teiv_data."Sector" (id) ON DELETE CASCADE;')
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'REL_serviced-sector_serving-sector',
'FK_REL_serviced-sector_serving-sector_bSide_Sector',
- 'ALTER TABLE ties_data."REL_serviced-sector_serving-sector" ADD CONSTRAINT "FK_REL_serviced-sector_serving-sector_bSide_Sector FOREIGN KEY" ("bSide_Sector") REFERENCES ties_data."Sector" (id) ON DELETE CASCADE;')
+ 'ALTER TABLE teiv_data."REL_serviced-sector_serving-sector" ADD CONSTRAINT "FK_REL_serviced-sector_serving-sector_bSide_Sector FOREIGN KEY" ("bSide_Sector") REFERENCES teiv_data."Sector" (id) ON DELETE CASCADE;')
COMMIT;
\ No newline at end of file
BEGIN;
-DROP SCHEMA IF EXISTS ties_model cascade;
-CREATE SCHEMA IF NOT EXISTS ties_model;
-ALTER SCHEMA ties_model OWNER TO :pguser;
+DROP SCHEMA IF EXISTS teiv_model cascade;
+CREATE SCHEMA IF NOT EXISTS teiv_model;
+ALTER SCHEMA teiv_model OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-CREATE TABLE IF NOT EXISTS ties_model.execution_status (
+CREATE TABLE IF NOT EXISTS teiv_model.execution_status (
"schema" VARCHAR(127) PRIMARY KEY,
"status" VARCHAR(127)
);
-CREATE TABLE IF NOT EXISTS ties_model.hash_info (
+CREATE TABLE IF NOT EXISTS teiv_model.hash_info (
"name" VARCHAR(511) PRIMARY KEY,
"hashedValue" VARCHAR(511),
"type" VARCHAR(511)
);
-CREATE TABLE IF NOT EXISTS ties_model.module_reference (
+CREATE TABLE IF NOT EXISTS teiv_model.module_reference (
"name" VARCHAR(511) PRIMARY KEY,
"namespace" VARCHAR(511),
"domain" VARCHAR(511),
"content" TEXT
);
-CREATE TABLE IF NOT EXISTS ties_model.entity_info (
+CREATE TABLE IF NOT EXISTS teiv_model.entity_info (
"storedAt" VARCHAR(511) PRIMARY KEY,
"name" VARCHAR(511) NOT NULL,
"moduleReferenceName" VARCHAR(511) NOT NULL,
"attributeNames" jsonb DEFAULT '[]'::jsonb,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
+CREATE TABLE IF NOT EXISTS teiv_model.relationship_info (
"name" VARCHAR(511) NOT NULL,
"aSideAssociationName" TEXT NOT NULL,
"aSideMOType" TEXT NOT NULL,
"storedAt" VARCHAR(511) NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
PRIMARY KEY ("name", "moduleReferenceName"),
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-- Update model schema exec status
-INSERT INTO ties_model.execution_status("schema", "status") VALUES ('ties_model', 'success');
+INSERT INTO teiv_model.execution_status("schema", "status") VALUES ('teiv_model', 'success');
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
\.
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+COPY teiv_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER provided-lteSectorCarrier ENodeBFunction o-ran-smo-teiv-ran 1 1 provided-by-enodebFunction LTESectorCarrier o-ran-smo-teiv-ran 0 100 BI_DIRECTIONAL false B_SIDE o-ran-smo-teiv-ran:LTESectorCarrier o-ran-smo-teiv-ran
LTESECTORCARRIER_USES_ANTENNACAPABILITY used-antennaCapability LTESectorCarrier o-ran-smo-teiv-ran 0 9223372036854775807 used-by-lteSectorCarrier AntennaCapability o-ran-smo-teiv-ran 0 1 BI_DIRECTIONAL false A_SIDE o-ran-smo-teiv-ran:LTESectorCarrier o-ran-smo-teiv-ran
\.
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
--missing consumer data columns, their default values and index
--missing index for antennaBeamWidth
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_AntennaModule" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-equipment_AntennaModule" (
"id" TEXT,
"positionWithinSector" TEXT,
"electricalAntennaTilt" INTEGER,
"geo-location" geography
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'PK_o-ran-smo-teiv-equipment_AntennaModule_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
);
--missing eNodeBPlmnId, classifiers and decorator columns
--missing default value for sourceIds column
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ENodeBFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" (
"id" TEXT,
"eNBId" INTEGER,
"CD_sourceIds" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "eNBId" SET DEFAULT '11';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "eNBId" SET DEFAULT '11';
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ENodeBFunction',
'PK_o-ran-smo-teiv-ran_ENodeBFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ENodeBFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ENodeBFunction_id" PRIMARY KEY ("id");'
);
-CREATE INDEX IF NOT EXISTS "IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0" ON teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
--missing index on JSONB columns
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_AntennaCapability" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_AntennaCapability" (
"id" TEXT,
"geranFqBands" jsonb,
"nRFqBands" jsonb,
"CD_classifiers" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_AntennaCapability',
'PK_o-ran-smo-teiv-ran_AntennaCapability_id',
- 'ALTER TABLE ties_data."AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
);
--missing "ANTENNACAPABILITY_USED_BY_LTESECTORCARRIER" relationship
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" (
"id" TEXT,
"sectorCarrierType" TEXT,
"CD_sourceIds" jsonb,
"REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" jsonb,
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '{}';
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_LTESectorCarrier',
'PK_o-ran-smo-teiv-ran_LTESectorCarrier_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_LTESectorCarrier_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_LTESectorCarrier_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_LTESectorCarrier',
'FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ENodeBFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_LTESectorCarrier',
'UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
);
-CREATE INDEX IF NOT EXISTS "IDX_6EC539C61EA7078DBA264C9877B87FC263605D42" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6EC539C61EA7078DBA264C9877B87FC263605D42" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_1EBC7271CEA658156DE25286404CBC4593340F8E" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1EBC7271CEA658156DE25286404CBC4593340F8E" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_846B7740E8AA756B8C1409CD909D2DF73A47ED4C" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_846B7740E8AA756B8C1409CD909D2DF73A47ED4C" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_44075E1D464599B61924196C20F2B88332520CD8" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");
+CREATE INDEX IF NOT EXISTS "IDX_44075E1D464599B61924196C20F2B88332520CD8" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");
COMMIT;
BEGIN;
-DROP SCHEMA IF EXISTS ties_model cascade;
-CREATE SCHEMA IF NOT EXISTS ties_model;
-ALTER SCHEMA ties_model OWNER TO :pguser;
+DROP SCHEMA IF EXISTS teiv_model cascade;
+CREATE SCHEMA IF NOT EXISTS teiv_model;
+ALTER SCHEMA teiv_model OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-CREATE TABLE IF NOT EXISTS ties_model.hash_info (
+CREATE TABLE IF NOT EXISTS teiv_model.hash_info (
"name" TEXT PRIMARY KEY,
"hashedValue" VARCHAR(63) NOT NULL,
"type" VARCHAR(511)
);
-CREATE TABLE IF NOT EXISTS ties_model.module_reference (
+CREATE TABLE IF NOT EXISTS teiv_model.module_reference (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"domain" TEXT,
"content" TEXT NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_model.entity_info (
+CREATE TABLE IF NOT EXISTS teiv_model.entity_info (
"storedAt" TEXT PRIMARY KEY,
"name" TEXT NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
"attributeNames" jsonb DEFAULT '[]'::jsonb,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
+CREATE TABLE IF NOT EXISTS teiv_model.relationship_info (
"name" TEXT NOT NULL,
"aSideAssociationName" TEXT NOT NULL,
"aSideMOType" TEXT NOT NULL,
"connectSameEntity" BOOLEAN NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
PRIMARY KEY ("name", "moduleReferenceName"),
- FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("bSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("aSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("bSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
FK_o-ran-smo-teiv-ran_LTESectorCarrier_REL_FK_provided-by-enodebFunction FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD CONSTRAINT
IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_ENodeBFunction_CD_sourceIds IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0 INDEX
IDX_GIN_TRGM_OPS_ON_LIST_AS_JSONB_o-ran-smo-teiv-ran_LTESectorCarrier_CD_classifiers IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B INDEX
totalTilt totalTilt COLUMN
\.
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+COPY teiv_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
_3gpp-common-yang-types urn:3gpp:sa5:_3gpp-common-yang-types \N [] 2023-11-06 bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOjNncHA6c2E1Ol8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIjsKICBwcmVmaXggInR5cGVzM2dwcCI7CgogIGltcG9ydCBpZXRmLWluZXQtdHlwZXMgeyBwcmVmaXggaW5ldDsgfQogIGltcG9ydCBpZXRmLXlhbmctdHlwZXMgeyBwcmVmaXggeWFuZzsgfQogIGltcG9ydCBfM2dwcC1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IHlleHQzZ3BwOyB9CgogIG9yZ2FuaXphdGlvbiAiM0dQUCBTQTUiOwogIGNvbnRhY3QgImh0dHBzOi8vd3d3LjNncHAub3JnL0R5bmFSZXBvcnQvVFNHLVdHLS1TNS0tb2ZmaWNpYWxzLmh0bT9JdGVtaWQ9NDY0IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZGVsIGRlZmluZXMgYSBZQU5HIG1hcHBpbmcgb2YgdGhlIHRvcCBsZXZlbAogICAgaW5mb3JtYXRpb24gY2xhc3NlcyB1c2VkIGZvciBtYW5hZ2VtZW50IG9mIDVHIG5ldHdvcmtzIGFuZAogICAgbmV0d29yayBzbGljaW5nLgogICAgQ29weXJpZ2h0IDIwMjMsIDNHUFAgT3JnYW5pemF0aW9uYWwgUGFydG5lcnMgKEFSSUIsIEFUSVMsIENDU0EsIEVUU0ksIFRTRFNJLAogICAgVFRBLCBUVEMpLiBBbGwgcmlnaHRzIHJlc2VydmVkLiI7CiAgcmVmZXJlbmNlICIzR1BQIFRTIDI4LjYyMyI7CgogIHJldmlzaW9uIDIwMjMtMTEtMDYgeyByZWZlcmVuY2UgQ1ItMDMwNTsgfQogIHJldmlzaW9uIDIwMjMtMDktMTggeyByZWZlcmVuY2UgQ1ItMDI3MSA7IH0KICByZXZpc2lvbiAyMDIzLTA4LTA5IHsgcmVmZXJlbmNlIENSLTAyNjY7IH0KICByZXZpc2lvbiAyMDIzLTA1LTEwIHsgcmVmZXJlbmNlIENSLTAyNTA7IH0KICByZXZpc2lvbiAyMDIzLTAyLTE0IHsgcmVmZXJlbmNlIENSLTAyMzQ7IH0KICByZXZpc2lvbiAyMDIyLTExLTA0IHsgcmVmZXJlbmNlICJDUi0wMTk0IjsgfQogIHJldmlzaW9uIDIwMjItMTAtMjQgeyByZWZlcmVuY2UgQ1ItMDE5NjsgIH0KICByZXZpc2lvbiAyMDIyLTA3LTI2IHsgcmVmZXJlbmNlICJDUi0wMTgwIiA7IH0KICByZXZpc2lvbiAyMDIyLTAyLTA5IHsgcmVmZXJlbmNlICJDUi0wMTQ0IjsgfQogIHJldmlzaW9uIDIwMjEtMTEtMDEgeyByZWZlcmVuY2UgIkNSLTAxNDEiOyB9CgogIHJldmlzaW9uIDIwMjEtMDktMzAgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIExvbmdpdHVkZSwgTGF0aXR1ZGUsIFRlbnRoT2ZEZWdyZWVzLCBPbk9mZi4iOwogICAgcmVmZXJlbmNlICJDUi0wMTM4IjsKICB9CgogIHJldmlzaW9uIDIwMjAtMTEtMDYgewogICAgZGVzY3JpcHRpb24gIlJlbW92ZWQgaW5jb3JyZWN0IFMtTlNTQUkgZGVmaW5pdGlvbnMuIjsKICAgIHJlZmVyZW5jZSAiQ1ItMDExOCI7CiAgfQoKICByZXZpc2lvbiAyMDIwLTAzLTEwIHsKICAgIGRlc2NyaXB0aW9uICJSZW1vdmVkIGZhdWx0eSB3aGVuIHN0YXRlbWVudHMuIjsKICAgIHJlZmVyZW5jZSAiU1AtMjAwMjI5IjsKICB9CgogIHJldmlzaW9uIDIwMTktMTAtMjUgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIE1hbmFnZWRORlByb2ZpbGUuIjsKICAgIHJlZmVyZW5jZSAiUzUtMTk0NDU3IjsKICB9CgogIHJldmlzaW9uIDIwMTktMTAtMTYgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIFNBUCBhbmQgdXNhZ2VTdGF0ZS4iOwogICAgcmVmZXJlbmNlICJTNS0xOTM1MTgiOwogIH0KCiAgcmV2aXNpb24gMjAxOS0wNi0yMyB7CiAgICByZWZlcmVuY2UgICJJbml0aWFsIHZlcnNpb24uIjsKICB9CgogIHR5cGVkZWYgRW5hYmxlZERpc2FibGVkIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIERJU0FCTEVEIDsKICAgICAgZW51bSBFTkFCTEVEIDsKICAgIH0KICB9CgogIGdyb3VwaW5nIG5hbWVWYWx1ZVBhaXIgewogICAgbGVhZiBuYW1lIHsgdHlwZSBzdHJpbmc7IH0KICAgIGxlYWYgdmFsdWUgeyB0eXBlIHN0cmluZzsgfQogIH0KCiAgZ3JvdXBpbmcgUHJvY2Vzc01vbml0b3JHcnAgewogICAgZGVzY3JpcHRpb24gIlByb3ZpZGVzIGF0dHJpYnV0ZXMgdG8gbW9uaXRvciB0aGUgcHJvZ3Jlc3Mgb2YgcHJvY2Vzc2VzCiAgICAgIHdpdGggc3BlY2lmaWMgcHVycG9zZSBhbmQgbGltaXRlZCBsaWZldGltZSBydW5uaW5nIG9uIE1uUyBwcm9kdWNlcnMuCiAgICAgIEl0IG1heSBiZSB1c2VkIGFzIGRhdGEgdHlwZSBmb3IgZGVkaWNhdGVkIHByb2dyZXNzIG1vbml0b3IgYXR0cmlidXRlcwogICAgICB3aGVuIHNwZWNpZnlpbmcgdGhlIG1hbmFnZW1lbnQgcmVwcmVzZW50YXRpb24gb2YgdGhlc2UgcHJvY2Vzc2VzLgogICAgICBUaGUgYXR0cmlidXRlcyBpbiB0aGlzIGNsYXVzZSBhcmUgZGVmaW5lZCBpbiBhIGdlbmVyaWMgd2F5LgogICAgICBGb3Igc29tZSBhdHRyaWJ1dGVzIHNwZWNpYWxpc2F0aW9ucyBtYXkgYmUgcHJvdmlkZWQgd2hlbiBzcGVjaWZ5aW5nIGEKICAgICAgY29uY3JldGUgcHJvY2VzcyByZXByZXNlbnRhdGlvbi4KCiAgICAgIElmIGEgbWFuYWdlbWVudCBvcGVyYXRpb24gb24gc29tZSBJT0NzIHRyaWdnZXJzIGFuIGFzc29jaWF0ZWQKICAgICAgYXN5bmNocm9ub3VzIHByb2Nlc3MgKHdob3NlIHByb2dyZXNzIHNoYWxsIGJlIG1vbml0b3JlZCksIHRoaXMgc2hvdWxkCiAgICAgIGFsc28gcmVzdWx0IGluIGNyZWF0aW5nIGFuIGF0dHJpYnV0ZSBuYW1lZCAncHJvY2Vzc01vbml0b3InIChvZiB0eXBlCiAgICAgICdQcm9jZXNzTW9uaXRvcicpIGluIHRoZXNlIElPQyhzKS4gVGhlIHByb2Nlc3NNb25pdG9yIGF0dHJpYnV0ZSBtYXkgYmUKICAgICAgYWNjb21wYW5pZWQgYnkgdXNlLWNhc2Ugc3BlY2lmaWMgYWRkaXRpb25hbCBkYXRhIGl0ZW1zLgoKICAgICAgVGhlIHByb2dyZXNzIG9mIHRoZSBwcm9jZXNzIGlzIGRlc2NyaWJlZCBieSB0aGUgJ3N0YXR1cycgYW5kCiAgICAgICdwcm9ncmVzc1BlcmNlbnRhZ2UnIGF0dHJpYnV0ZXMuIEFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9ucyBmb3IKICAgICAgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBtYXkgYmUgcHJvdmlkZWQgYnkgdGhlICdwcm9ncmVzc1N0YXRlSW5mbycgYW5kCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZXMuCgogICAgICBXaGVuIHRoZSBwcm9jZXNzIGlzIGluc3RhbnRpYXRlZCwgdGhlICdzdGF0dXMnIGlzIHNldCB0byAnTk9UX1JVTk5JTkcnCiAgICAgIGFuZCB0aGUgJ3Byb2dyZXNzUGVyY2VudGFnZScgdG8gJzAnLiBUaGUgTW5TIHByb2R1Y2VyIGRlY2lkZXMgd2hlbiB0bwogICAgICBzdGFydCBleGVjdXRpbmcgdGhlIHByb2Nlc3MgYW5kIHRvIHRyYW5zaXRpb24gaW50byB0aGUgJ1JVTk5JTkcnIHN0YXRlLgogICAgICBUaGlzIHRpbWUgaXMgY2FwdHVyZWQgaW4gdGhlICdzdGFydFRpbWUnIGF0dHJpYnV0ZS4gQWx0ZXJuYXRpdmVseSwgdGhlCiAgICAgIHByb2Nlc3MgbWF5IHN0YXJ0IHRvIGV4ZWN1dGUgZGlyZWN0bHkgdXBvbiBpdHMgaW5zdGFudGlhdGlvbi4gT25lCiAgICAgIGFsdGVybmF0aXZlIG11c3QgYmUgc2VsZWN0ZWQgd2hlbiB1c2luZyB0aGlzIGRhdGEgdHlwZS4KCiAgICAgIER1cmluZyB0aGUgJ1JVTk5JTkcnIHN0YXRlIHRoZSAncHJvZ3Jlc3NQZXJjZW50YWdlJyBhdHRyaWJ1dGUgbWF5IGJlCiAgICAgIHJlcGVhdGVkbHkgdXBkYXRlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlIGlzIHN1YmplY3QgdG8KICAgICAgZnVydGhlciBzcGVjaWFsaXNhdGlvbi4gVGhlICdwcm9ncmVzc0luZm8nIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0bwogICAgICBwcm92aWRlIGFkZGl0aW9uYWwgdGV4dHVhbCBpbmZvcm1hdGlvbiBpbiB0aGUgJ05PVF9SVU5OSU5HJywgJ0NBTkNFTExJTkcnCiAgICAgIGFuZCAnUlVOTklORycgc3RhdGVzLiBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mCiAgICAgICdwcm9ncmVzc1N0YXRlSW5mbycgbWF5IGJlIHByb3ZpZGVkIHdoZXJlIHRoaXMgZGF0YSB0eXBlIGlzCiAgICAgIHVzZWQuCgogICAgICBVcG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcHJvY2VzcywgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBpcyBzZXQKICAgICAgdG8gJ0ZJTklTSEVEJywgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvIDEwMCUuIFRoZSB0aW1lIGlzIGNhcHR1cmVkIGluCiAgICAgIHRoZSAnZW5kVGltZScgYXR0cmlidXRlLiBBZGRpdGlvbmFsIHRleHR1YWwgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkCiAgICAgIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuIFRoZSB0eXBlIG9mCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGluIHRoaXMgZGF0YSB0eXBlIGRlZmluaXRpb24gaXMgJ1N0cmluZycuCiAgICAgIEZ1cnRoZXIgc3BlY2lhbGlzYXRpb24gb2YgJ3Jlc3VsdFN0YXRlSW5mbycgbWF5IGJlIHByb3ZpZGVkCiAgICAgIHdoZXJlIHRoaXMgZGF0YSB0eXBlIGlzIHVzZWQuCgogICAgICBJbiBjYXNlIHRoZSBwcm9jZXNzIGZhaWxzIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseSwgdGhlICdzdGF0dXMnCiAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLCB0aGUgY3VycmVudCB2YWx1ZSBvZgogICAgICAncHJvZ3Jlc3NQZXJjZW50YWdlJyBpcyBmcm96ZW4sIGFuZCB0aGUgdGltZSBjYXB0dXJlZCBpbiAnZW5kVGltZScuIFRoZQogICAgICAncmVzdWx0U3RhdGVJbmZvJyBzcGVjaWZpZXMgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUuCiAgICAgIFNwZWNpZmljIGZhaWx1cmUgcmVhc29ucyBtYXkgYmUgc3BlY2lmaWVkIHdoZXJlIHRoZSBkYXRhIHR5cGUgZGVmaW5lZCBpbgogICAgICB0aGlzIGNsYXVzZSBpcyB1c2VkLiBUaGUgZXhhY3Qgc2VtYW50aWMgb2YgZmFpbHVyZSBtYXkgYmUgc3ViamVjdCBmb3IKICAgICAgZnVydGhlciBzcGVjaWFsaXNhdGlvbiBhcyB3ZWxsLgoKICAgICAgSW4gY2FzZSB0aGUgcHJvY2VzcyBpcyBjYW5jZWxsZWQsIHRoZSAnc3RhdHVzJyBhdHRyaWJ1dGUgaXMgZmlyc3Qgc2V0IHRvCiAgICAgICdDQU5DRUxMSU5HJyBhbmQgd2hlbiB0aGUgcHJvY2VzcyBpcyByZWFsbHkgY2FuY2VsbGVkIHRoZW4gdG8gJ0NBTkNFTExFRCcuCiAgICAgIFRoZSB0cmFuc2l0aW9uIHRvICdDQU5DRUxMRUQnIGlzIGNhcHR1cmVkIGluIHRoZSAnZW5kVGltZScgYXR0cmlidXRlLgogICAgICBUaGUgdmFsdWUgb2YgJ3Byb2dyZXNzUGVyY2VudGFnZScgaXMgZnJvemVuLiBBZGRpdGlvbmFsIHRleHR1YWwKICAgICAgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuCgogICAgICBUaGUgJ3Jlc3VsdFN0YXRlSW5mbycgYXR0cmlidXRlIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGFkZGl0aW9uYWwgdGV4dHVhbAogICAgICBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgJ0ZJTklTSEVEJywgJ0ZBSUxFRCcsICdQQVJUSUFMTFlfRkFJTEVEJyBvcgogICAgICAnQ0FOQ0VMTEVEJy4gSXQgc2hhbGwgbm90IGJlIHVzZWQgZm9yIG1ha2luZyB0aGUgb3V0Y29tZSwgdGhhdCB0aGUKICAgICAgcHJvY2VzcyBtYXkgcHJvZHVjZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGF2YWlsYWJsZS4KCiAgICAgIFRoZSBwcm9jZXNzIG1heSBoYXZlIHRvIGJlIGNvbXBsZXRlZCB3aXRoaW4gYSBjZXJ0YWluIHRpbWUgYWZ0ZXIgaXRzCiAgICAgIGNyZWF0aW9uLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHJlcXVpcmVkIGRhdGEgbWF5IG5vdCBiZSBhdmFpbGFibGUgYW55CiAgICAgIG1vcmUgYWZ0ZXIgYSBjZXJ0YWluIHRpbWUsIG9yIHRoZSBwcm9jZXNzIG91dGNvbWUgaXMgbmVlZGVkIHVudGlsIGEKICAgICAgY2VydGFpbiB0aW1lIGFuZCB3aGVuIG5vdCBwcm92aWRlZCBieSB0aGlzIHRpbWUgaXMgbm90IG5lZWRlZCBhbnkgbW9yZS4KICAgICAgVGhlIHRpbWUgdW50aWwgdGhlIE1uUyBwcm9kdWNlciBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgdGhlIHByb2Nlc3MgaXMKICAgICAgaW5kaWNhdGVkIGJ5IHRoZSAndGltZXInIGF0dHJpYnV0ZS4iOwoKICAgIGxlYWYgaWQgewogICAgICB0eXBlIHN0cmluZzsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIGRlc2NyaXB0aW9uICJJZCBvZiB0aGUgcHJvY2Vzcy4gSXQgaXMgdW5pcXVlIHdpdGhpbiBhIHNpbmdsZQogICAgICAgIG11bHRpdmFsdWUgYXR0cmlidXRlIG9mIHR5cGUgUHJvY2Vzc01vbml0b3IuIjsKICAgIH0KCiAgICBsZWFmIHN0YXR1cyB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gTk9UX1NUQVJURUQgOwogICAgICAgIGVudW0gUlVOTklORyA7CiAgICAgICAgZW51bSBDQU5DRUxMSU5HIDsKICAgICAgICBlbnVtIEZJTklTSEVEIDsKICAgICAgICBlbnVtIEZBSUxFRCA7CiAgICAgICAgZW51bSBQQVJUSUFMTFlfRkFJTEVEIDsKICAgICAgICBlbnVtIENBTkNFTExFRCA7CiAgICAgIH0KICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZWZhdWx0ICBSVU5OSU5HOwogICAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgc3RhdHVzIG9mIHRoZSBhc3NvY2lhdGVkIHByb2Nlc3MsCiAgICAgICAgd2hldGhlciBpdCBmYWlscywgc3VjY2VlZHMgZXRjLgogICAgICAgIEl0IGRvZXMgbm90IHJlcHJlc2VudCB0aGUgcmV0dXJuZWQgdmFsdWVzIG9mIGEgc3VjY2Vzc2Z1bGx5IGZpbmlzaGVkCiAgICAgICAgcHJvY2Vzcy4gIjsKICAgIH0KCiAgICBsZWFmIHByb2dyZXNzUGVyY2VudGFnZSB7CiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlIDAuLjEwMDsKICAgICAgfQogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlc2NyaXB0aW9uICJQcm9ncmVzcyBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzIGFzIHBlcmNlbnRhZ2UiOwogICAgfQoKICAgIGxlYWYtbGlzdCBwcm9ncmVzc1N0YXRlSW5mbyB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlc2NyaXB0aW9uICJBZGRpdGlvbmFsIHRleHR1YWwgcXVhbGlmaWNhdGlvbiBvZiB0aGUgc3RhdGVzCiAgICAgICAgJ05PVF9TVEFSVEVEJywgJ0NBTkNFTExJTkcnIGFuZCAnUlVOTklORycuCgogICAgICAgIEZvciBzcGVjaWZpYyBwcm9jZXNzZXMsIHNwZWNpZmljIHdlbGwtZGVmaW5lZCBzdHJpbmdzIChlLmcuIHN0cmluZwogICAgICAgIHBhdHRlcm5zIG9yIGVudW1zKSBtYXkgYmUgZGVmaW5lZCBhcyBhIHNwZWNpYWxpc2F0aW9uLiI7CiAgICB9CgogICAgbGVhZiByZXN1bHRTdGF0ZUluZm8gewogICAgICB0eXBlIHN0cmluZzsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiQWRkaXRpb25hbCB0ZXh0dWFsIHF1YWxpZmljYXRpb24gb2YgdGhlIHN0YXRlcwogICAgICAgICdGSU5JU0hFRCcsICdGQUlMRUQnLCAnUEFSVElBTExZX0ZBSUxFRCBhbmQgJ0NBTkNFTExFRCcuCiAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSAnRkFJTEVEJyBvciAnUEFSVElBTExZX0ZBSUxFRCcgc3RhdGUgdGhpcwogICAgICAgIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGVycm9yIHJlYXNvbnMuCgogICAgICAgIFRoaXMgYXR0cmlidXRlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIG1ha2UgdGhlIG91dGNvbWUgb2YgdGhlIHByb2Nlc3MKICAgICAgICBhdmFpbGFibGUgZm9yIHJldHJpZXZhbCwgaWYgYW55LiBGb3IgdGhpcyBwdXJwb3NlLCBkZWRpY2F0ZWQKICAgICAgICBhdHRyaWJ1dGVzIHNoYWxsIGJlIHNwZWNpZmllZCB3aGVuIHNwZWNpZnlpbmcgdGhlIHJlcHJlc2VudGF0aW9uIG9mCiAgICAgICAgYSBzcGVjaWZpYyBwcm9jZXNzLgoKICAgICAgICBGb3Igc3BlY2lmaWMgcHJvY2Vzc2VzLCBzcGVjaWZpYyB3ZWxsLWRlZmluZWQgc3RyaW5ncyAoZS5nLiBzdHJpbmcKICAgICAgICBwYXR0ZXJucyBvciBlbnVtcykgbWF5IGJlIGRlZmluZWQgYXMgYSBzcGVjaWFsaXNhdGlvbi4iOwogICAgfQoKICAgIGxlYWYgc3RhcnRUaW1lIHsKICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIlN0YXJ0IHRpbWUgb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcywgaS5lLiB0aGUgdGltZSB3aGVuIHRoZQogICAgICAgIHN0YXR1cyBjaGFuZ2VkIGZyb20gJ05PVF9TVEFSVEVEJyB0byAnUlVOTklORycuIjsKICAgIH0KCiAgICBsZWFmIGVuZFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiRGF0ZSBhbmQgdGltZSB3aGVuIHN0YXR1cyBjaGFuZ2VkIHRvICdTVUNDRVNTJywgJ0NBTkNFTExFRCcsCiAgICAgICAgJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLgoKICAgICAgICBJZiB0aGUgdGltZSBpcyBpbiB0aGUgZnV0dXJlLCBpdCBpcyB0aGUgZXN0aW1hdGVkIHRpbWUKICAgICAgICB0aGUgcHJvY2VzcyB3aWxsIGVuZC4iOwogICAgfQoKICAgIGxlYWYgdGltZXIgewogICAgICB0eXBlIHVpbnQzMjsKICAgICAgdW5pdHMgbWludXRlczsKICAgICAgZGVzY3JpcHRpb24gIlRpbWUgdW50aWwgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGxlZC4KICAgICAgICBJZiBzZXQsIHRoZSBzeXN0ZW0gZGVjcmVhc2VzIHRoZSB0aW1lciB3aXRoIHRpbWUuIFdoZW4gaXQgcmVhY2hlcyB6ZXJvCiAgICAgICAgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzIGlzIGluaXRpYXRlZCBieSB0aGUKICAgICAgICBNblNfUHJvZHVjZXIuCiAgICAgICAgSWYgbm90IHNldCwgdGhlcmUgaXMgbm8gdGltZSBsaW1pdCBmb3IgdGhlIHByb2Nlc3MuCgogICAgICAgIE9uY2UgdGhlIHRpbWVyIGlzIHNldCwgdGhlIGNvbnN1bWVyIGNhbiBub3QgY2hhbmdlIGl0IGFueW1vcmUuCiAgICAgICAgSWYgdGhlIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZSB0aW1lciB0aGUgTW5TIFByb2R1Y2VyIG1heSBzZXQgaXQuIjsKICAgICAgeWV4dDNncHA6bm90Tm90aWZ5YWJsZTsKICAgIH0KICB9CgogIHR5cGVkZWYgVGVudGhPZkRlZ3JlZXMgewogICAgdHlwZSB1aW50MTYgewogICAgICByYW5nZSAwLi4zNjAwOwogICAgfQogICAgdW5pdHMgIjAuMSBkZWdyZWVzIjsKICAgIGRlc2NyaXB0aW9uICJBIHNpbmdsZSBpbnRlZ3JhbCB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIGFuIGFuZ2xlIGluIGRlZ3JlZXMKICAgICAgYmV0d2VlbiAwIGFuZCAzNjAgd2l0aCBhIHJlc29sdXRpb24gb2YgMC4xIGRlZ3JlZXMuIjsKICB9CgogIHR5cGVkZWYgTGF0aXR1ZGUgewogICAgdHlwZSBkZWNpbWFsNjQgewogICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgcmFuZ2UgIi05MC4wMDAwLi4rOTAuMDAwMCI7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiTGF0aXR1ZGUgdmFsdWVzIjsKICB9CgogIHR5cGVkZWYgTG9uZ2l0dWRlIHsKICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgZnJhY3Rpb24tZGlnaXRzIDQ7CiAgICAgIHJhbmdlICItMTgwLjAwMDAuLisxODAuMDAwMCI7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiTG9uZ2l0dWRlIHZhbHVlcyI7CiAgfQoKICB0eXBlZGVmIEFsdGl0dWRlICB7CiAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgfQogICAgdW5pdHMgIm1ldGVycyI7CiAgICBkZXNjcmlwdGlvbgogICAgICAiSGVpZ2h0IGZyb20gYSByZWZlcmVuY2UgMCB2YWx1ZS4iOwogIH0KCiAgZ3JvdXBpbmcgR2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMgewogICAgZGVzY3JpcHRpb24gIlRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIjsKICAgIHJlZmVyZW5jZSAiI0dQUCBUUyAyOC41NTggY2xhdXNlIDYuMy44IjsKCiAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgdHlwZSBMYXRpdHVkZTsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CgogICAgbGVhZiBsb25naXR1ZGUgewogICAgICB0eXBlIExvbmdpdHVkZTsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CgogICAgbGVhZiBhbHRpdHVkZSB7CiAgICAgIHR5cGUgQWx0aXR1ZGU7CiAgICB9CgogIH0KCiAgdHlwZWRlZiBPbk9mZiB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBPTjsKICAgICAgZW51bSBPRkY7CiAgICB9CiAgfQoKICAvLyBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCBhcyBpdCBpcwogIC8vICBiZWluZyBtb3ZlZCB0byBfM2dwcC01Z2MtbnJtLW5mcHJvZmlsZQogIGdyb3VwaW5nIE1hbmFnZWRORlByb2ZpbGUgewogICAgZGVzY3JpcHRpb24gIkRlZmluZXMgcHJvZmlsZSBmb3IgbWFuYWdlZCBORiI7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuNTAxIjsKCiAgICBsZWFmIGlkeCB7IHR5cGUgdWludDMyIDsgfQoKICAgIGxlYWYgbmZJbnN0YW5jZUlEIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSB5YW5nOnV1aWQgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBwcm9maWxlIGZvciBtYW5hZ2VkIE5GLgogICAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIE5GIEluc3RhbmNlIElEIHNoYWxsIGJlIGEKICAgICAgICBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgdmVyc2lvbiA0LAogICAgICAgIGFzIGRlc2NyaWJlZCBpbiBJRVRGIFJGQyA0MTIyICIgOwogICAgICB5ZXh0M2dwcDppblZhcmlhbnQ7CiAgICB9CgogICAgbGVhZi1saXN0IG5mVHlwZSB7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgIHR5cGUgTmZUeXBlOwogICAgICBkZXNjcmlwdGlvbiAiVHlwZSBvZiB0aGUgTmV0d29yayBGdW5jdGlvbiIgOwogICAgfQoKICAgIGxlYWYgaG9zdEFkZHIgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBpbmV0Omhvc3QgOwogICAgICBkZXNjcmlwdGlvbiAiSG9zdCBhZGRyZXNzIG9mIGEgTkYiOwogICAgfQoKICAgIGxlYWYgYXV0aHpJbmZvIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBORiBTcGVjaWZpYyBTZXJ2aWNlIGF1dGhvcml6YXRpb24KICAgICAgICBpbmZvcm1hdGlvbi4gSXQgc2hhbGwgaW5jbHVkZSB0aGUgTkYgdHlwZSAocykgYW5kIE5GIHJlYWxtcy9vcmlnaW5zCiAgICAgICAgYWxsb3dlZCB0byBjb25zdW1lIE5GIFNlcnZpY2Uocykgb2YgTkYgU2VydmljZSBQcm9kdWNlci4iOwogICAgICByZWZlcmVuY2UgIlNlZSBUUyAyMy41MDEiIDsKICAgIH0KCiAgICBsZWFmIGxvY2F0aW9uIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiSW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBORiBpbnN0YW5jZQogICAgICAgIChlLmcuIGdlb2dyYXBoaWMgbG9jYXRpb24sIGRhdGEgY2VudGVyKSBkZWZpbmVkIGJ5IG9wZXJhdG9yIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmIGNhcGFjaXR5IHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgdWludDE2IDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgc3RhdGljIGNhcGFjaXR5IGluZm9ybWF0aW9uCiAgICAgICAgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIGV4cHJlc3NlZCBhcyBhIHdlaWdodCByZWxhdGl2ZSB0byBvdGhlcgogICAgICAgIE5GIGluc3RhbmNlcyBvZiB0aGUgc2FtZSB0eXBlOyBpZiBjYXBhY2l0eSBpcyBhbHNvIHByZXNlbnQgaW4gdGhlCiAgICAgICAgbmZTZXJ2aWNlTGlzdCBwYXJhbWV0ZXJzLCB0aG9zZSB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmIG5GU3J2R3JvdXBJZCB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgaWRlbnRpdHkgb2YgdGhlIGdyb3VwIHRoYXQgaXMKICAgICAgICBzZXJ2ZWQgYnkgdGhlIE5GIGluc3RhbmNlLgogICAgICAgIE1heSBiZSBjb25maWcgZmFsc2Ugb3IgdHJ1ZSBkZXBlbmRpbmcgb24gdGhlIE1hbmFnZWRGdW5jdGlvbi4KICAgICAgICBDb25maWc9dHJ1ZSBmb3IgVWRyaW5mby4gQ29uZmlnPWZhbHNlIGZvciBVZG1JbmZvIGFuZCBBdXNmSW5mby4KICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVETSBvciBBVVNGIG9yIFVEUi4gIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmLWxpc3Qgc3VwcG9ydGVkRGF0YVNldElkcyB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gU1VCU0NSSVBUSU9OOwogICAgICAgIGVudW0gUE9MSUNZOwogICAgICAgIGVudW0gRVhQT1NVUkU7CiAgICAgICAgZW51bSBBUFBMSUNBVElPTjsKICAgICAgfQogICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBzdXBwb3J0ZWQgZGF0YSBzZXRzIGluIHRoZSBVRFIgaW5zdGFuY2UuCiAgICAgICAgTWF5IGJlIHByZXNlbnQgaWYgLi4vbmZUeXBlID0gVURSIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KCiAgICBsZWFmLWxpc3Qgc21mU2VydmluZ0FyZWFzIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiRGVmaW5lcyB0aGUgU01GIHNlcnZpY2UgYXJlYShzKSB0aGUgVVBGIGNhbiBzZXJ2ZS4KICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVQRiI7CiAgICAgIHJlZmVyZW5jZSAiVFMgMjkuNTEwIiA7CiAgICB9CgogICAgbGVhZiBwcmlvcml0eSB7CiAgICAgIHR5cGUgdWludDE2OwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBQcmlvcml0eSAocmVsYXRpdmUgdG8gb3RoZXIgTkZzCiAgICAgICAgb2YgdGhlIHNhbWUgdHlwZSkgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIHRvIGJlIHVzZWQgZm9yIE5GIHNlbGVjdGlvbjsKICAgICAgICBsb3dlciB2YWx1ZXMgaW5kaWNhdGUgYSBoaWdoZXIgcHJpb3JpdHkuIElmIHByaW9yaXR5IGlzIGFsc28gcHJlc2VudAogICAgICAgIGluIHRoZSBuZlNlcnZpY2VMaXN0IHBhcmFtZXRlcnMsIHRob3NlIHdpbGwgaGF2ZSBwcmVjZWRlbmNlIG92ZXIKICAgICAgICB0aGlzIHZhbHVlLiBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IEFNRiAiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogIH0KCiAgdHlwZWRlZiB1c2FnZVN0YXRlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIElETEU7CiAgICAgIGVudW0gQUNUSVZFOwogICAgICBlbnVtIEJVU1k7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiSXQgZGVzY3JpYmVzIHdoZXRoZXIgb3Igbm90IHRoZSByZXNvdXJjZSBpcyBhY3RpdmVseSBpbgogICAgICB1c2UgYXQgYSBzcGVjaWZpYyBpbnN0YW50LCBhbmQgaWYgc28sIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBzcGFyZQogICAgICBjYXBhY2l0eSBmb3IgYWRkaXRpb25hbCB1c2VycyBhdCB0aGF0IGluc3RhbnQuIFRoZSB2YWx1ZSBpcyBSRUFELU9OTFkuIjsKICAgIHJlZmVyZW5jZSAiSVRVIFQgUmVjb21tZW5kYXRpb24gWC43MzEiOwogIH0KCiAgZ3JvdXBpbmcgU0FQR3JwIHsKICAgIGxlYWYgaG9zdCB7CiAgICAgIHR5cGUgaW5ldDpob3N0OwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgIH0KICAgIGxlYWYgcG9ydCB7CiAgICAgIHR5cGUgaW5ldDpwb3J0LW51bWJlcjsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiU2VydmljZSBhY2Nlc3MgcG9pbnQuIjsKICAgIHJlZmVyZW5jZSAiVFMgMjguNjIyIjsKICB9CgogIHR5cGVkZWYgTWNjIHsKICAgIGRlc2NyaXB0aW9uICJUaGUgbW9iaWxlIGNvdW50cnkgY29kZSBjb25zaXN0cyBvZiB0aHJlZSBkZWNpbWFsIGRpZ2l0cywKICAgICAgVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGlkZW50aWZpZXMgdGhlIGdlb2dyYXBoaWMKICAgICAgcmVnaW9uICh0aGUgZGlnaXRzIDEgYW5kIDggYXJlIG5vdCB1c2VkKToiOwogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMDItNzldWzAtOV1bMC05XSc7CiAgICB9CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuMDAzIHN1YmNsYXVzZSAyLjIgYW5kIDEyLjEiOwogIH0KCiAgdHlwZWRlZiBNbmMgewogICAgZGVzY3JpcHRpb24gIlRoZSBtb2JpbGUgbmV0d29yayBjb2RlIGNvbnNpc3RzIG9mIHR3byBvciB0aHJlZQogICAgICBkZWNpbWFsIGRpZ2l0cyAoZm9yIGV4YW1wbGU6IE1OQyBvZiAwMDEgaXMgbm90IHRoZSBzYW1lIGFzIE1OQyBvZiAwMSkiOwogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMC05XVswLTldWzAtOV18WzAtOV1bMC05XSc7CiAgICB9CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjMuMDAzIHN1YmNsYXVzZSAyLjIgYW5kIDEyLjEiOwogIH0KCiAgZ3JvdXBpbmcgUExNTklkIHsKICAgIGxlYWYgbWNjIHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgTWNjOwogICAgfQogICAgbGVhZiBtbmMgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBNbmM7CiAgICB9CiAgICByZWZlcmVuY2UgIlRTIDM4LjQxMyBjbGF1c2UgOS4zLjMuNSI7CiAgfQoKICB0eXBlZGVmIE5jaSB7CiAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4gVGhlIE5DSSBzaGFsbCBiZSBvZiBmaXhlZCBsZW5ndGggb2YgMzYgYml0cwogICAgICBhbmQgc2hhbGwgYmUgY29kZWQgdXNpbmcgZnVsbCBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KICAgICAgVGhlIGV4YWN0IGNvZGluZyBvZiB0aGUgTkNJIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBlYWNoIFBMTU4gb3BlcmF0b3IiOwogICAgcmVmZXJlbmNlICJUUyAyMy4wMDMiOwogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggMzY7CiAgICAgICAgcGF0dGVybiAnWzAxXSsnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggOTsKICAgICAgICBwYXR0ZXJuICdbYS1mQS1GMC05XSonOwogICAgICB9CiAgICB9CiAgfQoKICB0eXBlZGVmIE9wZXJhdGlvbmFsU3RhdGUgewogICAgcmVmZXJlbmNlICIzR1BQIFRTIDI4LjYyNSBhbmQgSVRVLVQgWC43MzEiOwogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gRElTQUJMRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyB0b3RhbGx5IGlub3BlcmFibGUuIjsKICAgICAgfQoKICAgICAgZW51bSBFTkFCTEVEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgcGFydGlhbGx5IG9yIGZ1bGx5IG9wZXJhYmxlLiI7CiAgICAgIH0KCiAgICB9CiAgfQoKICB0eXBlZGVmIEJhc2ljQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KICAgIH0KICB9CgogIHR5cGVkZWYgQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KCiAgICAgIGVudW0gU0hVVFRJTkdET1dOIHsKICAgICAgICB2YWx1ZSAyOwogICAgICAgIGRlc2NyaXB0aW9uICJVc2Ugb2YgdGhlIHJlc291cmNlIGlzIGFkbWluaXN0cmF0aXZlbHkgcGVybWl0dGVkIHRvCiAgICAgICAgICBleGlzdGluZyBpbnN0YW5jZXMgb2YgdXNlIG9ubHkuIFdoaWxlIHRoZSBzeXN0ZW0gcmVtYWlucyBpbgogICAgICAgICAgdGhlIHNodXR0aW5nIGRvd24gc3RhdGUgdGhlIG1hbmFnZXIgb3IgdGhlIG1hbmFnZWQgZWxlbWVudAogICAgICAgICAgbWF5IGF0IGFueSB0aW1lIGNhdXNlIHRoZSByZXNvdXJjZSB0byB0cmFuc2l0aW9uIHRvIHRoZQogICAgICAgICAgbG9ja2VkIHN0YXRlLiI7CiAgICAgIH0KICAgIH0KICB9CgogIHR5cGVkZWYgQXZhaWxhYmlsaXR5U3RhdHVzIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICBlbnVtIElOX1RFU1Q7CiAgICAgICAgICBlbnVtIEZBSUxFRDsKICAgICAgICAgIGVudW0gUE9XRVJfT0ZGOwogICAgICAgICAgZW51bSBPRkZfTElORTsKICAgICAgICAgIGVudW0gT0ZGX0RVVFk7CiAgICAgICAgICBlbnVtIERFUEVOREVOQ1k7CiAgICAgICAgICBlbnVtIERFR1JBREVEOwogICAgICAgICAgZW51bSBOT1RfSU5TVEFMTEVEOwogICAgICAgICAgZW51bSBMT0dfRlVMTDsKICAgICAgIH0KICB9CgogIHR5cGVkZWYgQ2VsbFN0YXRlIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgZW51bSBJRExFOwogICAgICAgIGVudW0gSU5BQ1RJVkU7CiAgICAgICAgZW51bSBBQ1RJVkU7CiAgICAgfQogIH0KCiAgdHlwZWRlZiBOcnBjaSB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBDZWxsIElkZW50aXR5IChQQ0kpIG9mIHRoZSBOUiBjZWxsLiI7CiAgICByZWZlcmVuY2UgIlRTIDM2LjIxMSBzdWJjbGF1c2UgNi4xMSI7CiAgfQoKICB0eXBlZGVmIFRhYyB7CiAgICB0eXBlIGludDMyIHsKICAgICAgcmFuZ2UgMC4uMTY3NzcyMTUgOwogICAgfQogICAgZGVzY3JpcHRpb24gIlRyYWNraW5nIEFyZWEgQ29kZSI7CiAgICByZWZlcmVuY2UgIlRTIDIzLjAwMyBjbGF1c2UgMTkuNC4yLjMiOwogIH0KCiAgZ3JvdXBpbmcgVGFpR3JwIHsKICAgIGRlc2NyaXB0aW9uICJUaGlzIDw8ZGF0YVR5cGU+PiBkZWZpbmVzIGEgVHJhY2tpbmcgQXJlYSBJZGVudGl0eSAoVEFJKQogICAgICBhcyBzcGVjaWZpZWQgaW4gY2xhdXNlIDI4LjYgb2YgVFMgMjMuMDAzLCBjbGF1c2UgOC4yIG9mIFRTIDM4LjMwMAogICAgICBhbmQgY2xhdXNlIDkuMy4zLjExIG9mIFRTIDM4LjQxMy4gSXQgaXMgY29tcG9zZWQgb2YgdGhlIFBMTU4KICAgICAgaWRlbnRpZmllciAoUExNTi1JZCwgd2hpY2ggaXMgY29tcG9zZWQgb2YgdGhlIE1DQyBhbmQgTU5DKSBhbmQKICAgICAgdGhlIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKS4gIjsKICAgIGxpc3QgcGxtbklkIHsKICAgICAgZGVzY3JpcHRpb24gIlBMTU4gSWRlbnRpdHkuIjsKICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgIG1heC1lbGVtZW50cyAxOwogICAgICBrZXkgIm1jYyBtbmMiOwogICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICB9CgogICAgbGVhZiB0YWMgeyB0eXBlIFRhYzsgfQogIH0KCiAgZ3JvdXBpbmcgR2VvQ29vcmRpbmF0ZUdycCB7CiAgICBkZXNjcmlwdGlvbiAiR2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9uIGVhcnRoIjsKICAgIGxlYWYgbGF0aXR1ZGUgewogICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDQ7CiAgICAgICAgcmFuZ2UgLTkwLi45MCA7CiAgICAgIH0KICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIGRlc2NyaXB0aW9uICJMYXRpdHVkZSBiYXNlZCBvbiBXb3JsZCBHZW9kZXRpYyBTeXN0ZW0gKDE5ODQgdmVyc2lvbikKICAgICAgICBnbG9iYWwgcmVmZXJlbmNlIGZyYW1lIChXR1MgODQpLiBQb3NpdGl2ZSB2YWx1ZXMgY29ycmVzcG9uZCB0byB0aGUKICAgICAgICBub3J0aGVybiBoZW1pc3BoZXJlLiI7CiAgICAgIH0KCiAgICBsZWFmIGxvbmdpdHVkZSB7CiAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgICByYW5nZSAtMTgwLi4xODAgOwogICAgICB9CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICBkZXNjcmlwdGlvbiAiTG9uZ2l0dWRlIGJhc2VkIG9uIFdvcmxkIEdlb2RldGljIFN5c3RlbSAoMTk4NCB2ZXJzaW9uKQogICAgICAgIGdsb2JhbCByZWZlcmVuY2UgZnJhbWUgKFdHUyA4NCkuIFBvc2l0aXZlIHZhbHVlcyBjb3JyZXNwb25kIHRvCiAgICAgICAgZGVncmVlcyBlYXN0IG9mIDAgZGVncmVlcyBsb25naXR1ZGUuIjsKICAgIH0KICB9CgogIGdyb3VwaW5nIEdlb0FyZWFHcnAgewogICAgZGVzY3JpcHRpb24gIlRoaXMgZGF0YSB0eXBlIGRlZmluZXMgYSBnZW9ncmFwaGljYWwgYXJlYS4KICAgICAgVGhlIGdlby1hcmVhIGlzIGRlZmluZWQgdXNpbmcgYSBjb252ZXggcG9seWdvbiBpbiB0aGUgYXR0cmlidXRlCiAgICAgICdjb252ZXhHZW9Qb2x5Z29uJy4iOwoKICAgIGxpc3QgY29udmV4R2VvUG9seWdvbiB7CiAgICAgIGRlc2NyaXB0aW9uICJTcGVjaWZpZXMgdGhlIGdlb2dyYXBoaWNhbCBhcmVhIHdpdGggYSBjb252ZXggcG9seWdvbi4KICAgICAgICBUaGUgY29udmV4IHBvbHlnb24gaXMgc3BlY2lmaWVkIGJ5IGl0cyBjb3JuZXJzLiI7CiAgICAgICAga2V5ICJsYXRpdHVkZSBsb25naXR1ZGUiOwogICAgICBtaW4tZWxlbWVudHMgMzsKICAgICAgb3JkZXJlZC1ieSB1c2VyOwoKICAgICAgdXNlcyBHZW9Db29yZGluYXRlR3JwOwogICAgfQogIH0KCiAgdHlwZWRlZiBBbWZSZWdpb25JZCB7CiAgICB0eXBlIHVuaW9uIHsKICAgICAgdHlwZSB1aW50OCA7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggODsKICAgICAgICBwYXR0ZXJuICdbMDFdKic7CiAgICAgIH0KICAgIH0KICAgIHJlZmVyZW5jZSAiY2xhdXNlIDIuMTAuMSBvZiAzR1BQIFRTIDIzLjAwMyI7CiAgfQoKICB0eXBlZGVmIEFtZlNldElkIHsKICAgIHR5cGUgdW5pb24gewogICAgICB0eXBlIHVpbnQxNiB7CiAgICAgICAgcmFuZ2UgJzAuLjEwMjMnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggODsKICAgICAgICBwYXR0ZXJuICdbMDFdKic7CiAgICAgIH0KICAgIH0KICAgIHJlZmVyZW5jZSAiY2xhdXNlIDIuMTAuMSBvZiAzR1BQIFRTIDIzLjAwMyI7CiAgfQoKICB0eXBlZGVmIEFtZlBvaW50ZXIgewogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlICcwLi42Myc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA2OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CgogIGdyb3VwaW5nIEFtZklkZW50aWZpZXIgewogICAgbGVhZiBhbWZSZWdpb25JZCB7CiAgICAgIHR5cGUgQW1mUmVnaW9uSWQ7CiAgICB9CiAgICBsZWFmIGFtZlNldElkIHsKICAgICAgdHlwZSBBbWZTZXRJZDsKICAgIH0KICAgIGxlYWYgYW1mUG9pbnRlciB7CiAgICAgIHR5cGUgQW1mUG9pbnRlcjsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJUaGUgQU1GSSBpcyBjb25zdHJ1Y3RlZCBmcm9tIGFuIEFNRiBSZWdpb24gSUQsCiAgICAgIGFuIEFNRiBTZXQgSUQgYW5kIGFuIEFNRiBQb2ludGVyLgogICAgICBUaGUgQU1GIFJlZ2lvbiBJRCBpZGVudGlmaWVzIHRoZSByZWdpb24sCiAgICAgIHRoZSBBTUYgU2V0IElEIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiBTZXQgd2l0aGluIHRoZSBBTUYgUmVnaW9uLCBhbmQKICAgICAgdGhlIEFNRiBQb2ludGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiB3aXRoaW4gdGhlIEFNRiBTZXQuICI7CiAgfQoKLy8gdHlwZSBkZWZpbml0aW9ucyBlc3BlY2lhbGx5IGZvciBjb3JlIE5GcwoKICB0eXBlZGVmIE5mVHlwZSB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBOUkY7CiAgICAgIGVudW0gVURNOwogICAgICBlbnVtIEFNRjsKICAgICAgZW51bSBTTUY7CiAgICAgIGVudW0gQVVTRjsKICAgICAgZW51bSBORUY7CiAgICAgIGVudW0gUENGOwogICAgICBlbnVtIFNNU0Y7CiAgICAgIGVudW0gTlNTRjsKICAgICAgZW51bSBVRFI7CiAgICAgIGVudW0gTE1GOwogICAgICBlbnVtIEdNTEM7CiAgICAgIGVudW0gNUdfRUlSOwogICAgICBlbnVtIFNFUFA7CiAgICAgIGVudW0gVVBGOwogICAgICBlbnVtIE4zSVdGOwogICAgICBlbnVtIEFGOwogICAgICBlbnVtIFVEU0Y7CiAgICAgIGVudW0gQlNGOwogICAgICBlbnVtIENIRjsKICAgIH0KICB9CgogIHR5cGVkZWYgTm90aWZpY2F0aW9uVHlwZSB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBOMV9NRVNTQUdFUzsKICAgICAgZW51bSBOMl9JTkZPUk1BVElPTjsKICAgICAgZW51bSBMT0NBVElPTl9OT1RJRklDQVRJT047CiAgICB9CiAgfQoKICB0eXBlZGVmIExvYWQgewogICAgZGVzY3JpcHRpb24gIkxhdGVzdCBrbm93biBsb2FkIGluZm9ybWF0aW9uIG9mIHRoZSBORiwgcGVyY2VudGFnZSAiOwogICAgdHlwZSB1aW50OCB7CiAgICAgIHJhbmdlIDAuLjEwMDsKICAgIH0KICB9CgogIHR5cGVkZWYgTjFNZXNzYWdlQ2xhc3MgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gNUdNTTsKICAgICAgZW51bSBTTTsKICAgICAgZW51bSBMUFA7CiAgICAgIGVudW0gU01TOwogICAgfQogIH0KCiAgdHlwZWRlZiBOMkluZm9ybWF0aW9uQ2xhc3MgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gU007CiAgICAgIGVudW0gTlJQUEE7CiAgICAgIGVudW0gUFdTOwogICAgICBlbnVtIFBXU19CQ0FMOwogICAgICBlbnVtIFBXU19SRjsKICAgIH0KICB9CgogIGdyb3VwaW5nIERlZmF1bHROb3RpZmljYXRpb25TdWJzY3JpcHRpb24gewoKICAgIGxlYWYgbm90aWZpY2F0aW9uVHlwZSB7CiAgICAgIHR5cGUgTm90aWZpY2F0aW9uVHlwZTsKICAgIH0KCiAgICBsZWFmIGNhbGxiYWNrVXJpIHsKICAgICAgdHlwZSBpbmV0OnVyaTsKICAgIH0KCiAgICBsZWFmIG4xTWVzc2FnZUNsYXNzIHsKICAgICAgdHlwZSBOMU1lc3NhZ2VDbGFzczsKICAgIH0KCiAgICBsZWFmIG4ySW5mb3JtYXRpb25DbGFzcyB7CiAgICAgIHR5cGUgTjJJbmZvcm1hdGlvbkNsYXNzOwogICAgfQogIH0KCiAgZ3JvdXBpbmcgSXB2NEFkZHJlc3NSYW5nZSB7CiAgbGVhZiBzdGFydCB7CiAgICB0eXBlIGluZXQ6aXB2NC1hZGRyZXNzOwogICAgfQogIGxlYWYgZW5kIHsKICAgIHR5cGUgaW5ldDppcHY0LWFkZHJlc3M7CiAgICB9CiAgfQoKICBncm91cGluZyBJcHY2UHJlZml4UmFuZ2UgewogIGxlYWYgc3RhcnQgewogICAgdHlwZSBpbmV0OmlwdjYtcHJlZml4OwogICAgfQogIGxlYWYgZW5kIHsKICAgIHR5cGUgaW5ldDppcHY2LXByZWZpeDsKICAgIH0KICB9CgogIHR5cGVkZWYgTnNpSWQgewogICAgdHlwZSBzdHJpbmc7CiAgfQoKICB0eXBlZGVmIFVlTW9iaWxpdHlMZXZlbCB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBTVEFUSU9OQVJZOwogICAgICBlbnVtIE5PTUFESUM7CiAgICAgIGVudW0gUkVTVFJJQ1RFRF9NT0JJTElUWTsKICAgICAgZW51bSBGVUxMWV9NT0JJTElUWTsKICAgIH0KICB9CgogIHR5cGVkZWYgUmVzb3VyY2VTaGFyaW5nTGV2ZWwgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIFNIQVJFRDsKICAgICAgICBlbnVtIE5PVF9TSEFSRUQ7CiAgICAgIH0KICB9CgogIHR5cGVkZWYgVHhEaXJlY3Rpb24gewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIERMOwogICAgICAgIGVudW0gVUw7CiAgICAgICAgZW51bSBETF9BTkRfVUw7CiAgICAgIH0KICB9CgogIGdyb3VwaW5nIEFkZHJlc3NXaXRoVmxhbiB7CiAgICBsZWFmIGlwQWRkcmVzcyB7CiAgICAgIHR5cGUgaW5ldDppcC1hZGRyZXNzOwogICAgfQogICAgbGVhZiB2bGFuSWQgewogICAgICAgdHlwZSB1aW50MTY7CiAgICB9CiAgfQoKICAvKiBEaXN0aW5ndWlzaGVkTmFtZSBwYXR0ZXJuIGlzIGJ1aWx0IHVwIGJhc2VkIG9uIHRoZQogICAgRUJORiBpbiAzMi4zMDAgY2xhdXNlIDcuMyAgRUJORiBvZiBETiBTdHJpbmcgUmVwcmVzZW50YXRpb24KCiAgICBsZWFmIEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vICBTYW1lIHBhdHRlcm4gYXMgTG9jYWxETgogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPygsW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKj0oW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pKic7CiAgICB9IH0KCiAgICBsZWFmIGZ1bGxMb2NhbEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIExvY2FsUkROICwgeyBSRE5TZXBhcmF0b3IgLCBMb2NhbFJETiB9ICAgIFJETlNlcGFyYXRvciBpcyBhIHNpbmdsZSAsIG5vIHNwYWNlIG9yIFxSIGFsbG93ZWQgICBNZS5teWtleT0xIGFsbG93ZWQKICAgICAgLy8gIChmdWxsTG9jYWxSRE4pKCwoZnVsbExvY2FsUkROKSkqCiAgICAgIHBhdHRlcm4gJygoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKikpPSgoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pKSgsKChbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qfChbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qXC5bYS16XVteLD0rPD4jO1xcIlxyXG4qLl0qKSk9KChbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykpKSonOwogICAgfSB9CgogICAgbGVhZiBMb2NhbEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIExvY2FsUkROICwgeyBSRE5TZXBhcmF0b3IgLCBMb2NhbFJETiB9ICAgIFJETlNlcGFyYXRvciBpcyBhIHNpbmdsZSAsIG5vIHNwYWNlIG9yIFxSIGFsbG93ZWQKICAgICAgLy8gIExvY2FsUkROKCxMb2NhbFJETikqCiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KCxbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykqJzsKICAgIH0gfQoKICAgIGxlYWYgZnVsbExvY2FsUkROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIHNhbWUgYXMgZnVsbExvY2FsRE5BdHRyaWJ1dGVUeXBlQW5kVmFsdWUKICAgICAgcGF0dGVybiAnKFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSp8KFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSpcLlthLXpdW14sPSs8PiM7XFwiXHJcbiouXSopKT0oKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KSc7CiAgICB9IH0KCiAgICBsZWFmIExvY2FsUkROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIHNhbWUgYXMgTG9jYWxETkF0dHJpYnV0ZVR5cGVBbmRWYWx1ZQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPyc7CiAgICB9IH0KCiAgICBsZWFmIGZ1bGxMb2NhbEROQXR0cmlidXRlVHlwZUFuZFZhbHVlIHsgdHlwZSBzdHJpbmcgeyAvLyBMb2NhbEROQXR0cmlidXRlVHlwZSAsIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZVNlcGFyYXRvciAsIFJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICAvLyBwYXR0ZXJuIExvY2FsRE5BdHRyaWJ1dGVUeXBlPVJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICBwYXR0ZXJuICcoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKikpPSgoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pJzsKICAgIH0gfQoKICAgICAgLy8gbGltaXRhdGlvbjogTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlbm90IHN1cHBvcnRlZCBNZS5teWtleT0xCiAgICBsZWFmIExvY2FsRE5BdHRyaWJ1dGVUeXBlQW5kVmFsdWUgeyB0eXBlIHN0cmluZyB7CiAgICAgIC8vIGVibmYxICAgICAgICAgIExvY2FsRE5BdHRyaWJ1dGVUeXBlICwgQXR0cmlidXRlVHlwZUFuZFZhbHVlU2VwYXJhdG9yICwgUmVndWxhckF0dHJpYnV0ZVZhbHVlCiAgICAgIC8vIGVibmYyLWxpbWl0ZWQgIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlICwgQXR0cmlidXRlVHlwZUFuZFZhbHVlU2VwYXJhdG9yICwgUmVndWxhckF0dHJpYnV0ZVZhbHVlCiAgICAgIC8vIHBhdHRlcm4gICAgICAgIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlPVJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPyc7CiAgICB9IH0KCiAgICBsZWFmIExvY2FsRE5BdHRyaWJ1dGVUeXBlIHsgdHlwZSBzdHJpbmcgeyAgIC8vIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlIHwgTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlICBSRE5TZXBhcmF0b3IgaXMgYSBzaW5nbGUgLCBubyBzcGFjZSBvciBcUiBhbGxvd2VkCiAgICAgIC8vICBOYW1lT2ZDbGFzc1dpdGhJZEF0dHJpYnV0ZXxOYW1lc09mQ2xhc3NBbmROYW1pbmdBdHRyaWJ1dGUKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKiknOwogICAgfSB9CgogICAgbGVhZiBSZWd1bGFyQXR0cmlidXRlVmFsdWUgeyB0eXBlIHN0cmluZyB7ICAgICAgIC8vICggQXR0cmlidXRlVmFsdWVDaGFyIC0gU3BhY2VDaGFyICkgLCBbIHsgQXR0cmlidXRlVmFsdWVDaGFyIH0gLCAoIEF0dHJpYnV0ZVZhbHVlQ2hhciAtIFNwYWNlQ2hhciApIF0KICAgICAgcGF0dGVybiAnKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/JyA7CiAgICB9IH0KCiAgICBsZWFmIE5hbWVzT2ZDbGFzc0FuZE5hbWluZ0F0dHJpYnV0ZSAgeyB0eXBlIHN0cmluZyB7ICAvLyBDbGFzc05hbWUgLCBDbGFzc05hbWluZ0F0dHJpYnV0ZVNlcGFyYXRvciAsIE5hbWluZ0F0dHJpYnV0ZU5hbWUKICAgICAgLy8gcGF0dGVybjogQ2xhc3NOYW1lXC5OYW1pbmdBdHRyaWJ1dGVOYW1lCiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSpcLlthLXpdW14sPSs8PiM7XFwiXHJcbiouXSonIDsKICAgIH0gfQoKICAgIGxlYWYgcmVzdHJpY3RpdmVDbGFzc05hbWUgeyB0eXBlIHN0cmluZyB7ICAgICAvLwogICAgICBwYXR0ZXJuICdbYS16QS1aXVthLXpBLVowLTktX10qJyA7CiAgICB9IH0KCiAgICBsZWFmIENsYXNzTmFtZSB7IHR5cGUgc3RyaW5nIHsgICAgIC8vIENhcGl0YWxMZXR0ZXJDaGFyICwgeyBMb2NhbEROQXR0cmlidXRlVHlwZUNoYXIgfQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qJyA7CiAgICB9IH0KCiAgICBsZWFmIE5hbWluZ0F0dHJpYnV0ZU5hbWUgeyB0eXBlIHN0cmluZyB7ICAgLy8gU21hbGxMZXR0ZXJDaGFyICwgeyBMb2NhbEROQXR0cmlidXRlVHlwZUNoYXIgfQogICAgICBwYXR0ZXJuICdbYS16XVteLD0rPD4jO1xcIlxyXG4qLl0qJyA7CiAgICB9IH0KCiAgKi8KICB0eXBlZGVmIERpc3Rpbmd1aXNoZWROYW1lIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKj0oW14sPSs8PiM7XFwiXHJcbiogXXwnCiAgICAgICsgJyhcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKicKICAgICAgKyAnKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/JwogICAgICArICcoLFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKScKICAgICAgKyAnKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSonCiAgICAgICsgJyhbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykqJzsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIHRoZSAzR1BQIHN0YW5kYXJkIGZvciBEaXN0aW5ndWlzaGVkTmFtZS4KCiAgICAgIExpbWl0YXRpb25zOgogICAgICAtIFJETlNlcGFyYXRvcjogZG9uJ3QgYWxsb3cgU3BhY2VDaGFyIG9yIENhcnJpYWdlUmV0dXJuQ2hhcgogICAgICAtIE51bGxETjogRGlzYWxsb3cgbnVsbEROIHRoYXQgaXMgdGhlIHNhbWUgYXMgbm90IHByb3ZpZGluZyBhIEROCiAgICAgIC0gTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlIGZvcm1hdCBub3QgYWxsb3dlZAogICAgICAgIChlZy4gTWFuYWdlZEVsZW1lbnQubXlrZXk9MzQ1NDM2KSI7CiAgICByZWZlcmVuY2UgICIzR1BQIFRTIDMyLjMwMCI7CiAgfQoKICB0eXBlZGVmIFFPZmZzZXRSYW5nZSAgewogICAgdHlwZSBpbnQ4IHsKICAgICAgcmFuZ2UgIi0yNCB8IC0yMiB8IC0yMCB8IC0xOCB8IC0xNiB8IC0xNCB8IC0xMiB8IC0xMCB8IC04IHwgLTYgfCAiICsKICAgICAgICAiIC01IHwgLTQgfCAtMyB8IC0yIHwgLTEgfCAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgOCB8IDEwIHwgIiArCiAgICAgICAgIiAxMiB8IDE0IHwgMTYgfCAxOCB8IDIwIHwgMjIgfCAyNCI7CiAgICB9CiAgICB1bml0cyBkQjsKICB9CgogIGdyb3VwaW5nIFJlcG9ydGluZ0N0cmwgewogICAgY2hvaWNlIHJlcG9ydGluZ0N0cmwgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgZGVzY3JpcHRpb24gIgogICAgICAgIFRoaXMgY2hvaWNlIGRlZmluZXMgdGhlIG1ldGhvZCBmb3IgcmVwb3J0aW5nIGNvbGxlY3RlZCBwZXJmb3JtYW5jZQogICAgICAgIG1ldHJpY3MgdG8gTW5TIGNvbnN1bWVycyBhcyB3ZWxsIGFzIHRoZSBwYXJhbWV0ZXJzIGZvciBjb25maWd1cmluZyB0aGUKICAgICAgICByZXBvcnRpbmcgZnVuY3Rpb24uIEl0IGlzIGEgY2hvaWNlIGJldHdlZW4gdGhlIGNvbnRyb2wgcGFyYW1ldGVyCiAgICAgICAgcmVxdWlyZWQgZm9yIHRoZSByZXBvcnRpbmcgbWV0aG9kcywgd2hvc2UgcHJlc2VuY2Ugc2VsZWN0cyB0aGUKICAgICAgICByZXBvcnRpbmcgbWV0aG9kIGFzIGZvbGxvd3M6CgogICAgICAgIC0gV2hlbiBvbmx5IHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGUgTW5TCiAgICAgICAgcHJvZHVjZXIgc2hhbGwgc3RvcmUgZmlsZXMgb24gdGhlIE1uUyBwcm9kdWNlciBhdCBhIGxvY2F0aW9uIHNlbGVjdGVkCiAgICAgICAgYnkgdGhlIE1uUyBwcm9kdWNlciBhbmQsIG9uIGNvbmRpdGlvbiB0aGF0IGFuIGFwcHJvcHJpYXRlIHN1YnNjcmlwdGlvbgogICAgICAgIGlzIGluIHBsYWNlLCBpbmZvcm0gdGhlIE1uUyBjb25zdW1lciBhYm91dCB0aGUgYXZhaWxhYmlsaXR5IG9mIG5ldwogICAgICAgIGZpbGVzIGFuZCB0aGUgZmlsZSBsb2NhdGlvbiB1c2luZyB0aGUgbm90aWZ5RmlsZVJlYWR5IG5vdGlmaWNhdGlvbi4KICAgICAgICBJbiBjYXNlIHRoZSBwcmVwYXJhdGlvbiBvZiBhIGZpbGUgZmFpbHMsICdub3RpZnlGaWxlUHJlcGFyYXRpb25FcnJvcicKICAgICAgICBzaGFsbCBiZSBzZW50IGluc3RlYWQuCgogICAgICAgIC0gV2hlbiB0aGUgJ2ZpbGVSZXBvcnRpbmdQZXJpb2QnIGFuZCAnbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcycKICAgICAgICBhdHRyaWJ1dGVzIGFyZSBwcmVzZW50LCB0aGVuIHRoZSBNblMgcHJvZHVjZXIgc2hhbGwgYmVoYXZlIGxpa2UKICAgICAgICBkZXNjcmliZWQgZm9yIHRoZSBjYXNlIHRoYXQgb25seSB0aGUgJ2ZpbGVSZXBvcnRpbmdQZXJpb2QnIGlzIHByZXNlbnQuCiAgICAgICAgSW4gYWRkaXRpb24sIHRoZSBNblMgcHJvZHVjZXIgc2hhbGwgY3JlYXRlIG9uIGJlaGFsZiBvZiB0aGUgTW5TCiAgICAgICAgY29uc3VtZXIgYSBzdWJzY3JpcHRpb24sIHVzaW5nICdOdGZTdWJzY3JpcHRpb25Db250cm9sJywgZm9yIHRoZQogICAgICAgIG5vdGlmaWNhdGlvbiB0eXBlcyAnbm90aWZ5TU9JQ3JlYXRpb24nIGFuZCAnbm90aWZ5TU9JRGVsZXRpb24nIHJlbGF0ZWQKICAgICAgICB0byB0aGUgJ0ZpbGUnIGluc3RhbmNlcyB0aGF0IHdpbGwgYmUgcHJvZHVjZWQgbGF0ZXIuIEluIGNhc2UgYW4gZXhpc3RpbmcKICAgICAgICBzdWJzY3JpcHRpb24gZG9lcyBhbHJlYWR5IGluY2x1ZGUgdGhlICdGaWxlJyBpbnN0YW5jZXMgdG8gYmUgcHJvZHVjZWQsCiAgICAgICAgbm8gbmV3IHN1YnNjcmlwdGlvbiBzaGFsbCBiZSBjcmVhdGVkLiBUaGUKICAgICAgICAnbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcycgYXR0cmlidXRlIGluIHRoZSBjcmVhdGVkCiAgICAgICAgJ050ZlN1YnNjcmlwdGlvbkNvbnRyb2wnIGluc3RhbmNlIHNoYWxsIGJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlCiAgICAgICAgJ25vdGlmaWNhdGlvblJlY2lwaWVudEFkZHJlc3MnIGluIHRoZSByZWxhdGVkICdQZXJmTWV0cmljSm9iJy4gVGhpcwogICAgICAgIGZlYXR1cmUgaXMgY2FsbGVkIGltcGxpY2l0IG5vdGlmaWNhdGlvbiBzdWJzY3JpcHRpb24sIGFzIG9wcG9zZWQgdG8gdGhlCiAgICAgICAgY2FzZSB3aGVyZSB0aGUgTW5TIGNvbnN1bWVyIGNyZWF0ZXMgdGhlIHN1YnNjcmlwdGlvbiAoZXhwbGljaXQKICAgICAgICBub3RpZmljYXRpb24gc3Vic2NyaXB0aW9uKS4gV2hlbiB0aGUgcmVsYXRlZCAnUGVyZk1ldHJpY0pvYicgaXMKICAgICAgICBkZWxldGVkLCB0aGUgJ050ZlN1YnNjcmlwdGlvbkNvbnRyb2wnIGluc3RhbmNlIGNyZWF0ZWQgZHVlIHRvIHRoZQogICAgICAgIHJlcXVlc3QgZm9yIGltcGxpY2l0IHN1YnNjcmlwdGlvbiBzaGFsbCBiZSBkZWxldGVkIGFzIHdlbGwuCgogICAgICAgIC0gV2hlbiBvbmx5IHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGFuZCBmaWxlTG9jYXRpb24gYXR0cmlidXRlcyBhcmUKICAgICAgICBwcmVzZW50LCB0aGUgTW5TIHByb2R1Y2VyIHNoYWxsIHN0b3JlIHRoZSBmaWxlcyBvbiBhIE1uUyBjb25zdW1lciwgdGhhdAogICAgICAgIGNhbiBiZSBhbnkgZW50aXR5IHN1Y2ggYXMgYSBmaWxlIHNlcnZlciwgYXQgdGhlIGxvY2F0aW9uIHNwZWNpZmllZCBieQogICAgICAgIGZpbGVMb2NhdGlvbi4gTm8gbm90aWZpY2F0aW9uIGlzIGVtaXR0ZWQgYnkgdGhlIE1uUyBwcm9kdWNlci4KCiAgICAgICAgLSBXaGVuIG9ubHkgdGhlIHN0cmVhbVRhcmdldCBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlIE1uUyBwcm9kdWNlcgogICAgICAgIHNoYWxsIHN0cmVhbSB0aGUgZGF0YSB0byB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5IHN0cmVhbVRhcmdldC4KCiAgICAgICAgRm9yIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2RzIHRoZSBmaWxlUmVwb3J0aW5nUGVyaW9kIGF0dHJpYnV0ZQogICAgICAgIHNwZWNpZmllcyB0aGUgdGltZSB3aW5kb3cgZHVyaW5nIHdoaWNoIGNvbGxlY3RlZCBtZWFzdXJlbWVudHMgYXJlCiAgICAgICAgc3RvcmVkIGludG8gdGhlIHNhbWUgZmlsZSBiZWZvcmUgdGhlIGZpbGUgaXMgY2xvc2VkIGFuZCBhIG5ldyBmaWxlIGlzCiAgICAgICAgb3BlbmVkLiI7CgogICAgICBjYXNlIGZpbGUtYmFzZWQtcmVwb3J0aW5nIHsKICAgICAgICBsZWFmIGZpbGVSZXBvcnRpbmdQZXJpb2QgewogICAgICAgICAgdHlwZSB1aW50MzIgewogICAgICAgICAgICByYW5nZSAxLi5tYXg7CiAgICAgICAgICB9CiAgICAgICAgICB1bml0cyBtaW51dGVzOwogICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiRm9yIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2QgdGhpcyBpcyB0aGUgdGltZQogICAgICAgICAgICB3aW5kb3cgZHVyaW5nIHdoaWNoIGNvbGxlY3RlZCBtZWFzdXJlbWVudHMgYXJlIHN0b3JlZCBpbnRvIHRoZSBzYW1lCiAgICAgICAgICAgIGZpbGUgYmVmb3JlIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgYSBuZXcgZmlsZSBpcyBvcGVuZWQuCiAgICAgICAgICAgIFRoZSB0aW1lLXBlcmlvZCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgdGhlIGdyYW51bGFyaXR5UGVyaW9kLgoKICAgICAgICAgICAgQXBwbGljYWJsZSB3aGVuIHRoZSBmaWxlLWJhc2VkIHJlcG9ydGluZyBtZXRob2QgaXMgc3VwcG9ydGVkLiI7CiAgICAgICAgfQogICAgICAgIGNob2ljZSByZXBvcnRpbmctdGFyZ2V0IHsKICAgICAgICAgIGNhc2UgZmlsZS10YXJnZXQgewogICAgICAgICAgICBsZWFmIGZpbGVMb2NhdGlvbiB7CiAgICAgICAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFwcGxpY2FibGUgYW5kIG11c3QgYmUgcHJlc2VudCB3aGVuIHRoZSBmaWxlLWJhc2VkCiAgICAgICAgICAgICAgcmVwb3J0aW5nIG1ldGhvZCBpcyBzdXBwb3J0ZWQsIGFuZCB0aGUgZmlsZXMgYXJlIHN0b3JlZCBvbiB0aGUgTW5TCiAgICAgICAgICAgICAgY29uc3VtZXIuIjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY2FzZSBub3RpZmljYXRpb24tdGFyZ2V0IHsKICAgICAgICAgICAgbGVhZiBub3RpZmljYXRpb25SZWNpcGllbnRBZGRyZXNzIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJNdXN0IGJlIHByZXNlbnQgd2hlbiB0aGUgbm90aWZpY2F0aW9uLWJhc2VkIHJlcG9ydGluZwogICAgICAgICAgICAgIG1ldGhvZCBpcyBzdXBwb3J0ZWQsIGFuZCB0aGUgdGhlIGZpbGVzIGFyZSBhdmFpbGFibGUgYXMKICAgICAgICAgICAgICBub3RpZmljYXRpb25zIGZvciB0aGUgTW5TIGNvbnN1bWVyIHRvIHN1YnNjcmliZSB0by4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZGVzY3JpcHRpb24gIldoZW4gbmV0aWhlciBmaWxlTG9jYXRpb24gb3Igbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcwogICAgICAgICAgYXJlIHByZXNlbnQsIHRoZSBmaWxlcyBhcmUgc3RvcmVkIGFuZCBhdmFpbGFibGUgdG8gdGhlIE1uUyBjb25zdW1lcgogICAgICAgICAgaWYgdGhlIE1uUyBzdWJzY3JpYmVzIHRvIHRoZSBub3RpZnlGaWxlUmVhZHkgbm90aWZpY2F0aW9uLiI7CiAgICAgICAgfQogICAgICB9CgogICAgICBjYXNlIHN0cmVhbS1iYXNlZC1yZXBvcnRpbmcgewogICAgICAgIGxlYWYgc3RyZWFtVGFyZ2V0IHsKICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgICBkZXNjcmlwdGlvbiAiQXBwbGljYWJsZSB3aGVuIHN0cmVhbS1iYXNlZCByZXBvcnRpbmcgbWV0aG9kIGlzCiAgICAgICAgICAgIHN1cHBvcnRlZC4iOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQo=
ietf-geo-location urn:ietf:params:xml:ns:yang:ietf-geo-location \N [] 2022-02-11 bW9kdWxlIGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjppZXRmOnBhcmFtczp4bWw6bnM6eWFuZzppZXRmLWdlby1sb2NhdGlvbiI7CiAgICBwcmVmaXggZ2VvOwogICAgaW1wb3J0IGlldGYteWFuZy10eXBlcyB7CiAgICBwcmVmaXggeWFuZzsKICAgIHJlZmVyZW5jZSAiUkZDIDY5OTE6IENvbW1vbiBZQU5HIERhdGEgVHlwZXMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbgogICAgIklFVEYgTkVUTU9EIFdvcmtpbmcgR3JvdXAgKE5FVE1PRCkiOwogICAgY29udGFjdAogICAgIldHIFdlYjogICA8aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy93Zy9uZXRtb2QvPgogICAgV0cgTGlzdDogIDxtYWlsdG86bmV0bW9kQGlldGYub3JnPgoKICAgIEVkaXRvcjogICBDaHJpc3RpYW4gSG9wcHMKICAgICAgICAgICAgICAgIDxtYWlsdG86Y2hvcHBzQGNob3Bwcy5vcmc+IjsKCiAgICBkZXNjcmlwdGlvbgogICAgIlRoaXMgbW9kdWxlIGRlZmluZXMgYSBncm91cGluZyBvZiBhIGNvbnRhaW5lciBvYmplY3QgZm9yCiAgICBzcGVjaWZ5aW5nIGEgbG9jYXRpb24gb24gb3IgYXJvdW5kIGFuIGFzdHJvbm9taWNhbCBvYmplY3QgKGUuZy4sCiAgICAnZWFydGgnKS4KCiAgICBUaGUga2V5IHdvcmRzICdNVVNUJywgJ01VU1QgTk9UJywgJ1JFUVVJUkVEJywgJ1NIQUxMJywgJ1NIQUxMCiAgICBOT1QnLCAnU0hPVUxEJywgJ1NIT1VMRCBOT1QnLCAnUkVDT01NRU5ERUQnLCAnTk9UIFJFQ09NTUVOREVEJywKICAgICdNQVknLCBhbmQgJ09QVElPTkFMJyBpbiB0aGlzIGRvY3VtZW50IGFyZSB0byBiZSBpbnRlcnByZXRlZCBhcwogICAgZGVzY3JpYmVkIGluIEJDUCAxNCAoUkZDIDIxMTkpIChSRkMgODE3NCkgd2hlbiwgYW5kIG9ubHkgd2hlbiwKICAgIHRoZXkgYXBwZWFyIGluIGFsbCBjYXBpdGFscywgYXMgc2hvd24gaGVyZS4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMjIgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZCBhcwogICAgYXV0aG9ycyBvZiB0aGUgY29kZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywKICAgIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwdXJzdWFudCB0bywKICAgIGFuZCBzdWJqZWN0IHRvIHRoZSBsaWNlbnNlIHRlcm1zIGNvbnRhaW5lZCBpbiwgdGhlCiAgICBSZXZpc2VkIEJTRCBMaWNlbnNlIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUKICAgIElFVEYgVHJ1c3QncyBMZWdhbCBQcm92aXNpb25zIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzCiAgICAoaHR0cHM6Ly90cnVzdGVlLmlldGYub3JnL2xpY2Vuc2UtaW5mbykuCgogICAgVGhpcyB2ZXJzaW9uIG9mIHRoaXMgWUFORyBtb2R1bGUgaXMgcGFydCBvZiBSRkMgOTE3OQogICAgKGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL2luZm8vcmZjOTE3OSk7IHNlZSB0aGUgUkZDIGl0c2VsZgogICAgZm9yIGZ1bGwgbGVnYWwgbm90aWNlcy4iOwoKICAgIHJldmlzaW9uIDIwMjItMDItMTEgewogICAgZGVzY3JpcHRpb24KICAgICAgICAiSW5pdGlhbCBSZXZpc2lvbiI7CiAgICByZWZlcmVuY2UKICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIGZlYXR1cmUgYWx0ZXJuYXRlLXN5c3RlbXMgewogICAgZGVzY3JpcHRpb24KICAgICAgICAiVGhpcyBmZWF0dXJlIG1lYW5zIHRoZSBkZXZpY2Ugc3VwcG9ydHMgc3BlY2lmeWluZyBsb2NhdGlvbnMKICAgICAgICB1c2luZyBhbHRlcm5hdGUgc3lzdGVtcyBmb3IgcmVmZXJlbmNlIGZyYW1lcy4iOwogICAgfQoKICAgIGdyb3VwaW5nIGdlby1sb2NhdGlvbiB7CiAgICBkZXNjcmlwdGlvbgogICAgICAgICJHcm91cGluZyB0byBpZGVudGlmeSBhIGxvY2F0aW9uIG9uIGFuIGFzdHJvbm9taWNhbCBvYmplY3QuIjsKCiAgICBjb250YWluZXIgZ2VvLWxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICJBIGxvY2F0aW9uIG9uIGFuIGFzdHJvbm9taWNhbCBib2R5IChlLmcuLCAnZWFydGgnKQogICAgICAgIHNvbWV3aGVyZSBpbiBhIHVuaXZlcnNlLiI7CgogICAgICAgIGNvbnRhaW5lciByZWZlcmVuY2UtZnJhbWUgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgRnJhbWUgb2YgUmVmZXJlbmNlIGZvciB0aGUgbG9jYXRpb24gdmFsdWVzLiI7CgogICAgICAgIGxlYWYgYWx0ZXJuYXRlLXN5c3RlbSB7CiAgICAgICAgICAgIGlmLWZlYXR1cmUgImFsdGVybmF0ZS1zeXN0ZW1zIjsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgc3lzdGVtIGluIHdoaWNoIHRoZSBhc3Ryb25vbWljYWwgYm9keSBhbmQKICAgICAgICAgICAgZ2VvZGV0aWMtZGF0dW0gaXMgZGVmaW5lZC4gIE5vcm1hbGx5LCB0aGlzIHZhbHVlIGlzIG5vdAogICAgICAgICAgICBwcmVzZW50IGFuZCB0aGUgc3lzdGVtIGlzIHRoZSBuYXR1cmFsIHVuaXZlcnNlOyBob3dldmVyLAogICAgICAgICAgICB3aGVuIHByZXNlbnQsIHRoaXMgdmFsdWUgYWxsb3dzIGZvciBzcGVjaWZ5aW5nIGFsdGVybmF0ZQogICAgICAgICAgICBzeXN0ZW1zIChlLmcuLCB2aXJ0dWFsIHJlYWxpdGllcykuICBBbiBhbHRlcm5hdGUtc3lzdGVtCiAgICAgICAgICAgIG1vZGlmaWVzIHRoZSBkZWZpbml0aW9uIChidXQgbm90IHRoZSB0eXBlKSBvZiB0aGUgb3RoZXIKICAgICAgICAgICAgdmFsdWVzIGluIHRoZSByZWZlcmVuY2UgZnJhbWUuIjsKICAgICAgICB9CiAgICAgICAgbGVhZiBhc3Ryb25vbWljYWwtYm9keSB7CiAgICAgICAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlZmF1bHQgImVhcnRoIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFuIGFzdHJvbm9taWNhbCBib2R5IGFzIG5hbWVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsCiAgICAgICAgICAgIEFzdHJvbm9taWNhbCBVbmlvbiAoSUFVKSBvciBhY2NvcmRpbmcgdG8gdGhlIGFsdGVybmF0ZQogICAgICAgICAgICBzeXN0ZW0gaWYgc3BlY2lmaWVkLiAgRXhhbXBsZXMgaW5jbHVkZSAnc3VuJyAob3VyIHN0YXIpLAogICAgICAgICAgICAnZWFydGgnIChvdXIgcGxhbmV0KSwgJ21vb24nIChvdXIgbW9vbiksICdlbmNlbGFkdXMnIChhCiAgICAgICAgICAgIG1vb24gb2YgU2F0dXJuKSwgJ2NlcmVzJyAoYW4gYXN0ZXJvaWQpLCBhbmQKICAgICAgICAgICAgJzY3cC9jaHVyeXVtb3YtZ2VyYXNpbWVua28gKGEgY29tZXQpLiAgVGhlIEFTQ0lJIHZhbHVlCiAgICAgICAgICAgIFNIT1VMRCBoYXZlIHVwcGVyY2FzZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGFuZCBub3QKICAgICAgICAgICAgaW5jbHVkZSBjb250cm9sIGNoYXJhY3RlcnMgKGkuZS4sIHZhbHVlcyAzMi4uNjQsIGFuZAogICAgICAgICAgICA5MS4uMTI2KS4gIEFueSBwcmVjZWRpbmcgJ3RoZScgaW4gdGhlIG5hbWUgU0hPVUxEIE5PVCBiZQogICAgICAgICAgICBpbmNsdWRlZC4iOwogICAgICAgICAgICByZWZlcmVuY2UKICAgICAgICAgICAgImh0dHBzOi8vd3d3LmlhdS5vcmcvIjsKICAgICAgICB9CiAgICAgICAgY29udGFpbmVyIGdlb2RldGljLXN5c3RlbSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgZ2VvZGV0aWMgc3lzdGVtIG9mIHRoZSBsb2NhdGlvbiBkYXRhLiI7CiAgICAgICAgICAgIGxlYWYgZ2VvZGV0aWMtZGF0dW0gewogICAgICAgICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgICAgICAgICBwYXR0ZXJuICdbIC1AXFstXF5fLX5dKic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICJBIGdlb2RldGljLWRhdHVtIGRlZmluaW5nIHRoZSBtZWFuaW5nIG9mIGxhdGl0dWRlLAogICAgICAgICAgICAgICAgbG9uZ2l0dWRlLCBhbmQgaGVpZ2h0LiAgVGhlIGRlZmF1bHQgd2hlbiB0aGUKICAgICAgICAgICAgICAgIGFzdHJvbm9taWNhbCBib2R5IGlzICdlYXJ0aCcgaXMgJ3dncy04NCcsIHdoaWNoIGlzCiAgICAgICAgICAgICAgICB1c2VkIGJ5IHRoZSBHbG9iYWwgUG9zaXRpb25pbmcgU3lzdGVtIChHUFMpLiAgVGhlCiAgICAgICAgICAgICAgICBBU0NJSSB2YWx1ZSBTSE9VTEQgaGF2ZSB1cHBlcmNhc2UgY29udmVydGVkIHRvCiAgICAgICAgICAgICAgICBsb3dlcmNhc2UgYW5kIG5vdCBpbmNsdWRlIGNvbnRyb2wgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgKGkuZS4sIHZhbHVlcyAzMi4uNjQsIGFuZCA5MS4uMTI2KS4gIFRoZSBJQU5BIHJlZ2lzdHJ5CiAgICAgICAgICAgICAgICBmdXJ0aGVyIHJlc3RyaWN0cyB0aGUgdmFsdWUgYnkgY29udmVydGluZyBhbGwgc3BhY2VzCiAgICAgICAgICAgICAgICAoJyAnKSB0byBkYXNoZXMgKCctJykuCiAgICAgICAgICAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGdlb2RldGljLWRhdHVtIGluZGljYXRlcwogICAgICAgICAgICAgICAgaG93IGFjY3VyYXRlbHkgaXQgbW9kZWxzIHRoZSBhc3Ryb25vbWljYWwgYm9keSBpbgogICAgICAgICAgICAgICAgcXVlc3Rpb24sIGJvdGggZm9yIHRoZSAnaG9yaXpvbnRhbCcKICAgICAgICAgICAgICAgIGxhdGl0dWRlL2xvbmdpdHVkZSBjb29yZGluYXRlcyBhbmQgZm9yIGhlaWdodAogICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuIjsKICAgICAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMsCiAgICAgICAgICAgICAgICBTZWN0aW9uIDYuMSI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGVhZiBjb29yZC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBsYXRpdHVkZS9sb25naXR1ZGUgcGFpciBmb3IKICAgICAgICAgICAgICAgIGVsbGlwc29pZGFsIGNvb3JkaW5hdGVzLCBvciB0aGUgWCwgWSwgYW5kIFogY29tcG9uZW50cwogICAgICAgICAgICAgICAgZm9yIENhcnRlc2lhbiBjb29yZGluYXRlcy4gIFdoZW4gY29vcmQtYWNjdXJhY3kgaXMKICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgaXQgaW5kaWNhdGVzIGhvdyBwcmVjaXNlbHkgdGhlIGNvb3JkaW5hdGVzCiAgICAgICAgICAgICAgICBpbiB0aGUgYXNzb2NpYXRlZCBsaXN0IG9mIGxvY2F0aW9ucyBoYXZlIGJlZW4KICAgICAgICAgICAgICAgIGRldGVybWluZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbQogICAgICAgICAgICAgICAgZGVmaW5lZCBieSB0aGUgZ2VvZGV0aWMtZGF0dW0uICBGb3IgZXhhbXBsZSwgdGhlcmUKICAgICAgICAgICAgICAgIG1pZ2h0IGJlIHVuY2VydGFpbnR5IGR1ZSB0byBtZWFzdXJlbWVudCBlcnJvciBpZiBhbgogICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIG1lYXN1cmVtZW50IHdhcyBtYWRlIHRvIGRldGVybWluZSBlYWNoCiAgICAgICAgICAgICAgICBsb2NhdGlvbi4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxlYWYgaGVpZ2h0LWFjY3VyYWN5IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBoZWlnaHQgdmFsdWUgZm9yIGVsbGlwc29pZGFsCiAgICAgICAgICAgICAgICBjb29yZGluYXRlczsgdGhpcyB2YWx1ZSBpcyBub3QgdXNlZCB3aXRoIENhcnRlc2lhbgogICAgICAgICAgICAgICAgY29vcmRpbmF0ZXMuICBXaGVuIGhlaWdodC1hY2N1cmFjeSBpcyBzcGVjaWZpZWQsIGl0CiAgICAgICAgICAgICAgICBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgaGVpZ2h0cyBpbiB0aGUKICAgICAgICAgICAgICAgIGFzc29jaWF0ZWQgbGlzdCBvZiBsb2NhdGlvbnMgaGF2ZSBiZWVuIGRldGVybWluZWQKICAgICAgICAgICAgICAgIHdpdGggcmVzcGVjdCB0byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gZGVmaW5lZCBieSB0aGUKICAgICAgICAgICAgICAgIGdlb2RldGljLWRhdHVtLiAgRm9yIGV4YW1wbGUsIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgICAgICAgICB1bmNlcnRhaW50eSBkdWUgdG8gbWVhc3VyZW1lbnQgZXJyb3IgaWYgYW4KICAgICAgICAgICAgICAgIGV4cGVyaW1lbnRhbCBtZWFzdXJlbWVudCB3YXMgbWFkZSB0byBkZXRlcm1pbmUgZWFjaAogICAgICAgICAgICAgICAgbG9jYXRpb24uIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2hvaWNlIGxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGxvY2F0aW9uIGRhdGEgZWl0aGVyIGluIGxhdGl0dWRlL2xvbmdpdHVkZSBvcgogICAgICAgICAgICBDYXJ0ZXNpYW4gdmFsdWVzIjsKICAgICAgICBjYXNlIGVsbGlwc29pZCB7CiAgICAgICAgICAgIGxlYWYgbGF0aXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiVGhlIGxhdGl0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICAgZGVmaW5pdGlvbiBhbmQgcHJlY2lzaW9uIG9mIHRoaXMgbWVhc3VyZW1lbnQgaXMKICAgICAgICAgICAgICAgIGluZGljYXRlZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGVhZiBsb25naXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiVGhlIGxvbmdpdHVkZSB2YWx1ZSBvbiB0aGUgYXN0cm9ub21pY2FsIGJvZHkuICBUaGUKICAgICAgICAgICAgICAgIGRlZmluaXRpb24gYW5kIHByZWNpc2lvbiBvZiB0aGlzIG1lYXN1cmVtZW50IGlzCiAgICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxlYWYgaGVpZ2h0IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAiSGVpZ2h0IGZyb20gYSByZWZlcmVuY2UgMCB2YWx1ZS4gIFRoZSBwcmVjaXNpb24gYW5kCiAgICAgICAgICAgICAgICAnMCcgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2FzZSBjYXJ0ZXNpYW4gewogICAgICAgICAgICBsZWFmIHggewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICJUaGUgWCB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZWFmIHkgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICJUaGUgWSB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBsZWFmIHogewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICJUaGUgWiB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGFpbmVyIHZlbG9jaXR5IHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiSWYgdGhlIG9iamVjdCBpcyBpbiBtb3Rpb24sIHRoZSB2ZWxvY2l0eSB2ZWN0b3IgZGVzY3JpYmVzCiAgICAgICAgICAgIHRoaXMgbW90aW9uIGF0IHRoZSB0aW1lIGdpdmVuIGJ5IHRoZSB0aW1lc3RhbXAuICBGb3IgYQogICAgICAgICAgICBmb3JtdWxhIHRvIGNvbnZlcnQgdGhlc2UgdmFsdWVzIHRvIHNwZWVkIGFuZCBoZWFkaW5nLCBzZWUKICAgICAgICAgICAgUkZDIDkxNzkuIjsKICAgICAgICByZWZlcmVuY2UKICAgICAgICAgICAgIlJGQyA5MTc5OiBBIFlBTkcgR3JvdXBpbmcgZm9yIEdlb2dyYXBoaWMgTG9jYXRpb25zIjsKCiAgICAgICAgbGVhZiB2LW5vcnRoIHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgInYtbm9ydGggaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgdG93YXJkcwogICAgICAgICAgICB0cnVlIG5vcnRoIGFzIGRlZmluZWQgYnkgdGhlIGdlb2RldGljLXN5c3RlbS4iOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB2LWVhc3QgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxMjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAidi1lYXN0IGlzIHRoZSByYXRlIG9mIGNoYW5nZSAoaS5lLiwgc3BlZWQpIHBlcnBlbmRpY3VsYXIKICAgICAgICAgICAgdG8gdGhlIHJpZ2h0IG9mIHRydWUgbm9ydGggYXMgZGVmaW5lZCBieQogICAgICAgICAgICB0aGUgZ2VvZGV0aWMtc3lzdGVtLiI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIHYtdXAgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxMjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAidi11cCBpcyB0aGUgcmF0ZSBvZiBjaGFuZ2UgKGkuZS4sIHNwZWVkKSBhd2F5IGZyb20gdGhlCiAgICAgICAgICAgIGNlbnRlciBvZiBtYXNzLiI7CiAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZWFmIHRpbWVzdGFtcCB7CiAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlJlZmVyZW5jZSB0aW1lIHdoZW4gbG9jYXRpb24gd2FzIHJlY29yZGVkLiI7CiAgICAgICAgfQogICAgICAgIGxlYWYgdmFsaWQtdW50aWwgewogICAgICAgIHR5cGUgeWFuZzpkYXRlLWFuZC10aW1lOwogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgdGltZXN0YW1wIGZvciB3aGljaCB0aGlzIGdlby1sb2NhdGlvbiBpcyB2YWxpZCB1bnRpbC4KICAgICAgICAgICAgSWYgdW5zcGVjaWZpZWQsIHRoZSBnZW8tbG9jYXRpb24gaGFzIG5vIHNwZWNpZmljCiAgICAgICAgICAgIGV4cGlyYXRpb24gdGltZS4iOwogICAgICAgIH0KICAgIH0KICAgIH0KfQo=
o-ran-smo-teiv-common-yang-extensions urn:o-ran:smo-teiv-common-yang-extensions \N [] 2024-05-24 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogICAgcHJlZml4IG9yLXRlaXYteWV4dDsKCiAgICBvcmdhbml6YXRpb24gIkVyaWNzc29uIEFCIjsKICAgIGNvbnRhY3QgIkVyaWNzc29uIGZpcnN0IGxpbmUgc3VwcG9ydCB2aWEgZW1haWwiOwogICAgZGVzY3JpcHRpb24KICAgICJUb3BvbG9neSBhbmQgSW52ZW50b3J5IFlBTkcgZXh0ZW5zaW9ucyBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMjQgRXJpY3Nzb24gQUIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgVGhpcyBtb2RlbCBjb250YWlucyBleHRlbnNpb25zIHRvIHRoZSBZQU5HIGxhbmd1YWdlIHRoYXQgdG9wb2xvZ3kgYW5kCiAgICBpbnZlbnRvcnkgbW9kZWxzIHdpbGwgdXNlIHRvIGRlZmluZSBhbmQgYW5ub3RhdGUgdHlwZXMgYW5kIHJlbGF0aW9uc2hpcHMuIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIGV4dGVuc2lvbiBiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJEZWZpbmVzIGEgYmktZGlyZWN0aW9uYWwgcmVsYXRpb25zaGlwIGluIHRoZSB0b3BvbG9neS4KCiAgICAgICAgICAgIEEgYmktZGlyZWN0aW9uYWwtYXNzb2NpYXRpb24gKEJEQSkgaXMgYSByZWxhdGlvbnNoaXAgY29tcHJpc2luZyBvZgogICAgICAgICAgICBhbiBBLXNpZGUgYW5kIGEgQi1zaWRlLiBUaGUgQS1zaWRlIGlzIGNvbnNpZGVyZWQgdGhlIG9yaWdpbmF0aW5nCiAgICAgICAgICAgIHNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcDsgdGhlIEItc2lkZSBpcyBjb25zaWRlcmVkIHRoZSB0ZXJtaW5hdGluZwogICAgICAgICAgICBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBvcmRlciBvZiBBLXNpZGUgYW5kIEItc2lkZSBpcyBvZgogICAgICAgICAgICBpbXBvcnRhbmNlIGFuZCBNVVNUIE5PVCBiZSBjaGFuZ2VkIG9uY2UgZGVmaW5lZC4KCiAgICAgICAgICAgIEJvdGggQS1zaWRlIGFuZCBCLXNpZGUgYXJlIGRlZmluZWQgb24gYSB0eXBlLCBhbmQgYXJlIGdpdmVuIGEgcm9sZS4KICAgICAgICAgICAgQSB0eXBlIG1heSBoYXZlIG11bHRpcGxlIG9yaWdpbmF0aW5nIGFuZC9vciB0ZXJtaW5hdGluZyBzaWRlcyBvZiBhCiAgICAgICAgICAgIHJlbGF0aW9uc2hpcCwgYWxsIGRpc3Rpbmd1aXNoZWQgYnkgcm9sZSBuYW1lLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlICdtb2R1bGUnIHN0YXRlbWVudC4KICAgICAgICAgICAgTXVsdGlwbGUgJ2JpLWRpcmVjdGlvbmFsLXRvcG9sb2d5LXJlbGF0aW9uc2hpcCcgc3RhdGVtZW50cyBhcmUKICAgICAgICAgICAgYWxsb3dlZCBwZXIgcGFyZW50IHN0YXRlbWVudC4KCiAgICAgICAgICAgIFN1YnN0YXRlbWVudHMgdG8gdGhlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIGRlZmluZQogICAgICAgICAgICB0aGUgQS1zaWRlIGFuZCB0aGUgQi1zaWRlLCByZXNwZWN0aXZlbHksIGFuZCBvcHRpb25hbGx5IHByb3BlcnRpZXMKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcC4gRGF0YSBub2RlcyBvZiB0eXBlcyAnbGVhZicgYW5kICdsZWFmLWxpc3QnIGFyZQogICAgICAgICAgICB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIE9uZSBvZiB0aGUgZGF0YSBub2RlcyBNVVNUIGJlIGFubm90YXRlZCB3aXRoCiAgICAgICAgICAgIHRoZSAnYS1zaWRlJyBleHRlbnNpb247IGFub3RoZXIgZGF0YSBub2RlIE1VU1QgYmUgYW5ub3RhdGVkIHdpdGggdGhlCiAgICAgICAgICAgICdiLXNpZGUnIGV4dGVuc2lvbi4gT3RoZXIgZGF0YSBub2RlcyBkZWZpbmUgcHJvcGVydGllcyBvZiB0aGUKICAgICAgICAgICAgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSByZWxhdGlvbnNoaXAgbmFtZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIG5hbWVzcGFjZSBvZiB0aGUgZGVjbGFyaW5nIG1vZHVsZSBhbmQgTVVTVCBiZQogICAgICAgICAgICB1bmlxdWUgd2l0aGluIHRoZSBzY29wZS4iOwoKICAgICAgICBhcmd1bWVudCByZWxhdGlvbnNoaXBOYW1lOwogICAgfQoKICAgIGV4dGVuc2lvbiBhU2lkZSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkRlZmluZXMgdGhlIEEtc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICAgICAgIHN0YXRlbWVudCwgd2hpY2ggaXRzZWxmIG11c3QgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICAgICAgJ2luc3RhbmNlLWlkZW50aWZpZXInLiBDb25zdHJhaW50cyBNQVkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQKICAgICAgICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUKICAgICAgICAgICAgb2YgdGhlIHJvbGUgb2YgdGhlIEEtc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgbmFtZSBvZiB0aGUgcm9sZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEEtc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlCiAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgICAgICAgV2hpbGUgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgZG9lcyBub3QgcmVzdWx0IGluIGEgcHJvcGVydHkKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICAgICAgIGJldHdlZW4gcHJvcGVydGllcyBvZiBhIHR5cGUsIGFuZCByb2xlcyBvZiBhIHJlbGF0aW9uc2hpcCBvbiB0aGUKICAgICAgICAgICAgdHlwZS4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQS1zaWRlIHJlc2lkZXMuCiAgICAgICAgICAgIElmIHRoZSB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlCiAgICAgICAgICAgIHByZWZpeGVkLCBhbmQgYSBjb3JyZXNwb25kaW5nICdpbXBvcnQnIHN0YXRlbWVudCBiZSB1c2VkIHRvIGRlY2xhcmUKICAgICAgICAgICAgdGhlIHByZWZpeC4iOwoKICAgICAgICBhcmd1bWVudCBhU2lkZVR5cGU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGJTaWRlIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiRGVmaW5lcyB0aGUgQi1zaWRlIG9mIGEgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgYSAnbGVhZicgb3IgJ2xlYWYtbGlzdCcKICAgICAgICAgICAgc3RhdGVtZW50LCB3aGljaCBpdHNlbGYgbXVzdCBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUKICAgICAgICAgICAgJ3VuaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudC4KCiAgICAgICAgICAgIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgTVVTVCBiZQogICAgICAgICAgICAnaW5zdGFuY2UtaWRlbnRpZmllcicuIENvbnN0cmFpbnRzIE1BWSBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHBhcmVudAogICAgICAgICAgICAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgdG8gZW5mb3JjZSBjYXJkaW5hbGl0eS4KCiAgICAgICAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGlzIHVzZWQgYXMgbmFtZQogICAgICAgICAgICBvZiB0aGUgcm9sZSBvZiB0aGUgQi1zaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBuYW1lIG9mIHRoZSByb2xlCiAgICAgICAgICAgIGlzIHNjb3BlZCB0byB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIGlzIGRlZmluZWQgYW5kIE1VU1QgYmUKICAgICAgICAgICAgdW5pcXVlIHdpdGhpbiB0aGUgc2NvcGUuCgogICAgICAgICAgICBXaGlsZSB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBkb2VzIG5vdCByZXN1bHQgaW4gYSBwcm9wZXJ0eQogICAgICAgICAgICBvZiB0aGUgcmVsYXRpb25zaGlwLCBpdCBpcyBSRUNPTU1FTkRFRCB0byBhdm9pZCB1c2luZyB0aGUgbmFtZSBvZiBhbgogICAgICAgICAgICBleGlzdGluZyB0eXBlIHByb3BlcnR5IGFzIHJvbGUgbmFtZSB0byBhdm9pZCBwb3RlbnRpYWwgYW1iaWd1aXRpZXMKICAgICAgICAgICAgYmV0d2VlbiBwcm9wZXJ0aWVzIG9mIGEgdHlwZSwgYW5kIHJvbGVzIG9mIGEgcmVsYXRpb25zaGlwIG9uIHRoZQogICAgICAgICAgICB0eXBlLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBCLXNpZGUgcmVzaWRlcy4KICAgICAgICAgICAgSWYgdGhlIHR5cGUgaXMgZGVjbGFyZWQgaW4gYW5vdGhlciBtb2R1bGUsIHRoZSB0eXBlIG11c3QgYmUKICAgICAgICAgICAgcHJlZml4ZWQsIGFuZCBhIGNvcnJlc3BvbmRpbmcgJ2ltcG9ydCcgc3RhdGVtZW50IGJlIHVzZWQgdG8gZGVjbGFyZQogICAgICAgICAgICB0aGUgcHJlZml4LiI7CgogICAgICAgIGFyZ3VtZW50IGJTaWRlVHlwZTsKICAgIH0KCiAgICBleHRlbnNpb24gZG9tYWluIHsKICAgICAgICBkZXNjcmlwdGlvbiAiS2V5d29yZCB1c2VkIHRvIGNhcnJ5IGRvbWFpbiBpbmZvcm1hdGlvbi4iOwogICAgICAgIGFyZ3VtZW50IGRvbWFpbk5hbWU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGxhYmVsIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGxhYmVsIGNhbiBiZSB1c2VkIHRvIGdpdmUgbW9kdWxlcyBhbmQgc3VibW9kdWxlcyBhIHNlbWFudGljCiAgICAgICAgICAgIHZlcnNpb24sIGluIGFkZGl0aW9uIHRvIHRoZWlyIHJldmlzaW9uLgoKICAgICAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbGFiZWwgaXMg4oCYeC55LnrigJkg4oCTIGV4cHJlc3NlZCBhcyBwYXR0ZXJuLCBpdCBpcwogICAgICAgICAgICBbMC05XStcXC5bMC05XStcXC5bMC05XSsKCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSByZXZpc2lvbiBzdGF0ZW1lbnQuCiAgICAgICAgICAgIFplcm8gb3Igb25lIHJldmlzaW9uIGxhYmVsIHN0YXRlbWVudHMgcGVyIHBhcmVudCBzdGF0ZW1lbnQgYXJlCiAgICAgICAgICAgIGFsbG93ZWQuCgogICAgICAgICAgICBSZXZpc2lvbiBsYWJlbHMgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCBhbGwgcmV2aXNpb25zIG9mIGEgbW9kdWxlIG9yCiAgICAgICAgICAgIHN1Ym1vZHVsZS4iOwoKICAgICAgICBhcmd1bWVudCBzZW12ZXJzaW9uOwogICAgfQp9
o-ran-smo-teiv-rel-equipment-ran urn:o-ran:smo-teiv-rel-equipment-ran REL_EQUIPMENT_RAN ["o-ran-smo-teiv-equipment", "o-ran-smo-teiv-ran"] 2024-05-24 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1lcXVpcG1lbnQtcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtZXF1aXBtZW50LXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtZXF1aXByYW47CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsgcHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtZXF1aXBtZW50IHsgcHJlZml4IG9yLXRlaXYtZXF1aXA7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtcmFuIHsgcHJlZml4IG9yLXRlaXYtcmFuOyB9CgogICAgb3JnYW5pemF0aW9uICJFcmljc3NvbiBBQiI7CiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiRXF1aXBtZW50IGFuZCBSQU4gdG9wb2xvZ3kgcmVsYXRpb24gbW9kZWwuCgogICAgQ29weXJpZ2h0IChjKSAyMDI0IEVyaWNzc29uIEFCLiBBbGwgcmlnaHRzIHJlc2VydmVkLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IHJlbGF0aW9ucyBiZXR3ZWVuIEVxdWlwbWVudCBhbmQgUkFOLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9FUVVJUE1FTlRfUkFOOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9TRVJWRVNfQU5URU5OQUNBUEFCSUxJVFkgeyAvLyAwLi5uIHRvIDAuLm0KCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBzZXJ2aWNlZC1hbnRlbm5hQ2FwYWJpbGl0eSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgc2VydmljZWQgYnkgdGhpcyBBbnRlbm5hIE1vZHVsZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1lcXVpcDpBbnRlbm5hTW9kdWxlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc2VydmluZy1hbnRlbm5hTW9kdWxlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgTW9kdWxlIHNlcnZlcyB0aGlzIEFudGVubmEgQ2FwYWJpbGl0eS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46QW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9Cn0=
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
o-ran-smo-teiv-equipment_AntennaModule AntennaModule o-ran-smo-teiv-equipment ["antennaBeamWidth", "antennaModelNumber", "electricalAntennaTilt", "geo-location", "mechanicalAntennaBearing", "mechanicalAntennaTilt", "positionWithinSector", "totalTilt"]
o-ran-smo-teiv-ran_AntennaCapability AntennaCapability o-ran-smo-teiv-ran ["eUtranFqBands", "geranFqBands", "nRFqBands"]
o-ran-smo-teiv-ran_ENodeBFunction ENodeBFunction o-ran-smo-teiv-ran ["eNBId", "eNodeBPlmnId"]
o-ran-smo-teiv-ran_LTESectorCarrier LTESectorCarrier o-ran-smo-teiv-ran ["sectorCarrierType"]
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER provided-lteSectorCarrier ENodeBFunction o-ran-smo-teiv-ran 1 1 provided-by-enodebFunction LTESectorCarrier o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false B_SIDE o-ran-smo-teiv-ran_LTESectorCarrier o-ran-smo-teiv-ran
\.
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
-ALTER SCHEMA ties_consumer_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_consumer_data;
+ALTER SCHEMA teiv_consumer_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."module_reference" (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"revision" TEXT NOT NULL,
"status" VARCHAR(127) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."decorators" (
"name" TEXT PRIMARY KEY,
"dataType" VARCHAR(511) NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."classifiers" (
"name" TEXT PRIMARY KEY,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
COMMIT;
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_groups;
-ALTER SCHEMA ties_groups OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_groups;
+ALTER SCHEMA teiv_groups OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :'pguser';
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_groups.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_groups.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_groups' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_groups' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE TABLE IF NOT EXISTS ties_groups."groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."groups" (
"id" VARCHAR(150) PRIMARY KEY,
"name" VARCHAR(150) NOT NULL,
"type" VARCHAR(50) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_groups."static_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."static_groups" (
"id" VARCHAR(150),
"topology_type" TEXT NOT NULL,
"provided_members_ids" TEXT[] NOT NULL,
PRIMARY KEY ("id", "topology_type"),
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_groups."dynamic_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."dynamic_groups" (
"id" VARCHAR(150) PRIMARY KEY,
"criteria" JSONB NOT NULL,
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-SELECT ties_groups.create_constraint_if_not_exists(
+SELECT teiv_groups.create_constraint_if_not_exists(
'groups',
'CHECK_groups_type',
- 'ALTER TABLE ties_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
+ 'ALTER TABLE teiv_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
);
COMMIT;
-- ============LICENSE_END=========================================================
--
-CREATE OR REPLACE FUNCTION ties_data.create_enum_type(
+CREATE OR REPLACE FUNCTION teiv_data.create_enum_type(
schema_name TEXT, type_name TEXT, enum_values TEXT[]
) RETURNS VOID AS $$
BEGIN
END;
$$ language 'plpgsql';
-SELECT ties_data.create_enum_type('ties_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
+SELECT teiv_data.create_enum_type('teiv_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
-CREATE TABLE IF NOT EXISTS ties_data."responsible_adapter" (
+CREATE TABLE IF NOT EXISTS teiv_data."responsible_adapter" (
"id" TEXT,
"hashed_id" BYTEA
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'PK_responsible_adapter_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'UNIQUE_responsible_adapter_hashed_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
);
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE TABLE IF NOT EXISTS ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (
+CREATE TABLE IF NOT EXISTS teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (
"id" TEXT,
"6446B2D4BE5E367FB0396383C4BDEF42D51CF74F" TEXT,
"F03B534AFF0872651FED60C54AB56BEDADAB94B5" BIGINT,
"REL_CD_92559ED73C761B860682582A040E745ECEC194D5" jsonb
);
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_92559ED73C761B860682582A040E745ECEC194D5" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_92559ED73C761B860682582A040E745ECEC194D5" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" (
+CREATE TABLE IF NOT EXISTS teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" (
"id" TEXT,
"aSide_EntityTypeA" TEXT,
"bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
+CREATE TABLE IF NOT EXISTS teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
"id" TEXT,
"aSide_AntennaModule" TEXT,
"bSide_AntennaCapability" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."FB1E124031A12CD85D3335194B39B193723A0490" (
+CREATE TABLE IF NOT EXISTS teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" (
"id" TEXT,
"aSide_C812C285BEFA4EC42026AB075D9C65200A00F815" TEXT,
"bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_AntennaModule" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-equipment_AntennaModule" (
"id" TEXT,
"antennaBeamWidth" jsonb,
"antennaModelNumber" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_AntennaCapability" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_AntennaCapability" (
"id" TEXT,
"eUtranFqBands" jsonb,
"geranFqBands" jsonb,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ENodeBFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" (
"id" TEXT,
"eNBId" INTEGER,
"eNodeBPlmnId" jsonb,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "eNBId" SET DEFAULT '11';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "eNBId" SET DEFAULT '11';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ODUFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ODUFunction" (
"id" TEXT,
"dUpLMNId" jsonb,
"gNBDUId" BIGINT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" (
"id" TEXT,
"sectorCarrierType" TEXT,
"CD_sourceIds" jsonb,
"REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ALTER COLUMN "REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."test-built-in-module_EntityTypeA" (
+CREATE TABLE IF NOT EXISTS teiv_data."test-built-in-module_EntityTypeA" (
"id" TEXT,
"CD_sourceIds" jsonb,
"CD_classifiers" jsonb,
"REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA" jsonb
);
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA" SET DEFAULT '{}';
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'10B9F515756871D3EF6558FAF1F112BAE207945D',
'PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB',
- 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
'PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D',
- 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'FB1E124031A12CD85D3335194B39B193723A0490',
'PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD',
- 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'PK_o-ran-smo-teiv-equipment_AntennaModule_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_AntennaCapability',
'PK_o-ran-smo-teiv-ran_AntennaCapability_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ENodeBFunction',
'PK_o-ran-smo-teiv-ran_ENodeBFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ENodeBFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ENodeBFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'PK_o-ran-smo-teiv-ran_ODUFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ODUFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ODUFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_LTESectorCarrier',
'PK_o-ran-smo-teiv-ran_LTESectorCarrier_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_LTESectorCarrier_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_LTESectorCarrier_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'PK_test-built-in-module_EntityTypeA_id',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "PK_test-built-in-module_EntityTypeA_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "PK_test-built-in-module_EntityTypeA_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'10B9F515756871D3EF6558FAF1F112BAE207945D',
'FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228',
- 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228" FOREIGN KEY ("REL_FK_provided-by-entityTypeA") REFERENCES ties_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228" FOREIGN KEY ("REL_FK_provided-by-entityTypeA") REFERENCES teiv_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'10B9F515756871D3EF6558FAF1F112BAE207945D',
'UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14',
- 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14" UNIQUE ("REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0");'
+ 'ALTER TABLE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14" UNIQUE ("REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
'FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30',
- 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30" FOREIGN KEY ("aSide_EntityTypeA") REFERENCES ties_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30" FOREIGN KEY ("aSide_EntityTypeA") REFERENCES teiv_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
'FK_33B5669A341584011D9A73FB491FF2242A158057',
- 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_33B5669A341584011D9A73FB491FF2242A158057" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_33B5669A341584011D9A73FB491FF2242A158057" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."o-ran-smo-teiv-equipment_AntennaModule" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES teiv_data."o-ran-smo-teiv-equipment_AntennaModule" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES teiv_data."o-ran-smo-teiv-ran_AntennaCapability" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'FB1E124031A12CD85D3335194B39B193723A0490',
'FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F',
- 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F" FOREIGN KEY ("aSide_C812C285BEFA4EC42026AB075D9C65200A00F815") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F" FOREIGN KEY ("aSide_C812C285BEFA4EC42026AB075D9C65200A00F815") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'FB1E124031A12CD85D3335194B39B193723A0490',
'FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5',
- 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_LTESectorCarrier',
'FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ENodeBFunction" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_D0868FBC0BBE2754F4B765C4898C1A1700E2BEFD" FOREIGN KEY ("REL_FK_provided-by-enodebFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_LTESectorCarrier',
'UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_FD943EE596337B11E0C640E1176CADF9CD69E19A" UNIQUE ("REL_ID_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_LTESectorCarrier',
'FK_3D8DF3FBD9C042A888CEB382688C1E8F39D85AFE',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_3D8DF3FBD9C042A888CEB382688C1E8F39D85AFE" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "FK_3D8DF3FBD9C042A888CEB382688C1E8F39D85AFE" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES teiv_data."o-ran-smo-teiv-ran_AntennaCapability" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_LTESectorCarrier',
'UNIQUE_EA18F1D278EAFE834B8A80BCF8A7D8355CD013DF',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_EA18F1D278EAFE834B8A80BCF8A7D8355CD013DF" UNIQUE ("REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD CONSTRAINT "UNIQUE_EA18F1D278EAFE834B8A80BCF8A7D8355CD013DF" UNIQUE ("REL_ID_LTESECTORCARRIER_USES_ANTENNACAPABILITY");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0" FOREIGN KEY ("REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0" FOREIGN KEY ("REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD" UNIQUE ("REL_ID_31A5B55158140557F09AE15589A8B8038416689B");'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD" UNIQUE ("REL_ID_31A5B55158140557F09AE15589A8B8038416689B");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF" FOREIGN KEY ("REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF" FOREIGN KEY ("REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9" UNIQUE ("REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845");'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9" UNIQUE ("REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845");'
);
-CREATE INDEX IF NOT EXISTS "IDX_1B734406AE75EF103D3E0913637A741DB602A6E9" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("8252D18D44F633831557076D827993C45278024D"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1B734406AE75EF103D3E0913637A741DB602A6E9" ON teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("8252D18D44F633831557076D827993C45278024D"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_93D8689B66D668B64409D69EB1AD4670419BE4F0" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("68C48305AB6C3A30DD927F5D38562379374A4B31");
+CREATE INDEX IF NOT EXISTS "IDX_93D8689B66D668B64409D69EB1AD4670419BE4F0" ON teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("68C48305AB6C3A30DD927F5D38562379374A4B31");
-CREATE INDEX IF NOT EXISTS "IDX_EDE92A1D90AEC06F2C60361D36437D1A20691FDC" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_EDE92A1D90AEC06F2C60361D36437D1A20691FDC" ON teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_371097F35C137586E6DD7526076CA322C72FAF79" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_371097F35C137586E6DD7526076CA322C72FAF79" ON teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_06503CC4580E197BA869DF60207E5CC1778223F0" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_06503CC4580E197BA869DF60207E5CC1778223F0" ON teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_2B6D6CECE23DAE6820ECA50ECC172FE6FCE673DF" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_2B6D6CECE23DAE6820ECA50ECC172FE6FCE673DF" ON teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F613D04BF286E43A7BBBE6C306F015D0A40BC451" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F613D04BF286E43A7BBBE6C306F015D0A40BC451" ON teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN (("REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_15F7CCF328E4FA23EE20BE521E07C475825B38C6" ON ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("REL_CD_92559ED73C761B860682582A040E745ECEC194D5");
+CREATE INDEX IF NOT EXISTS "IDX_15F7CCF328E4FA23EE20BE521E07C475825B38C6" ON teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" USING GIN ("REL_CD_92559ED73C761B860682582A040E745ECEC194D5");
-CREATE INDEX IF NOT EXISTS "IDX_D16FC793292C549EEB2EDCA074EC9726CD0986B1" ON ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_D16FC793292C549EEB2EDCA074EC9726CD0986B1" ON teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_73D270B07D89D7F4D54B82DB95E6168F6ED54AF1" ON ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_73D270B07D89D7F4D54B82DB95E6168F6ED54AF1" ON teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_786DFF3328DE8D28C54F9ACA126AF6ADB1D21645" ON ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_786DFF3328DE8D28C54F9ACA126AF6ADB1D21645" ON teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_DCA3B27EBD61104A41BE23B1C864D67CBF3AA45E" ON ties_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DCA3B27EBD61104A41BE23B1C864D67CBF3AA45E" ON teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_26EE0E66CE3AF1DE2E107F6A99712F2BEC1F47E3" ON ties_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_26EE0E66CE3AF1DE2E107F6A99712F2BEC1F47E3" ON teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_C212962DB49654BB1526341141D01AF2A3699B5D" ON ties_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_C212962DB49654BB1526341141D01AF2A3699B5D" ON teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_eNodeBPlmnId" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN ("eNodeBPlmnId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_eNodeBPlmnId" ON teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN ("eNodeBPlmnId");
-CREATE INDEX IF NOT EXISTS "IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_3F7D14B4CF2CA74F28BA1600606E82C6E8C447C0" ON teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B598B74193845587BA03553CEDBA058D33956847" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B598B74193845587BA03553CEDBA058D33956847" ON teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ENodeBFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_dUpLMNId" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("dUpLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_dUpLMNId" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("dUpLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_73790DA8FF6365B752DC8B399893AC6DE8CF26C4" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_73790DA8FF6365B752DC8B399893AC6DE8CF26C4" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5CE9EDE1F25AB2D880A41BC5D297FDBE668182E8" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5CE9EDE1F25AB2D880A41BC5D297FDBE668182E8" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_6EC539C61EA7078DBA264C9877B87FC263605D42" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6EC539C61EA7078DBA264C9877B87FC263605D42" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E754EB8AD825DB3111B07B9E5DA3B30C38DB406B" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_LTESectorCarrier_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_1EBC7271CEA658156DE25286404CBC4593340F8E" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1EBC7271CEA658156DE25286404CBC4593340F8E" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_846B7740E8AA756B8C1409CD909D2DF73A47ED4C" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_846B7740E8AA756B8C1409CD909D2DF73A47ED4C" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_44075E1D464599B61924196C20F2B88332520CD8" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");
+CREATE INDEX IF NOT EXISTS "IDX_44075E1D464599B61924196C20F2B88332520CD8" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER");
-CREATE INDEX IF NOT EXISTS "IDX_7D01A5D21C990ACCBE65035C062C7D881A05F1EE" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_7D01A5D21C990ACCBE65035C062C7D881A05F1EE" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_sourceIds_LTESECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_3D3EFECFB917DAC074F56334224B19F8FD6BF8A5" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_3D3EFECFB917DAC074F56334224B19F8FD6BF8A5" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN (("REL_CD_classifiers_LTESECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_4EE2AA643311DFCC13B6ED832EBE2FAB4CFDF494" ON ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY");
+CREATE INDEX IF NOT EXISTS "IDX_4EE2AA643311DFCC13B6ED832EBE2FAB4CFDF494" ON teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" USING GIN ("REL_CD_decorators_LTESECTORCARRIER_USES_ANTENNACAPABILITY");
-CREATE INDEX IF NOT EXISTS "IDX_497353902DBA614467FFC457A40F39BF04CADC33" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_497353902DBA614467FFC457A40F39BF04CADC33" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_C4788824417A9F41E8CB948DAC0C2D1C0580FFD4" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_C4788824417A9F41E8CB948DAC0C2D1C0580FFD4" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_test-built-in-module_EntityTypeA_CD_decorators" ON ties_data."test-built-in-module_EntityTypeA" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_test-built-in-module_EntityTypeA_CD_decorators" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_86B531D9388F1780960FB5C3BA9D3EDEF14CCB48" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_86B531D9388F1780960FB5C3BA9D3EDEF14CCB48" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E050A7DD176C8D18F3307D3851586C8124CA8268" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E050A7DD176C8D18F3307D3851586C8124CA8268" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_CCBCF9A86E2AA678D2589DEB3A895076012F941D" ON ties_data."test-built-in-module_EntityTypeA" USING GIN ("REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54");
+CREATE INDEX IF NOT EXISTS "IDX_CCBCF9A86E2AA678D2589DEB3A895076012F941D" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN ("REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54");
-CREATE INDEX IF NOT EXISTS "IDX_41BEE4E46184F6F17D338D2F8691EF31D188C76D" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_41BEE4E46184F6F17D338D2F8691EF31D188C76D" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5345DBA457356CB29D1905DA4785B7FB2B27D224" ON ties_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5345DBA457356CB29D1905DA4785B7FB2B27D224" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN (("REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_14EDC4DAF64B9A97E4788CFEA16A7F9AED195589" ON ties_data."test-built-in-module_EntityTypeA" USING GIN ("REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA");
+CREATE INDEX IF NOT EXISTS "IDX_14EDC4DAF64B9A97E4788CFEA16A7F9AED195589" ON teiv_data."test-built-in-module_EntityTypeA" USING GIN ("REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA");
-CREATE OR REPLACE FUNCTION ties_data.create_enum_type(
+CREATE OR REPLACE FUNCTION teiv_data.create_enum_type(
schema_name TEXT, type_name TEXT, enum_values TEXT[]
) RETURNS VOID AS $$
BEGIN
END;
$$ language 'plpgsql';
-SELECT ties_data.create_enum_type('ties_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
+SELECT teiv_data.create_enum_type('teiv_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
-CREATE TABLE IF NOT EXISTS ties_data."responsible_adapter" (
+CREATE TABLE IF NOT EXISTS teiv_data."responsible_adapter" (
"id" TEXT,
"hashed_id" BYTEA
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'PK_responsible_adapter_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'UNIQUE_responsible_adapter_hashed_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
);
-ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD COLUMN IF NOT EXISTS "REL_metadata_C3C2193291E4C8D591E05390DFBCC3843B6B0DA2" jsonb;
+ALTER TABLE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD COLUMN IF NOT EXISTS "REL_metadata_C3C2193291E4C8D591E05390DFBCC3843B6B0DA2" jsonb;
-ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "REL_metadata_8D7D68E4BA4C9749577CF7F26DB5E9B22BCA796E" jsonb;
+ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "REL_metadata_8D7D68E4BA4C9749577CF7F26DB5E9B22BCA796E" jsonb;
-ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "REL_metadata_5A306C45543040943259237E7C3C9710139245CB" jsonb;
+ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "REL_metadata_5A306C45543040943259237E7C3C9710139245CB" jsonb;
-ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD COLUMN IF NOT EXISTS "REL_metadata_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" jsonb;
+ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD COLUMN IF NOT EXISTS "REL_metadata_ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER" jsonb;
-ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD COLUMN IF NOT EXISTS "REL_metadata_LTESECTORCARRIER_USES_ANTENNACAPABILITY" jsonb;
+ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD COLUMN IF NOT EXISTS "REL_metadata_LTESECTORCARRIER_USES_ANTENNACAPABILITY" jsonb;
-ALTER TABLE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."o-ran-smo-teiv-ran_AntennaCapability" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ties_data."o-ran-smo-teiv-ran_ENodeBFunction" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ENodeBFunction" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ANALYZE ties_data."o-ran-smo-teiv-ran_ODUFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_ODUFunction";
-ANALYZE ties_data."FB1E124031A12CD85D3335194B39B193723A0490";
+ANALYZE teiv_data."FB1E124031A12CD85D3335194B39B193723A0490";
-ANALYZE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D";
+ANALYZE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D";
-ANALYZE ties_data."o-ran-smo-teiv-ran_LTESectorCarrier";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_LTESectorCarrier";
-ANALYZE ties_data."test-built-in-module_EntityTypeA";
+ANALYZE teiv_data."test-built-in-module_EntityTypeA";
-ANALYZE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
+ANALYZE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
-ANALYZE ties_data."o-ran-smo-teiv-ran_AntennaCapability";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_AntennaCapability";
-ANALYZE ties_data."o-ran-smo-teiv-equipment_AntennaModule";
+ANALYZE teiv_data."o-ran-smo-teiv-equipment_AntennaModule";
-ANALYZE ties_data."o-ran-smo-teiv-ran_ENodeBFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_ENodeBFunction";
-ANALYZE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE";
+ANALYZE teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE";
COMMIT;
BEGIN;
-DROP SCHEMA IF EXISTS ties_model cascade;
-CREATE SCHEMA IF NOT EXISTS ties_model;
-ALTER SCHEMA ties_model OWNER TO :pguser;
+DROP SCHEMA IF EXISTS teiv_model cascade;
+CREATE SCHEMA IF NOT EXISTS teiv_model;
+ALTER SCHEMA teiv_model OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-CREATE TABLE IF NOT EXISTS ties_model.hash_info (
+CREATE TABLE IF NOT EXISTS teiv_model.hash_info (
"name" VARCHAR(511) PRIMARY KEY,
"hashedValue" VARCHAR(511) NOT NULL,
"type" VARCHAR(511)
);
-CREATE TABLE IF NOT EXISTS ties_model.module_reference (
+CREATE TABLE IF NOT EXISTS teiv_model.module_reference (
"name" VARCHAR(511) PRIMARY KEY,
"namespace" VARCHAR(511),
"domain" VARCHAR(511),
"content" TEXT NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_model.entity_info (
+CREATE TABLE IF NOT EXISTS teiv_model.entity_info (
"storedAt" VARCHAR(511) PRIMARY KEY,
"name" VARCHAR(511) NOT NULL,
"moduleReferenceName" VARCHAR(511) NOT NULL,
"attributeNames" jsonb DEFAULT '[]'::jsonb,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
+CREATE TABLE IF NOT EXISTS teiv_model.relationship_info (
"name" VARCHAR(511) NOT NULL,
"aSideAssociationName" TEXT NOT NULL,
"aSideMOType" TEXT NOT NULL,
"storedAt" VARCHAR(511) NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
PRIMARY KEY ("name", "moduleReferenceName"),
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
CD_classifiers CD_classifiers COLUMN
CD_decorators CD_decorators COLUMN
CD_sourceIds CD_sourceIds COLUMN
metadata metadata COLUMN
\.
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+COPY teiv_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
_3gpp-common-yang-types urn:3gpp:sa5:_3gpp-common-yang-types \N [] 2023-11-06 bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOjNncHA6c2E1Ol8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIjsKICBwcmVmaXggInR5cGVzM2dwcCI7CiAgCiAgaW1wb3J0IGlldGYtaW5ldC10eXBlcyB7IHByZWZpeCBpbmV0OyB9CiAgaW1wb3J0IGlldGYteWFuZy10eXBlcyB7IHByZWZpeCB5YW5nOyB9CiAgaW1wb3J0IF8zZ3BwLWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggeWV4dDNncHA7IH0KCiAgb3JnYW5pemF0aW9uICIzR1BQIFNBNSI7CiAgY29udGFjdCAiaHR0cHM6Ly93d3cuM2dwcC5vcmcvRHluYVJlcG9ydC9UU0ctV0ctLVM1LS1vZmZpY2lhbHMuaHRtP0l0ZW1pZD00NjQiOwogIGRlc2NyaXB0aW9uICJUaGUgbW9kZWwgZGVmaW5lcyBhIFlBTkcgbWFwcGluZyBvZiB0aGUgdG9wIGxldmVsIAogICAgaW5mb3JtYXRpb24gY2xhc3NlcyB1c2VkIGZvciBtYW5hZ2VtZW50IG9mIDVHIG5ldHdvcmtzIGFuZCAKICAgIG5ldHdvcmsgc2xpY2luZy4KICAgIENvcHlyaWdodCAyMDIzLCAzR1BQIE9yZ2FuaXphdGlvbmFsIFBhcnRuZXJzIChBUklCLCBBVElTLCBDQ1NBLCBFVFNJLCBUU0RTSSwgCiAgICBUVEEsIFRUQykuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIjsKICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjIzIjsKCiAgcmV2aXNpb24gMjAyMy0xMS0wNiB7IHJlZmVyZW5jZSBDUi0wMzA1OyB9CiAgcmV2aXNpb24gMjAyMy0wOS0xOCB7IHJlZmVyZW5jZSBDUi0wMjcxIDsgfSAKICByZXZpc2lvbiAyMDIzLTA4LTA5IHsgcmVmZXJlbmNlIENSLTAyNjY7IH0KICByZXZpc2lvbiAyMDIzLTA1LTEwIHsgcmVmZXJlbmNlIENSLTAyNTA7IH0KICByZXZpc2lvbiAyMDIzLTAyLTE0IHsgcmVmZXJlbmNlIENSLTAyMzQ7IH0KICByZXZpc2lvbiAyMDIyLTExLTA0IHsgcmVmZXJlbmNlICJDUi0wMTk0IjsgfQogIHJldmlzaW9uIDIwMjItMTAtMjQgeyByZWZlcmVuY2UgQ1ItMDE5NjsgIH0KICByZXZpc2lvbiAyMDIyLTA3LTI2IHsgcmVmZXJlbmNlICJDUi0wMTgwIiA7IH0KICByZXZpc2lvbiAyMDIyLTAyLTA5IHsgcmVmZXJlbmNlICJDUi0wMTQ0IjsgfQogIHJldmlzaW9uIDIwMjEtMTEtMDEgeyByZWZlcmVuY2UgIkNSLTAxNDEiOyB9CiAgCiAgcmV2aXNpb24gMjAyMS0wOS0zMCB7CiAgICBkZXNjcmlwdGlvbiAiQWRkZWQgTG9uZ2l0dWRlLCBMYXRpdHVkZSwgVGVudGhPZkRlZ3JlZXMsIE9uT2ZmLiI7CiAgICByZWZlcmVuY2UgIkNSLTAxMzgiOwogIH0KCiAgcmV2aXNpb24gMjAyMC0xMS0wNiB7CiAgICBkZXNjcmlwdGlvbiAiUmVtb3ZlZCBpbmNvcnJlY3QgUy1OU1NBSSBkZWZpbml0aW9ucy4iOwogICAgcmVmZXJlbmNlICJDUi0wMTE4IjsKICB9CgogIHJldmlzaW9uIDIwMjAtMDMtMTAgewogICAgZGVzY3JpcHRpb24gIlJlbW92ZWQgZmF1bHR5IHdoZW4gc3RhdGVtZW50cy4iOwogICAgcmVmZXJlbmNlICJTUC0yMDAyMjkiOwogIH0KIAogIHJldmlzaW9uIDIwMTktMTAtMjUgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIE1hbmFnZWRORlByb2ZpbGUuIjsKICAgIHJlZmVyZW5jZSAiUzUtMTk0NDU3IjsKICB9CgogIHJldmlzaW9uIDIwMTktMTAtMTYgewogICAgZGVzY3JpcHRpb24gIkFkZGVkIFNBUCBhbmQgdXNhZ2VTdGF0ZS4iOwogICAgcmVmZXJlbmNlICJTNS0xOTM1MTgiOwogIH0KCiAgcmV2aXNpb24gMjAxOS0wNi0yMyB7CiAgICByZWZlcmVuY2UgICJJbml0aWFsIHZlcnNpb24uIjsKICB9CgogIHR5cGVkZWYgRW5hYmxlZERpc2FibGVkIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIERJU0FCTEVEIDsKICAgICAgZW51bSBFTkFCTEVEIDsKICAgIH0KICB9CiAgCiAgZ3JvdXBpbmcgbmFtZVZhbHVlUGFpciB7CiAgICBsZWFmIG5hbWUgeyB0eXBlIHN0cmluZzsgfQogICAgbGVhZiB2YWx1ZSB7IHR5cGUgc3RyaW5nOyB9CiAgfQogIAogIGdyb3VwaW5nIFByb2Nlc3NNb25pdG9yR3JwIHsKICAgIGRlc2NyaXB0aW9uICJQcm92aWRlcyBhdHRyaWJ1dGVzIHRvIG1vbml0b3IgdGhlIHByb2dyZXNzIG9mIHByb2Nlc3NlcyAKICAgICAgd2l0aCBzcGVjaWZpYyBwdXJwb3NlIGFuZCBsaW1pdGVkIGxpZmV0aW1lIHJ1bm5pbmcgb24gTW5TIHByb2R1Y2Vycy4gCiAgICAgIEl0IG1heSBiZSB1c2VkIGFzIGRhdGEgdHlwZSBmb3IgZGVkaWNhdGVkIHByb2dyZXNzIG1vbml0b3IgYXR0cmlidXRlcyAKICAgICAgd2hlbiBzcGVjaWZ5aW5nIHRoZSBtYW5hZ2VtZW50IHJlcHJlc2VudGF0aW9uIG9mIHRoZXNlIHByb2Nlc3Nlcy4gCiAgICAgIFRoZSBhdHRyaWJ1dGVzIGluIHRoaXMgY2xhdXNlIGFyZSBkZWZpbmVkIGluIGEgZ2VuZXJpYyB3YXkuIAogICAgICBGb3Igc29tZSBhdHRyaWJ1dGVzIHNwZWNpYWxpc2F0aW9ucyBtYXkgYmUgcHJvdmlkZWQgd2hlbiBzcGVjaWZ5aW5nIGEgCiAgICAgIGNvbmNyZXRlIHByb2Nlc3MgcmVwcmVzZW50YXRpb24uCgogICAgICBJZiBhIG1hbmFnZW1lbnQgb3BlcmF0aW9uIG9uIHNvbWUgSU9DcyB0cmlnZ2VycyBhbiBhc3NvY2lhdGVkIAogICAgICBhc3luY2hyb25vdXMgcHJvY2VzcyAod2hvc2UgcHJvZ3Jlc3Mgc2hhbGwgYmUgbW9uaXRvcmVkKSwgdGhpcyBzaG91bGQgCiAgICAgIGFsc28gcmVzdWx0IGluIGNyZWF0aW5nIGFuIGF0dHJpYnV0ZSBuYW1lZCAncHJvY2Vzc01vbml0b3InIChvZiB0eXBlIAogICAgICAnUHJvY2Vzc01vbml0b3InKSBpbiB0aGVzZSBJT0MocykuIFRoZSBwcm9jZXNzTW9uaXRvciBhdHRyaWJ1dGUgbWF5IGJlIAogICAgICBhY2NvbXBhbmllZCBieSB1c2UtY2FzZSBzcGVjaWZpYyBhZGRpdGlvbmFsIGRhdGEgaXRlbXMuCgogICAgICBUaGUgcHJvZ3Jlc3Mgb2YgdGhlIHByb2Nlc3MgaXMgZGVzY3JpYmVkIGJ5IHRoZSAnc3RhdHVzJyBhbmQgCiAgICAgICdwcm9ncmVzc1BlcmNlbnRhZ2UnIGF0dHJpYnV0ZXMuIEFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9ucyBmb3IgCiAgICAgIHRoZSAnc3RhdHVzJyBhdHRyaWJ1dGUgbWF5IGJlIHByb3ZpZGVkIGJ5IHRoZSAncHJvZ3Jlc3NTdGF0ZUluZm8nIGFuZCAKICAgICAgJ3Jlc3VsdFN0YXRlSW5mbycgYXR0cmlidXRlcy4KCiAgICAgIFdoZW4gdGhlIHByb2Nlc3MgaXMgaW5zdGFudGlhdGVkLCB0aGUgJ3N0YXR1cycgaXMgc2V0IHRvICdOT1RfUlVOTklORycgCiAgICAgIGFuZCB0aGUgJ3Byb2dyZXNzUGVyY2VudGFnZScgdG8gJzAnLiBUaGUgTW5TIHByb2R1Y2VyIGRlY2lkZXMgd2hlbiB0byAKICAgICAgc3RhcnQgZXhlY3V0aW5nIHRoZSBwcm9jZXNzIGFuZCB0byB0cmFuc2l0aW9uIGludG8gdGhlICdSVU5OSU5HJyBzdGF0ZS4gCiAgICAgIFRoaXMgdGltZSBpcyBjYXB0dXJlZCBpbiB0aGUgJ3N0YXJ0VGltZScgYXR0cmlidXRlLiBBbHRlcm5hdGl2ZWx5LCB0aGUgCiAgICAgIHByb2Nlc3MgbWF5IHN0YXJ0IHRvIGV4ZWN1dGUgZGlyZWN0bHkgdXBvbiBpdHMgaW5zdGFudGlhdGlvbi4gT25lIAogICAgICBhbHRlcm5hdGl2ZSBtdXN0IGJlIHNlbGVjdGVkIHdoZW4gdXNpbmcgdGhpcyBkYXRhIHR5cGUuCgogICAgICBEdXJpbmcgdGhlICdSVU5OSU5HJyBzdGF0ZSB0aGUgJ3Byb2dyZXNzUGVyY2VudGFnZScgYXR0cmlidXRlIG1heSBiZSAKICAgICAgcmVwZWF0ZWRseSB1cGRhdGVkLiBUaGUgZXhhY3Qgc2VtYW50aWMgb2YgdGhpcyBhdHRyaWJ1dGUgaXMgc3ViamVjdCB0byAKICAgICAgZnVydGhlciBzcGVjaWFsaXNhdGlvbi4gVGhlICdwcm9ncmVzc0luZm8nIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byAKICAgICAgcHJvdmlkZSBhZGRpdGlvbmFsIHRleHR1YWwgaW5mb3JtYXRpb24gaW4gdGhlICdOT1RfUlVOTklORycsICdDQU5DRUxMSU5HJyAKICAgICAgYW5kICdSVU5OSU5HJyBzdGF0ZXMuIEZ1cnRoZXIgc3BlY2lhbGlzYXRpb24gb2YgCiAgICAgICdwcm9ncmVzc1N0YXRlSW5mbycgbWF5IGJlIHByb3ZpZGVkIHdoZXJlIHRoaXMgZGF0YSB0eXBlIGlzIAogICAgICB1c2VkLgoKICAgICAgVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgdGhlIHByb2Nlc3MsIHRoZSAnc3RhdHVzJyBhdHRyaWJ1dGUgaXMgc2V0IAogICAgICB0byAnRklOSVNIRUQnLCB0aGUgJ3Byb2dyZXNzUGVyY2VudGFnZScgdG8gMTAwJS4gVGhlIHRpbWUgaXMgY2FwdHVyZWQgaW4gCiAgICAgIHRoZSAnZW5kVGltZScgYXR0cmlidXRlLiBBZGRpdGlvbmFsIHRleHR1YWwgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkIAogICAgICBpbiB0aGUgJ3Jlc3VsdFN0YXRlSW5mbycgYXR0cmlidXRlLiBUaGUgdHlwZSBvZiAKICAgICAgJ3Jlc3VsdFN0YXRlSW5mbycgaW4gdGhpcyBkYXRhIHR5cGUgZGVmaW5pdGlvbiBpcyAnU3RyaW5nJy4gCiAgICAgIEZ1cnRoZXIgc3BlY2lhbGlzYXRpb24gb2YgJ3Jlc3VsdFN0YXRlSW5mbycgbWF5IGJlIHByb3ZpZGVkIAogICAgICB3aGVyZSB0aGlzIGRhdGEgdHlwZSBpcyB1c2VkLgoKICAgICAgSW4gY2FzZSB0aGUgcHJvY2VzcyBmYWlscyB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHksIHRoZSAnc3RhdHVzJyAKICAgICAgYXR0cmlidXRlIGlzIHNldCB0byAnRkFJTEVEJyBvciAnUEFSVElBTExZX0ZBSUxFRCcsIHRoZSBjdXJyZW50IHZhbHVlIG9mIAogICAgICAncHJvZ3Jlc3NQZXJjZW50YWdlJyBpcyBmcm96ZW4sIGFuZCB0aGUgdGltZSBjYXB0dXJlZCBpbiAnZW5kVGltZScuIFRoZSAKICAgICAgJ3Jlc3VsdFN0YXRlSW5mbycgc3BlY2lmaWVzIHRoZSByZWFzb24gZm9yIHRoZSBmYWlsdXJlLiAKICAgICAgU3BlY2lmaWMgZmFpbHVyZSByZWFzb25zIG1heSBiZSBzcGVjaWZpZWQgd2hlcmUgdGhlIGRhdGEgdHlwZSBkZWZpbmVkIGluIAogICAgICB0aGlzIGNsYXVzZSBpcyB1c2VkLiBUaGUgZXhhY3Qgc2VtYW50aWMgb2YgZmFpbHVyZSBtYXkgYmUgc3ViamVjdCBmb3IgCiAgICAgIGZ1cnRoZXIgc3BlY2lhbGlzYXRpb24gYXMgd2VsbC4KCiAgICAgIEluIGNhc2UgdGhlIHByb2Nlc3MgaXMgY2FuY2VsbGVkLCB0aGUgJ3N0YXR1cycgYXR0cmlidXRlIGlzIGZpcnN0IHNldCB0byAKICAgICAgJ0NBTkNFTExJTkcnIGFuZCB3aGVuIHRoZSBwcm9jZXNzIGlzIHJlYWxseSBjYW5jZWxsZWQgdGhlbiB0byAnQ0FOQ0VMTEVEJy4gCiAgICAgIFRoZSB0cmFuc2l0aW9uIHRvICdDQU5DRUxMRUQnIGlzIGNhcHR1cmVkIGluIHRoZSAnZW5kVGltZScgYXR0cmlidXRlLiAKICAgICAgVGhlIHZhbHVlIG9mICdwcm9ncmVzc1BlcmNlbnRhZ2UnIGlzIGZyb3plbi4gQWRkaXRpb25hbCB0ZXh0dWFsIAogICAgICBpbmZvcm1hdGlvbiBtYXkgYmUgcHJvdmlkZWQgaW4gdGhlICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZS4KCiAgICAgIFRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUgaXMgcHJvdmlkZWQgb25seSBmb3IgYWRkaXRpb25hbCB0ZXh0dWFsIAogICAgICBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgJ0ZJTklTSEVEJywgJ0ZBSUxFRCcsICdQQVJUSUFMTFlfRkFJTEVEJyBvciAKICAgICAgJ0NBTkNFTExFRCcuIEl0IHNoYWxsIG5vdCBiZSB1c2VkIGZvciBtYWtpbmcgdGhlIG91dGNvbWUsIHRoYXQgdGhlIAogICAgICBwcm9jZXNzIG1heSBwcm9kdWNlIGluIGNhc2Ugb2Ygc3VjY2VzcywgYXZhaWxhYmxlLgoKICAgICAgVGhlIHByb2Nlc3MgbWF5IGhhdmUgdG8gYmUgY29tcGxldGVkIHdpdGhpbiBhIGNlcnRhaW4gdGltZSBhZnRlciBpdHMgCiAgICAgIGNyZWF0aW9uLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHJlcXVpcmVkIGRhdGEgbWF5IG5vdCBiZSBhdmFpbGFibGUgYW55IAogICAgICBtb3JlIGFmdGVyIGEgY2VydGFpbiB0aW1lLCBvciB0aGUgcHJvY2VzcyBvdXRjb21lIGlzIG5lZWRlZCB1bnRpbCBhIAogICAgICBjZXJ0YWluIHRpbWUgYW5kIHdoZW4gbm90IHByb3ZpZGVkIGJ5IHRoaXMgdGltZSBpcyBub3QgbmVlZGVkIGFueSBtb3JlLiAKICAgICAgVGhlIHRpbWUgdW50aWwgdGhlIE1uUyBwcm9kdWNlciBhdXRvbWF0aWNhbGx5IGNhbmNlbHMgdGhlIHByb2Nlc3MgaXMgCiAgICAgIGluZGljYXRlZCBieSB0aGUgJ3RpbWVyJyBhdHRyaWJ1dGUuIjsKICAgICAgCiAgICBsZWFmIGlkIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICBkZXNjcmlwdGlvbiAiSWQgb2YgdGhlIHByb2Nlc3MuIEl0IGlzIHVuaXF1ZSB3aXRoaW4gYSBzaW5nbGUgCiAgICAgICAgbXVsdGl2YWx1ZSBhdHRyaWJ1dGUgb2YgdHlwZSBQcm9jZXNzTW9uaXRvci4iOwogICAgfQogICAgCiAgICBsZWFmIHN0YXR1cyB7IAogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIE5PVF9TVEFSVEVEIDsKICAgICAgICBlbnVtIFJVTk5JTkcgOwogICAgICAgIGVudW0gQ0FOQ0VMTElORyA7CiAgICAgICAgZW51bSBGSU5JU0hFRCA7CiAgICAgICAgZW51bSBGQUlMRUQgOwogICAgICAgIGVudW0gUEFSVElBTExZX0ZBSUxFRCA7CiAgICAgICAgZW51bSBDQU5DRUxMRUQgOwogICAgICB9CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVmYXVsdCAgUlVOTklORzsKICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgdGhlIHN0YXR1cyBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzLCAKICAgICAgICB3aGV0aGVyIGl0IGZhaWxzLCBzdWNjZWVkcyBldGMuIAogICAgICAgIEl0IGRvZXMgbm90IHJlcHJlc2VudCB0aGUgcmV0dXJuZWQgdmFsdWVzIG9mIGEgc3VjY2Vzc2Z1bGx5IGZpbmlzaGVkIAogICAgICAgIHByb2Nlc3MuICI7CiAgICB9CgogICAgbGVhZiBwcm9ncmVzc1BlcmNlbnRhZ2UgewogICAgICB0eXBlIHVpbnQ4IHsKICAgICAgICByYW5nZSAwLi4xMDA7CiAgICAgIH0KICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiUHJvZ3Jlc3Mgb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBhcyBwZXJjZW50YWdlIjsKICAgIH0KCiAgICBsZWFmLWxpc3QgcHJvZ3Jlc3NTdGF0ZUluZm8gewogICAgICB0eXBlIHN0cmluZzsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiQWRkaXRpb25hbCB0ZXh0dWFsIHF1YWxpZmljYXRpb24gb2YgdGhlIHN0YXRlcyAKICAgICAgICAnTk9UX1NUQVJURUQnLCAnQ0FOQ0VMTElORycgYW5kICdSVU5OSU5HJy4KCiAgICAgICAgRm9yIHNwZWNpZmljIHByb2Nlc3Nlcywgc3BlY2lmaWMgd2VsbC1kZWZpbmVkIHN0cmluZ3MgKGUuZy4gc3RyaW5nIAogICAgICAgIHBhdHRlcm5zIG9yIGVudW1zKSBtYXkgYmUgZGVmaW5lZCBhcyBhIHNwZWNpYWxpc2F0aW9uLiI7CiAgICB9CgogICAgbGVhZiByZXN1bHRTdGF0ZUluZm8gewogICAgICB0eXBlIHN0cmluZzsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiQWRkaXRpb25hbCB0ZXh0dWFsIHF1YWxpZmljYXRpb24gb2YgdGhlIHN0YXRlcyAKICAgICAgICAnRklOSVNIRUQnLCAnRkFJTEVEJywgJ1BBUlRJQUxMWV9GQUlMRUQgYW5kICdDQU5DRUxMRUQnLiAKICAgICAgICBGb3IgZXhhbXBsZSwgaW4gdGhlICdGQUlMRUQnIG9yICdQQVJUSUFMTFlfRkFJTEVEJyBzdGF0ZSB0aGlzIAogICAgICAgIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBwcm92aWRlIGVycm9yIHJlYXNvbnMuCgogICAgICAgIFRoaXMgYXR0cmlidXRlIHNoYWxsIG5vdCBiZSB1c2VkIHRvIG1ha2UgdGhlIG91dGNvbWUgb2YgdGhlIHByb2Nlc3MgCiAgICAgICAgYXZhaWxhYmxlIGZvciByZXRyaWV2YWwsIGlmIGFueS4gRm9yIHRoaXMgcHVycG9zZSwgZGVkaWNhdGVkIAogICAgICAgIGF0dHJpYnV0ZXMgc2hhbGwgYmUgc3BlY2lmaWVkIHdoZW4gc3BlY2lmeWluZyB0aGUgcmVwcmVzZW50YXRpb24gb2YgCiAgICAgICAgYSBzcGVjaWZpYyBwcm9jZXNzLgoKICAgICAgICBGb3Igc3BlY2lmaWMgcHJvY2Vzc2VzLCBzcGVjaWZpYyB3ZWxsLWRlZmluZWQgc3RyaW5ncyAoZS5nLiBzdHJpbmcgCiAgICAgICAgcGF0dGVybnMgb3IgZW51bXMpIG1heSBiZSBkZWZpbmVkIGFzIGEgc3BlY2lhbGlzYXRpb24uIjsKICAgIH0KCiAgICBsZWFmIHN0YXJ0VGltZSB7CiAgICAgIHR5cGUgeWFuZzpkYXRlLWFuZC10aW1lOwogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlc2NyaXB0aW9uICJTdGFydCB0aW1lIG9mIHRoZSBhc3NvY2lhdGVkIHByb2Nlc3MsIGkuZS4gdGhlIHRpbWUgd2hlbiB0aGUgCiAgICAgICAgc3RhdHVzIGNoYW5nZWQgZnJvbSAnTk9UX1NUQVJURUQnIHRvICdSVU5OSU5HJy4iOwogICAgfQoKICAgIGxlYWYgZW5kVGltZSB7CiAgICAgIHR5cGUgeWFuZzpkYXRlLWFuZC10aW1lOwogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlc2NyaXB0aW9uICJEYXRlIGFuZCB0aW1lIHdoZW4gc3RhdHVzIGNoYW5nZWQgdG8gJ1NVQ0NFU1MnLCAnQ0FOQ0VMTEVEJywgCiAgICAgICAgJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLiAKCiAgICAgICAgSWYgdGhlIHRpbWUgaXMgaW4gdGhlIGZ1dHVyZSwgaXQgaXMgdGhlIGVzdGltYXRlZCB0aW1lIAogICAgICAgIHRoZSBwcm9jZXNzIHdpbGwgZW5kLiI7CiAgICB9CgogICAgbGVhZiB0aW1lciB7CiAgICAgIHR5cGUgdWludDMyOwogICAgICB1bml0cyBtaW51dGVzOwogICAgICBkZXNjcmlwdGlvbiAiVGltZSB1bnRpbCB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzIGlzIGF1dG9tYXRpY2FsbHkgY2FuY2VsbGVkLgogICAgICAgIElmIHNldCwgdGhlIHN5c3RlbSBkZWNyZWFzZXMgdGhlIHRpbWVyIHdpdGggdGltZS4gV2hlbiBpdCByZWFjaGVzIHplcm8gCiAgICAgICAgdGhlIGNhbmNlbGxhdGlvbiBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzIGlzIGluaXRpYXRlZCBieSB0aGUgCiAgICAgICAgTW5TX1Byb2R1Y2VyLiAKICAgICAgICBJZiBub3Qgc2V0LCB0aGVyZSBpcyBubyB0aW1lIGxpbWl0IGZvciB0aGUgcHJvY2Vzcy4KICAgICAgICAKICAgICAgICBPbmNlIHRoZSB0aW1lciBpcyBzZXQsIHRoZSBjb25zdW1lciBjYW4gbm90IGNoYW5nZSBpdCBhbnltb3JlLiAKICAgICAgICBJZiB0aGUgY29uc3VtZXIgaGFzIG5vdCBzZXQgdGhlIHRpbWVyIHRoZSBNblMgUHJvZHVjZXIgbWF5IHNldCBpdC4iOwogICAgICB5ZXh0M2dwcDpub3ROb3RpZnlhYmxlOwogICAgfQogIH0KICAKICB0eXBlZGVmIFRlbnRoT2ZEZWdyZWVzIHsgCiAgICB0eXBlIHVpbnQxNiB7IAogICAgICByYW5nZSAwLi4zNjAwOyAKICAgIH0KICAgIHVuaXRzICIwLjEgZGVncmVlcyI7CiAgICBkZXNjcmlwdGlvbiAiQSBzaW5nbGUgaW50ZWdyYWwgdmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBhbmdsZSBpbiBkZWdyZWVzIAogICAgICBiZXR3ZWVuIDAgYW5kIDM2MCB3aXRoIGEgcmVzb2x1dGlvbiBvZiAwLjEgZGVncmVlcy4iOwogIH0KCiAgdHlwZWRlZiBMYXRpdHVkZSB7CiAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgIGZyYWN0aW9uLWRpZ2l0cyA0OwogICAgICByYW5nZSAiLTkwLjAwMDAuLis5MC4wMDAwIjsgCiAgICB9CiAgICBkZXNjcmlwdGlvbiAiTGF0aXR1ZGUgdmFsdWVzIjsKICB9CgogIHR5cGVkZWYgTG9uZ2l0dWRlIHsKICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgZnJhY3Rpb24tZGlnaXRzIDQ7CiAgICAgIHJhbmdlICItMTgwLjAwMDAuLisxODAuMDAwMCI7IAogICAgfQogICAgZGVzY3JpcHRpb24gIkxvbmdpdHVkZSB2YWx1ZXMiOwogIH0KCiAgdHlwZWRlZiBBbHRpdHVkZSAgewogICAgdHlwZSBkZWNpbWFsNjQgewogICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgIH0KICAgIHVuaXRzICJtZXRlcnMiOwogICAgZGVzY3JpcHRpb24KICAgICAgIkhlaWdodCBmcm9tIGEgcmVmZXJlbmNlIDAgdmFsdWUuIjsgIAogIH0KCiAgZ3JvdXBpbmcgR2VvZ3JhcGhpY2FsQ29vcmRpbmF0ZXMgewogICAgZGVzY3JpcHRpb24gIlRoaXMgZGF0YXR5cGUgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIjsKICAgIHJlZmVyZW5jZSAiI0dQUCBUUyAyOC41NTggY2xhdXNlIDYuMy44IjsKICAgIAogICAgbGVhZiBsYXRpdHVkZSB7CiAgICAgIHR5cGUgTGF0aXR1ZGU7CiAgICAgIG1hbmRhdG9yeSB0cnVlOyAKICAgIH0KICAgICAgCiAgICBsZWFmIGxvbmdpdHVkZSB7CiAgICAgIHR5cGUgTG9uZ2l0dWRlOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsgCiAgICB9CiAgICAKICAgIGxlYWYgYWx0aXR1ZGUgewogICAgICB0eXBlIEFsdGl0dWRlOwogICAgfQogICAgCiAgfQoKICB0eXBlZGVmIE9uT2ZmIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIE9OOwogICAgICBlbnVtIE9GRjsKICAgIH0KICB9CiAgCiAgLy8gZ3JvdXBpbmcgTWFuYWdlZE5GUHJvZmlsZSB3aWxsIGJlIHJlbW92ZWQgYXMgaXQgaXMgCiAgLy8gIGJlaW5nIG1vdmVkIHRvIF8zZ3BwLTVnYy1ucm0tbmZwcm9maWxlCiAgZ3JvdXBpbmcgTWFuYWdlZE5GUHJvZmlsZSB7CiAgICBkZXNjcmlwdGlvbiAiRGVmaW5lcyBwcm9maWxlIGZvciBtYW5hZ2VkIE5GIjsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyMy41MDEiOwogICAgCiAgICBsZWFmIGlkeCB7IHR5cGUgdWludDMyIDsgfQogICAgCiAgICBsZWFmIG5mSW5zdGFuY2VJRCB7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgeWFuZzp1dWlkIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgcHJvZmlsZSBmb3IgbWFuYWdlZCBORi4gCiAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgTkYgSW5zdGFuY2UgSUQgc2hhbGwgYmUgYSAKICAgICAgICBVbml2ZXJzYWxseSBVbmlxdWUgSWRlbnRpZmllciAoVVVJRCkgdmVyc2lvbiA0LCAKICAgICAgICBhcyBkZXNjcmliZWQgaW4gSUVURiBSRkMgNDEyMiAiIDsKICAgICAgeWV4dDNncHA6aW5WYXJpYW50OwogICAgfQogICAgCiAgICBsZWFmLWxpc3QgbmZUeXBlIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgdHlwZSBOZlR5cGU7CiAgICAgIGRlc2NyaXB0aW9uICJUeXBlIG9mIHRoZSBOZXR3b3JrIEZ1bmN0aW9uIiA7CiAgICB9CiAgICAKICAgIGxlYWYgaG9zdEFkZHIgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBpbmV0Omhvc3QgOwogICAgICBkZXNjcmlwdGlvbiAiSG9zdCBhZGRyZXNzIG9mIGEgTkYiOwogICAgfQogICAgCiAgICBsZWFmIGF1dGh6SW5mbyB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgTkYgU3BlY2lmaWMgU2VydmljZSBhdXRob3JpemF0aW9uIAogICAgICAgIGluZm9ybWF0aW9uLiBJdCBzaGFsbCBpbmNsdWRlIHRoZSBORiB0eXBlIChzKSBhbmQgTkYgcmVhbG1zL29yaWdpbnMgCiAgICAgICAgYWxsb3dlZCB0byBjb25zdW1lIE5GIFNlcnZpY2Uocykgb2YgTkYgU2VydmljZSBQcm9kdWNlci4iOwogICAgICByZWZlcmVuY2UgIlNlZSBUUyAyMy41MDEiIDsKICAgIH0KICAgIAogICAgbGVhZiBsb2NhdGlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIkluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgTkYgaW5zdGFuY2UgCiAgICAgICAgKGUuZy4gZ2VvZ3JhcGhpYyBsb2NhdGlvbiwgZGF0YSBjZW50ZXIpIGRlZmluZWQgYnkgb3BlcmF0b3IiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmIGNhcGFjaXR5IHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgdWludDE2IDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgc3RhdGljIGNhcGFjaXR5IGluZm9ybWF0aW9uIAogICAgICAgIGluIHRoZSByYW5nZSBvZiAwLTY1NTM1LCBleHByZXNzZWQgYXMgYSB3ZWlnaHQgcmVsYXRpdmUgdG8gb3RoZXIgCiAgICAgICAgTkYgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHR5cGU7IGlmIGNhcGFjaXR5IGlzIGFsc28gcHJlc2VudCBpbiB0aGUgCiAgICAgICAgbmZTZXJ2aWNlTGlzdCBwYXJhbWV0ZXJzLCB0aG9zZSB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KICAgICAgCiAgICBsZWFmIG5GU3J2R3JvdXBJZCB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgaWRlbnRpdHkgb2YgdGhlIGdyb3VwIHRoYXQgaXMgCiAgICAgICAgc2VydmVkIGJ5IHRoZSBORiBpbnN0YW5jZS4KICAgICAgICBNYXkgYmUgY29uZmlnIGZhbHNlIG9yIHRydWUgZGVwZW5kaW5nIG9uIHRoZSBNYW5hZ2VkRnVuY3Rpb24uIAogICAgICAgIENvbmZpZz10cnVlIGZvciBVZHJpbmZvLiBDb25maWc9ZmFsc2UgZm9yIFVkbUluZm8gYW5kIEF1c2ZJbmZvLiAKICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVETSBvciBBVVNGIG9yIFVEUi4gIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KICAgIAogICAgbGVhZi1saXN0IHN1cHBvcnRlZERhdGFTZXRJZHMgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIFNVQlNDUklQVElPTjsKICAgICAgICBlbnVtIFBPTElDWTsKICAgICAgICBlbnVtIEVYUE9TVVJFOwogICAgICAgIGVudW0gQVBQTElDQVRJT047CiAgICAgIH0KICAgICAgZGVzY3JpcHRpb24gIkxpc3Qgb2Ygc3VwcG9ydGVkIGRhdGEgc2V0cyBpbiB0aGUgVURSIGluc3RhbmNlLiAKICAgICAgICBNYXkgYmUgcHJlc2VudCBpZiAuLi9uZlR5cGUgPSBVRFIiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmLWxpc3Qgc21mU2VydmluZ0FyZWFzIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiRGVmaW5lcyB0aGUgU01GIHNlcnZpY2UgYXJlYShzKSB0aGUgVVBGIGNhbiBzZXJ2ZS4gCiAgICAgICAgU2hhbGwgYmUgcHJlc2VudCBpZiAuLi9uZlR5cGUgPSBVUEYiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmIHByaW9yaXR5IHsKICAgICAgdHlwZSB1aW50MTY7CiAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHBhcmFtZXRlciBkZWZpbmVzIFByaW9yaXR5IChyZWxhdGl2ZSB0byBvdGhlciBORnMgCiAgICAgICAgb2YgdGhlIHNhbWUgdHlwZSkgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIHRvIGJlIHVzZWQgZm9yIE5GIHNlbGVjdGlvbjsgCiAgICAgICAgbG93ZXIgdmFsdWVzIGluZGljYXRlIGEgaGlnaGVyIHByaW9yaXR5LiBJZiBwcmlvcml0eSBpcyBhbHNvIHByZXNlbnQgCiAgICAgICAgaW4gdGhlIG5mU2VydmljZUxpc3QgcGFyYW1ldGVycywgdGhvc2Ugd2lsbCBoYXZlIHByZWNlZGVuY2Ugb3ZlciAKICAgICAgICB0aGlzIHZhbHVlLiBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IEFNRiAiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogIH0KICAKICB0eXBlZGVmIHVzYWdlU3RhdGUgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gSURMRTsKICAgICAgZW51bSBBQ1RJVkU7CiAgICAgIGVudW0gQlVTWTsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJJdCBkZXNjcmliZXMgd2hldGhlciBvciBub3QgdGhlIHJlc291cmNlIGlzIGFjdGl2ZWx5IGluIAogICAgICB1c2UgYXQgYSBzcGVjaWZpYyBpbnN0YW50LCBhbmQgaWYgc28sIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBzcGFyZSAKICAgICAgY2FwYWNpdHkgZm9yIGFkZGl0aW9uYWwgdXNlcnMgYXQgdGhhdCBpbnN0YW50LiBUaGUgdmFsdWUgaXMgUkVBRC1PTkxZLiI7CiAgICByZWZlcmVuY2UgIklUVSBUIFJlY29tbWVuZGF0aW9uIFguNzMxIjsKICB9CiAgCiAgZ3JvdXBpbmcgU0FQR3JwIHsKICAgIGxlYWYgaG9zdCB7CiAgICAgIHR5cGUgaW5ldDpob3N0OwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgIH0KICAgIGxlYWYgcG9ydCB7CiAgICAgIHR5cGUgaW5ldDpwb3J0LW51bWJlcjsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiU2VydmljZSBhY2Nlc3MgcG9pbnQuIjsKICAgIHJlZmVyZW5jZSAiVFMgMjguNjIyIjsKICB9CiAgCiAgdHlwZWRlZiBNY2MgewogICAgZGVzY3JpcHRpb24gIlRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGNvbnNpc3RzIG9mIHRocmVlIGRlY2ltYWwgZGlnaXRzLCAKICAgICAgVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGlkZW50aWZpZXMgdGhlIGdlb2dyYXBoaWMgCiAgICAgIHJlZ2lvbiAodGhlIGRpZ2l0cyAxIGFuZCA4IGFyZSBub3QgdXNlZCk6IjsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnWzAyLTc5XVswLTldWzAtOV0nOwogICAgfQogICAgcmVmZXJlbmNlICIzR1BQIFRTIDIzLjAwMyBzdWJjbGF1c2UgMi4yIGFuZCAxMi4xIjsKICB9CgogIHR5cGVkZWYgTW5jIHsKICAgIGRlc2NyaXB0aW9uICJUaGUgbW9iaWxlIG5ldHdvcmsgY29kZSBjb25zaXN0cyBvZiB0d28gb3IgdGhyZWUgCiAgICAgIGRlY2ltYWwgZGlnaXRzIChmb3IgZXhhbXBsZTogTU5DIG9mIDAwMSBpcyBub3QgdGhlIHNhbWUgYXMgTU5DIG9mIDAxKSI7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJ1swLTldWzAtOV1bMC05XXxbMC05XVswLTldJzsKICAgIH0KICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyMy4wMDMgc3ViY2xhdXNlIDIuMiBhbmQgMTIuMSI7CiAgfQoKICBncm91cGluZyBQTE1OSWQgewogICAgbGVhZiBtY2MgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBNY2M7CiAgICB9CiAgICBsZWFmIG1uYyB7CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICB0eXBlIE1uYzsKICAgIH0KICAgIHJlZmVyZW5jZSAiVFMgMzguNDEzIGNsYXVzZSA5LjMuMy41IjsKICB9CiAgCiAgdHlwZWRlZiBOY2kgewogICAgZGVzY3JpcHRpb24gIk5SIENlbGwgSWRlbnRpdHkuIFRoZSBOQ0kgc2hhbGwgYmUgb2YgZml4ZWQgbGVuZ3RoIG9mIDM2IGJpdHMgCiAgICAgIGFuZCBzaGFsbCBiZSBjb2RlZCB1c2luZyBmdWxsIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLiAKICAgICAgVGhlIGV4YWN0IGNvZGluZyBvZiB0aGUgTkNJIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBlYWNoIFBMTU4gb3BlcmF0b3IiOwogICAgcmVmZXJlbmNlICJUUyAyMy4wMDMiOwogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggMzY7CiAgICAgICAgcGF0dGVybiAnWzAxXSsnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggOTsKICAgICAgICBwYXR0ZXJuICdbYS1mQS1GMC05XSonOwogICAgICB9CiAgICB9CiAgfQogICAgCiAgdHlwZWRlZiBPcGVyYXRpb25hbFN0YXRlIHsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyOC42MjUgYW5kIElUVS1UIFguNzMxIjsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIERJU0FCTEVEIHsKICAgICAgICB2YWx1ZSAwOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgdG90YWxseSBpbm9wZXJhYmxlLiI7CiAgICAgIH0KCiAgICAgIGVudW0gRU5BQkxFRCB7CiAgICAgICAgdmFsdWUgMTsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIHJlc291cmNlIGlzIHBhcnRpYWxseSBvciBmdWxseSBvcGVyYWJsZS4iOwogICAgICB9CgogICAgfQogIH0KICAKICB0eXBlZGVmIEJhc2ljQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgdHlwZWRlZiBBZG1pbmlzdHJhdGl2ZVN0YXRlIHsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyOC42MjUgYW5kIElUVS1UIFguNzMxIjsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIExPQ0tFRCB7CiAgICAgICAgdmFsdWUgMDsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIHJlc291cmNlIGlzIGFkbWluaXN0cmF0aXZlbHkgcHJvaGliaXRlZCBmcm9tIHBlcmZvcm1pbmcKICAgICAgICAgICAgICAgICBzZXJ2aWNlcyBmb3IgaXRzIHVzZXJzLiI7CiAgICAgIH0KCiAgICAgIGVudW0gVU5MT0NLRUQgewogICAgICAgIHZhbHVlIDE7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHBlcm1pdHRlZCB0byBwZXJmb3JtCiAgICAgICAgICBzZXJ2aWNlcyBmb3IgaXRzIHVzZXJzLiBUaGlzIGlzIGluZGVwZW5kZW50IG9mIGl0cyBpbmhlcmVudAogICAgICAgICAgb3BlcmFiaWxpdHkuIjsKICAgICAgfQoKICAgICAgZW51bSBTSFVUVElOR0RPV04gewogICAgICAgIHZhbHVlIDI7CiAgICAgICAgZGVzY3JpcHRpb24gIlVzZSBvZiB0aGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8KICAgICAgICAgIGV4aXN0aW5nIGluc3RhbmNlcyBvZiB1c2Ugb25seS4gV2hpbGUgdGhlIHN5c3RlbSByZW1haW5zIGluCiAgICAgICAgICB0aGUgc2h1dHRpbmcgZG93biBzdGF0ZSB0aGUgbWFuYWdlciBvciB0aGUgbWFuYWdlZCBlbGVtZW50IAogICAgICAgICAgbWF5IGF0IGFueSB0aW1lIGNhdXNlIHRoZSByZXNvdXJjZSB0byB0cmFuc2l0aW9uIHRvIHRoZSAKICAgICAgICAgIGxvY2tlZCBzdGF0ZS4iOwogICAgICB9CiAgICB9CiAgfQogIAogIHR5cGVkZWYgQXZhaWxhYmlsaXR5U3RhdHVzIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICBlbnVtIElOX1RFU1Q7CiAgICAgICAgICBlbnVtIEZBSUxFRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVudW0gUE9XRVJfT0ZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBPRkZfTElORTsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVudW0gT0ZGX0RVVFk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBlbnVtIERFUEVOREVOQ1k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBlbnVtIERFR1JBREVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBOT1RfSU5TVEFMTEVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBMT0dfRlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgIH0KICB9CiAgCiAgdHlwZWRlZiBDZWxsU3RhdGUgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIElETEU7CiAgICAgICAgZW51bSBJTkFDVElWRTsgICAgICAgICAgICAgIAogICAgICAgIGVudW0gQUNUSVZFOyAgICAgICAgICAgICAgCiAgICAgfQogIH0KCiAgdHlwZWRlZiBOcnBjaSB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBDZWxsIElkZW50aXR5IChQQ0kpIG9mIHRoZSBOUiBjZWxsLiI7CiAgICByZWZlcmVuY2UgIlRTIDM2LjIxMSBzdWJjbGF1c2UgNi4xMSI7CiAgfQoKICB0eXBlZGVmIFRhYyB7CiAgICB0eXBlIGludDMyIHsKICAgICAgcmFuZ2UgMC4uMTY3NzcyMTUgOwogICAgfQogICAgZGVzY3JpcHRpb24gIlRyYWNraW5nIEFyZWEgQ29kZSI7CiAgICByZWZlcmVuY2UgIlRTIDIzLjAwMyBjbGF1c2UgMTkuNC4yLjMiOwogIH0KCiAgZ3JvdXBpbmcgVGFpR3JwIHsKICAgIGRlc2NyaXB0aW9uICJUaGlzIDw8ZGF0YVR5cGU+PiBkZWZpbmVzIGEgVHJhY2tpbmcgQXJlYSBJZGVudGl0eSAoVEFJKSAKICAgICAgYXMgc3BlY2lmaWVkIGluIGNsYXVzZSAyOC42IG9mIFRTIDIzLjAwMywgY2xhdXNlIDguMiBvZiBUUyAzOC4zMDAgCiAgICAgIGFuZCBjbGF1c2UgOS4zLjMuMTEgb2YgVFMgMzguNDEzLiBJdCBpcyBjb21wb3NlZCBvZiB0aGUgUExNTiAKICAgICAgaWRlbnRpZmllciAoUExNTi1JZCwgd2hpY2ggaXMgY29tcG9zZWQgb2YgdGhlIE1DQyBhbmQgTU5DKSBhbmQgCiAgICAgIHRoZSBUcmFja2luZyBBcmVhIENvZGUgKFRBQykuICI7CiAgICBsaXN0IHBsbW5JZCB7CiAgICAgIGRlc2NyaXB0aW9uICJQTE1OIElkZW50aXR5LiI7CiAgICAgIG1pbi1lbGVtZW50cyAxOwogICAgICBtYXgtZWxlbWVudHMgMTsKICAgICAga2V5ICJtY2MgbW5jIjsKICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgfQogICAgCiAgICBsZWFmIHRhYyB7IHR5cGUgVGFjOyB9CiAgfQogICAgICAgCiAgZ3JvdXBpbmcgR2VvQ29vcmRpbmF0ZUdycCB7CiAgICBkZXNjcmlwdGlvbiAiR2VvZ3JhcGhpY2FsIGxvY2F0aW9uIG9uIGVhcnRoIjsgCiAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA0OwogICAgICAgIHJhbmdlIC05MC4uOTAgOwogICAgICB9CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICBkZXNjcmlwdGlvbiAiTGF0aXR1ZGUgYmFzZWQgb24gV29ybGQgR2VvZGV0aWMgU3lzdGVtICgxOTg0IHZlcnNpb24pIAogICAgICAgIGdsb2JhbCByZWZlcmVuY2UgZnJhbWUgKFdHUyA4NCkuIFBvc2l0aXZlIHZhbHVlcyBjb3JyZXNwb25kIHRvIHRoZSAKICAgICAgICBub3J0aGVybiBoZW1pc3BoZXJlLiI7CiAgICAgIH0KICAgICAgICAKICAgIGxlYWYgbG9uZ2l0dWRlIHsKICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA0OwogICAgICAgIHJhbmdlIC0xODAuLjE4MCA7CiAgICAgIH0KICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIGRlc2NyaXB0aW9uICJMb25naXR1ZGUgYmFzZWQgb24gV29ybGQgR2VvZGV0aWMgU3lzdGVtICgxOTg0IHZlcnNpb24pIAogICAgICAgIGdsb2JhbCByZWZlcmVuY2UgZnJhbWUgKFdHUyA4NCkuIFBvc2l0aXZlIHZhbHVlcyBjb3JyZXNwb25kIHRvIAogICAgICAgIGRlZ3JlZXMgZWFzdCBvZiAwIGRlZ3JlZXMgbG9uZ2l0dWRlLiI7CiAgICB9CiAgfQogICAKICBncm91cGluZyBHZW9BcmVhR3JwIHsKICAgIGRlc2NyaXB0aW9uICJUaGlzIGRhdGEgdHlwZSBkZWZpbmVzIGEgZ2VvZ3JhcGhpY2FsIGFyZWEuIAogICAgICBUaGUgZ2VvLWFyZWEgaXMgZGVmaW5lZCB1c2luZyBhIGNvbnZleCBwb2x5Z29uIGluIHRoZSBhdHRyaWJ1dGUgCiAgICAgICdjb252ZXhHZW9Qb2x5Z29uJy4iOwogICAgCiAgICBsaXN0IGNvbnZleEdlb1BvbHlnb24gewogICAgICBkZXNjcmlwdGlvbiAiU3BlY2lmaWVzIHRoZSBnZW9ncmFwaGljYWwgYXJlYSB3aXRoIGEgY29udmV4IHBvbHlnb24uIAogICAgICAgIFRoZSBjb252ZXggcG9seWdvbiBpcyBzcGVjaWZpZWQgYnkgaXRzIGNvcm5lcnMuIjsKICAgICAgICBrZXkgImxhdGl0dWRlIGxvbmdpdHVkZSI7CiAgICAgIG1pbi1lbGVtZW50cyAzOwogICAgICBvcmRlcmVkLWJ5IHVzZXI7CiAgICAgIAogICAgICB1c2VzIEdlb0Nvb3JkaW5hdGVHcnA7CiAgICB9CiAgfQogIAogIHR5cGVkZWYgQW1mUmVnaW9uSWQgewogICAgdHlwZSB1bmlvbiB7IAogICAgICB0eXBlIHVpbnQ4IDsKICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA4OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CgogIHR5cGVkZWYgQW1mU2V0SWQgewogICAgdHlwZSB1bmlvbiB7IAogICAgICB0eXBlIHVpbnQxNiB7CiAgICAgICAgcmFuZ2UgJzAuLjEwMjMnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggODsKICAgICAgICBwYXR0ZXJuICdbMDFdKic7CiAgICAgIH0KICAgIH0KICAgIHJlZmVyZW5jZSAiY2xhdXNlIDIuMTAuMSBvZiAzR1BQIFRTIDIzLjAwMyI7CiAgfQoKICB0eXBlZGVmIEFtZlBvaW50ZXIgewogICAgdHlwZSB1bmlvbiB7IAogICAgICB0eXBlIHVpbnQ4IHsKICAgICAgICByYW5nZSAnMC4uNjMnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggNjsKICAgICAgICBwYXR0ZXJuICdbMDFdKic7CiAgICAgIH0KICAgIH0KICAgIHJlZmVyZW5jZSAiY2xhdXNlIDIuMTAuMSBvZiAzR1BQIFRTIDIzLjAwMyI7CiAgfQogICAgICAgIAogIGdyb3VwaW5nIEFtZklkZW50aWZpZXIgeyAgICAgICAgCiAgICBsZWFmIGFtZlJlZ2lvbklkIHsKICAgICAgdHlwZSBBbWZSZWdpb25JZDsKICAgIH0KICAgIGxlYWYgYW1mU2V0SWQgewogICAgICB0eXBlIEFtZlNldElkOwogICAgfQogICAgbGVhZiBhbWZQb2ludGVyIHsKICAgICAgdHlwZSBBbWZQb2ludGVyOwogICAgfSAKICAgIGRlc2NyaXB0aW9uICJUaGUgQU1GSSBpcyBjb25zdHJ1Y3RlZCBmcm9tIGFuIEFNRiBSZWdpb24gSUQsIAogICAgICBhbiBBTUYgU2V0IElEIGFuZCBhbiBBTUYgUG9pbnRlci4gCiAgICAgIFRoZSBBTUYgUmVnaW9uIElEIGlkZW50aWZpZXMgdGhlIHJlZ2lvbiwgCiAgICAgIHRoZSBBTUYgU2V0IElEIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiBTZXQgd2l0aGluIHRoZSBBTUYgUmVnaW9uLCBhbmQgCiAgICAgIHRoZSBBTUYgUG9pbnRlciB1bmlxdWVseSBpZGVudGlmaWVzIHRoZSBBTUYgd2l0aGluIHRoZSBBTUYgU2V0LiAiOyAKICB9ICAgIAoKLy8gdHlwZSBkZWZpbml0aW9ucyBlc3BlY2lhbGx5IGZvciBjb3JlIE5GcwoKICB0eXBlZGVmIE5mVHlwZSB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBOUkY7CiAgICAgIGVudW0gVURNOwogICAgICBlbnVtIEFNRjsKICAgICAgZW51bSBTTUY7CiAgICAgIGVudW0gQVVTRjsKICAgICAgZW51bSBORUY7CiAgICAgIGVudW0gUENGOwogICAgICBlbnVtIFNNU0Y7CiAgICAgIGVudW0gTlNTRjsKICAgICAgZW51bSBVRFI7CiAgICAgIGVudW0gTE1GOwogICAgICBlbnVtIEdNTEM7CiAgICAgIGVudW0gNUdfRUlSOwogICAgICBlbnVtIFNFUFA7CiAgICAgIGVudW0gVVBGOwogICAgICBlbnVtIE4zSVdGOwogICAgICBlbnVtIEFGOwogICAgICBlbnVtIFVEU0Y7CiAgICAgIGVudW0gQlNGOwogICAgICBlbnVtIENIRjsKICAgIH0gICAgICAgICAgCiAgfQogIAogIHR5cGVkZWYgTm90aWZpY2F0aW9uVHlwZSB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBOMV9NRVNTQUdFUzsKICAgICAgZW51bSBOMl9JTkZPUk1BVElPTjsKICAgICAgZW51bSBMT0NBVElPTl9OT1RJRklDQVRJT047CiAgICB9ICAgICAgCiAgfQogIAogIHR5cGVkZWYgTG9hZCB7CiAgICBkZXNjcmlwdGlvbiAiTGF0ZXN0IGtub3duIGxvYWQgaW5mb3JtYXRpb24gb2YgdGhlIE5GLCBwZXJjZW50YWdlICI7CiAgICB0eXBlIHVpbnQ4IHsKICAgICAgcmFuZ2UgMC4uMTAwOwogICAgfQogIH0KCiAgdHlwZWRlZiBOMU1lc3NhZ2VDbGFzcyB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSA1R01NOwogICAgICBlbnVtIFNNOwogICAgICBlbnVtIExQUDsKICAgICAgZW51bSBTTVM7IAogICAgfSAgICAgIAogIH0KICAKICB0eXBlZGVmIE4ySW5mb3JtYXRpb25DbGFzcyB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBTTTsKICAgICAgZW51bSBOUlBQQTsKICAgICAgZW51bSBQV1M7CiAgICAgIGVudW0gUFdTX0JDQUw7CiAgICAgIGVudW0gUFdTX1JGOwogICAgfSAgICAgICAgICAgICAgCiAgfQogIAogIGdyb3VwaW5nIERlZmF1bHROb3RpZmljYXRpb25TdWJzY3JpcHRpb24gewogICAgCiAgICBsZWFmIG5vdGlmaWNhdGlvblR5cGUgewogICAgICB0eXBlIE5vdGlmaWNhdGlvblR5cGU7CiAgICB9CiAgICAKICAgIGxlYWYgY2FsbGJhY2tVcmkgewogICAgICB0eXBlIGluZXQ6dXJpOwogICAgfQogICAgCiAgICBsZWFmIG4xTWVzc2FnZUNsYXNzIHsKICAgICAgdHlwZSBOMU1lc3NhZ2VDbGFzczsKICAgIH0KICAgIAogICAgbGVhZiBuMkluZm9ybWF0aW9uQ2xhc3MgewogICAgICB0eXBlIE4ySW5mb3JtYXRpb25DbGFzczsKICAgIH0gICAgCiAgfSAgCiAgICAgICAgCiAgZ3JvdXBpbmcgSXB2NEFkZHJlc3NSYW5nZSB7CiAgbGVhZiBzdGFydCB7CiAgICB0eXBlIGluZXQ6aXB2NC1hZGRyZXNzOwogICAgfQogIGxlYWYgZW5kIHsKICAgIHR5cGUgaW5ldDppcHY0LWFkZHJlc3M7CiAgICB9ICAgIAogIH0KICAgIAogIGdyb3VwaW5nIElwdjZQcmVmaXhSYW5nZSB7CiAgbGVhZiBzdGFydCB7CiAgICB0eXBlIGluZXQ6aXB2Ni1wcmVmaXg7CiAgICB9CiAgbGVhZiBlbmQgewogICAgdHlwZSBpbmV0OmlwdjYtcHJlZml4OwogICAgfSAgICAKICB9CiAgICAgCiAgdHlwZWRlZiBOc2lJZCB7CiAgICB0eXBlIHN0cmluZzsKICB9CiAgICAKICB0eXBlZGVmIFVlTW9iaWxpdHlMZXZlbCB7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBTVEFUSU9OQVJZOwogICAgICBlbnVtIE5PTUFESUM7CiAgICAgIGVudW0gUkVTVFJJQ1RFRF9NT0JJTElUWTsKICAgICAgZW51bSBGVUxMWV9NT0JJTElUWTsKICAgIH0KICB9CiAgICAgIAogIHR5cGVkZWYgUmVzb3VyY2VTaGFyaW5nTGV2ZWwgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIFNIQVJFRDsKICAgICAgICBlbnVtIE5PVF9TSEFSRUQ7CiAgICAgIH0KICB9CiAgICAgIAogIHR5cGVkZWYgVHhEaXJlY3Rpb24gewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIERMOwogICAgICAgIGVudW0gVUw7CiAgICAgICAgZW51bSBETF9BTkRfVUw7CiAgICAgIH0KICB9CiAgICAgIAogIGdyb3VwaW5nIEFkZHJlc3NXaXRoVmxhbiB7CiAgICBsZWFmIGlwQWRkcmVzcyB7CiAgICAgIHR5cGUgaW5ldDppcC1hZGRyZXNzOyAgIAogICAgfQogICAgbGVhZiB2bGFuSWQgewogICAgICAgdHlwZSB1aW50MTY7CiAgICB9ICAKICB9CgogIC8qIERpc3Rpbmd1aXNoZWROYW1lIHBhdHRlcm4gaXMgYnVpbHQgdXAgYmFzZWQgb24gdGhlIAogICAgRUJORiBpbiAzMi4zMDAgY2xhdXNlIDcuMyAgRUJORiBvZiBETiBTdHJpbmcgUmVwcmVzZW50YXRpb24KICAKICAgIGxlYWYgRE4geyB0eXBlIHN0cmluZyB7ICAgLy8gIFNhbWUgcGF0dGVybiBhcyBMb2NhbEROCiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KCxbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykqJzsgICAgICAKICAgIH0gfQogIAogICAgbGVhZiBmdWxsTG9jYWxETiB7IHR5cGUgc3RyaW5nIHsgICAvLyBMb2NhbFJETiAsIHsgUkROU2VwYXJhdG9yICwgTG9jYWxSRE4gfSAgICBSRE5TZXBhcmF0b3IgaXMgYSBzaW5nbGUgLCBubyBzcGFjZSBvciBcUiBhbGxvd2VkICAgTWUubXlrZXk9MSBhbGxvd2VkCiAgICAgIC8vICAoZnVsbExvY2FsUkROKSgsKGZ1bGxMb2NhbFJETikpKgogICAgICBwYXR0ZXJuICcoKFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSp8KFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSpcLlthLXpdW14sPSs8PiM7XFwiXHJcbiouXSopKT0oKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KSkoLCgoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKikpPSgoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pKSkqJzsgICAgICAKICAgIH0gfQogIAogICAgbGVhZiBMb2NhbEROIHsgdHlwZSBzdHJpbmcgeyAgIC8vIExvY2FsUkROICwgeyBSRE5TZXBhcmF0b3IgLCBMb2NhbFJETiB9ICAgIFJETlNlcGFyYXRvciBpcyBhIHNpbmdsZSAsIG5vIHNwYWNlIG9yIFxSIGFsbG93ZWQKICAgICAgLy8gIExvY2FsUkROKCxMb2NhbFJETikqCiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KCxbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPykqJzsgICAgICAKICAgIH0gfQogIAogICAgbGVhZiBmdWxsTG9jYWxSRE4geyB0eXBlIHN0cmluZyB7ICAgLy8gc2FtZSBhcyBmdWxsTG9jYWxETkF0dHJpYnV0ZVR5cGVBbmRWYWx1ZQogICAgICBwYXR0ZXJuICcoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKikpPSgoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pJzsgICAgICAKICAgIH0gfQogIAogICAgbGVhZiBMb2NhbFJETiB7IHR5cGUgc3RyaW5nIHsgICAvLyBzYW1lIGFzIExvY2FsRE5BdHRyaWJ1dGVUeXBlQW5kVmFsdWUKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKj0oW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSooW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8nOyAgICAgIAogICAgfSB9CiAgCiAgICBsZWFmIGZ1bGxMb2NhbEROQXR0cmlidXRlVHlwZUFuZFZhbHVlIHsgdHlwZSBzdHJpbmcgeyAvLyBMb2NhbEROQXR0cmlidXRlVHlwZSAsIEF0dHJpYnV0ZVR5cGVBbmRWYWx1ZVNlcGFyYXRvciAsIFJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZSAKICAgICAgLy8gcGF0dGVybiBMb2NhbEROQXR0cmlidXRlVHlwZT1SZWd1bGFyQXR0cmlidXRlVmFsdWUKICAgICAgcGF0dGVybiAnKFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSp8KFtBLVpdW14sPSs8PiM7XFwiXHJcbiouXSpcLlthLXpdW14sPSs8PiM7XFwiXHJcbiouXSopKT0oKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/KSc7ICAgICAgCiAgICB9IH0KICAgIAogICAgICAvLyBsaW1pdGF0aW9uOiBOYW1lc09mQ2xhc3NBbmROYW1pbmdBdHRyaWJ1dGVub3Qgc3VwcG9ydGVkIE1lLm15a2V5PTEKICAgIGxlYWYgTG9jYWxETkF0dHJpYnV0ZVR5cGVBbmRWYWx1ZSB7IHR5cGUgc3RyaW5nIHsgCiAgICAgIC8vIGVibmYxICAgICAgICAgIExvY2FsRE5BdHRyaWJ1dGVUeXBlICwgQXR0cmlidXRlVHlwZUFuZFZhbHVlU2VwYXJhdG9yICwgUmVndWxhckF0dHJpYnV0ZVZhbHVlCiAgICAgIC8vIGVibmYyLWxpbWl0ZWQgIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlICwgQXR0cmlidXRlVHlwZUFuZFZhbHVlU2VwYXJhdG9yICwgUmVndWxhckF0dHJpYnV0ZVZhbHVlCiAgICAgIC8vIHBhdHRlcm4gICAgICAgIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlPVJlZ3VsYXJBdHRyaWJ1dGVWYWx1ZQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkoKFteLD0rPD4jO1xcIlxyXG4qXXwoXFxbYS1mQS1GMC05XXsyfSkpKihbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPyc7ICAgICAgCiAgICB9IH0KCiAgICBsZWFmIExvY2FsRE5BdHRyaWJ1dGVUeXBlIHsgdHlwZSBzdHJpbmcgeyAgIC8vIE5hbWVPZkNsYXNzV2l0aElkQXR0cmlidXRlIHwgTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlICBSRE5TZXBhcmF0b3IgaXMgYSBzaW5nbGUgLCBubyBzcGFjZSBvciBcUiBhbGxvd2VkCiAgICAgIC8vICBOYW1lT2ZDbGFzc1dpdGhJZEF0dHJpYnV0ZXxOYW1lc09mQ2xhc3NBbmROYW1pbmdBdHRyaWJ1dGUKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKnwoW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKiknOyAgICAgIAogICAgfSB9CgogICAgbGVhZiBSZWd1bGFyQXR0cmlidXRlVmFsdWUgeyB0eXBlIHN0cmluZyB7ICAgICAgIC8vICggQXR0cmlidXRlVmFsdWVDaGFyIC0gU3BhY2VDaGFyICkgLCBbIHsgQXR0cmlidXRlVmFsdWVDaGFyIH0gLCAoIEF0dHJpYnV0ZVZhbHVlQ2hhciAtIFNwYWNlQ2hhciApIF0KICAgICAgcGF0dGVybiAnKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSgoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqKFteLD0rPD4jO1xcIlxyXG4qIF18KFxcW2EtZkEtRjAtOV17Mn0pKSk/JyA7IAogICAgfSB9CiAgICAKICAgIGxlYWYgTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlICB7IHR5cGUgc3RyaW5nIHsgIC8vIENsYXNzTmFtZSAsIENsYXNzTmFtaW5nQXR0cmlidXRlU2VwYXJhdG9yICwgTmFtaW5nQXR0cmlidXRlTmFtZQogICAgICAvLyBwYXR0ZXJuOiBDbGFzc05hbWVcLk5hbWluZ0F0dHJpYnV0ZU5hbWUKICAgICAgcGF0dGVybiAnW0EtWl1bXiw9Kzw+IztcXCJcclxuKi5dKlwuW2Etel1bXiw9Kzw+IztcXCJcclxuKi5dKicgOyAKICAgIH0gfQogIAogICAgbGVhZiByZXN0cmljdGl2ZUNsYXNzTmFtZSB7IHR5cGUgc3RyaW5nIHsgICAgIC8vIAogICAgICBwYXR0ZXJuICdbYS16QS1aXVthLXpBLVowLTktX10qJyA7IAogICAgfSB9CiAgCiAgICBsZWFmIENsYXNzTmFtZSB7IHR5cGUgc3RyaW5nIHsgICAgIC8vIENhcGl0YWxMZXR0ZXJDaGFyICwgeyBMb2NhbEROQXR0cmlidXRlVHlwZUNoYXIgfQogICAgICBwYXR0ZXJuICdbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qJyA7IAogICAgfSB9CiAgCiAgICBsZWFmIE5hbWluZ0F0dHJpYnV0ZU5hbWUgeyB0eXBlIHN0cmluZyB7ICAgLy8gU21hbGxMZXR0ZXJDaGFyICwgeyBMb2NhbEROQXR0cmlidXRlVHlwZUNoYXIgfQogICAgICBwYXR0ZXJuICdbYS16XVteLD0rPD4jO1xcIlxyXG4qLl0qJyA7IAogICAgfSB9ICAgIAogICAgCiAgKi8KICB0eXBlZGVmIERpc3Rpbmd1aXNoZWROYW1lIHsgICAgCiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJ1tBLVpdW14sPSs8PiM7XFwiXHJcbiouXSo9KFteLD0rPD4jO1xcIlxyXG4qIF18JwogICAgICArICcoXFxbYS1mQS1GMC05XXsyfSkpKChbXiw9Kzw+IztcXCJcclxuKl18KFxcW2EtZkEtRjAtOV17Mn0pKSonCiAgICAgICsgJyhbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSkpPycKICAgICAgKyAnKCxbQS1aXVteLD0rPD4jO1xcIlxyXG4qLl0qPShbXiw9Kzw+IztcXCJcclxuKiBdfChcXFthLWZBLUYwLTldezJ9KSknCiAgICAgICsgJygoW14sPSs8PiM7XFwiXHJcbipdfChcXFthLWZBLUYwLTldezJ9KSkqJwogICAgICArICcoW14sPSs8PiM7XFwiXHJcbiogXXwoXFxbYS1mQS1GMC05XXsyfSkpKT8pKic7ICAgICAgCiAgICB9CiAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgM0dQUCBzdGFuZGFyZCBmb3IgRGlzdGluZ3Vpc2hlZE5hbWUuIAogICAgICAKICAgICAgTGltaXRhdGlvbnM6IAogICAgICAtIFJETlNlcGFyYXRvcjogZG9uJ3QgYWxsb3cgU3BhY2VDaGFyIG9yIENhcnJpYWdlUmV0dXJuQ2hhcgogICAgICAtIE51bGxETjogRGlzYWxsb3cgbnVsbEROIHRoYXQgaXMgdGhlIHNhbWUgYXMgbm90IHByb3ZpZGluZyBhIEROCiAgICAgIC0gTmFtZXNPZkNsYXNzQW5kTmFtaW5nQXR0cmlidXRlIGZvcm1hdCBub3QgYWxsb3dlZCAKICAgICAgICAoZWcuIE1hbmFnZWRFbGVtZW50Lm15a2V5PTM0NTQzNikiOwogICAgcmVmZXJlbmNlICAiM0dQUCBUUyAzMi4zMDAiOwogIH0gCiAKICB0eXBlZGVmIFFPZmZzZXRSYW5nZSAgewogICAgdHlwZSBpbnQ4IHsgCiAgICAgIHJhbmdlICItMjQgfCAtMjIgfCAtMjAgfCAtMTggfCAtMTYgfCAtMTQgfCAtMTIgfCAtMTAgfCAtOCB8IC02IHwgIiArCiAgICAgICAgIiAtNSB8IC00IHwgLTMgfCAtMiB8IC0xIHwgMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDggfCAxMCB8ICIgKwogICAgICAgICIgMTIgfCAxNCB8IDE2IHwgMTggfCAyMCB8IDIyIHwgMjQiOyAKICAgIH0KICAgIHVuaXRzIGRCOwogIH0KCiAgZ3JvdXBpbmcgUmVwb3J0aW5nQ3RybCB7CiAgICBjaG9pY2UgcmVwb3J0aW5nQ3RybCB7CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICBkZXNjcmlwdGlvbiAiCiAgICAgICAgVGhpcyBjaG9pY2UgZGVmaW5lcyB0aGUgbWV0aG9kIGZvciByZXBvcnRpbmcgY29sbGVjdGVkIHBlcmZvcm1hbmNlCiAgICAgICAgbWV0cmljcyB0byBNblMgY29uc3VtZXJzIGFzIHdlbGwgYXMgdGhlIHBhcmFtZXRlcnMgZm9yIGNvbmZpZ3VyaW5nIHRoZQogICAgICAgIHJlcG9ydGluZyBmdW5jdGlvbi4gSXQgaXMgYSBjaG9pY2UgYmV0d2VlbiB0aGUgY29udHJvbCBwYXJhbWV0ZXIKICAgICAgICByZXF1aXJlZCBmb3IgdGhlIHJlcG9ydGluZyBtZXRob2RzLCB3aG9zZSBwcmVzZW5jZSBzZWxlY3RzIHRoZQogICAgICAgIHJlcG9ydGluZyBtZXRob2QgYXMgZm9sbG93czoKCiAgICAgICAgLSBXaGVuIG9ubHkgdGhlIGZpbGVSZXBvcnRpbmdQZXJpb2QgYXR0cmlidXRlIGlzIHByZXNlbnQsIHRoZSBNblMKICAgICAgICBwcm9kdWNlciBzaGFsbCBzdG9yZSBmaWxlcyBvbiB0aGUgTW5TIHByb2R1Y2VyIGF0IGEgbG9jYXRpb24gc2VsZWN0ZWQKICAgICAgICBieSB0aGUgTW5TIHByb2R1Y2VyIGFuZCwgb24gY29uZGl0aW9uIHRoYXQgYW4gYXBwcm9wcmlhdGUgc3Vic2NyaXB0aW9uCiAgICAgICAgaXMgaW4gcGxhY2UsIGluZm9ybSB0aGUgTW5TIGNvbnN1bWVyIGFib3V0IHRoZSBhdmFpbGFiaWxpdHkgb2YgbmV3CiAgICAgICAgZmlsZXMgYW5kIHRoZSBmaWxlIGxvY2F0aW9uIHVzaW5nIHRoZSBub3RpZnlGaWxlUmVhZHkgbm90aWZpY2F0aW9uLgogICAgICAgIEluIGNhc2UgdGhlIHByZXBhcmF0aW9uIG9mIGEgZmlsZSBmYWlscywgJ25vdGlmeUZpbGVQcmVwYXJhdGlvbkVycm9yJwogICAgICAgIHNoYWxsIGJlIHNlbnQgaW5zdGVhZC4KCiAgICAgICAgLSBXaGVuIHRoZSAnZmlsZVJlcG9ydGluZ1BlcmlvZCcgYW5kICdub3RpZmljYXRpb25SZWNpcGllbnRBZGRyZXNzJwogICAgICAgIGF0dHJpYnV0ZXMgYXJlIHByZXNlbnQsIHRoZW4gdGhlIE1uUyBwcm9kdWNlciBzaGFsbCBiZWhhdmUgbGlrZQogICAgICAgIGRlc2NyaWJlZCBmb3IgdGhlIGNhc2UgdGhhdCBvbmx5IHRoZSAnZmlsZVJlcG9ydGluZ1BlcmlvZCcgaXMgcHJlc2VudC4KICAgICAgICBJbiBhZGRpdGlvbiwgdGhlIE1uUyBwcm9kdWNlciBzaGFsbCBjcmVhdGUgb24gYmVoYWxmIG9mIHRoZSBNblMKICAgICAgICBjb25zdW1lciBhIHN1YnNjcmlwdGlvbiwgdXNpbmcgJ050ZlN1YnNjcmlwdGlvbkNvbnRyb2wnLCBmb3IgdGhlCiAgICAgICAgbm90aWZpY2F0aW9uIHR5cGVzICdub3RpZnlNT0lDcmVhdGlvbicgYW5kICdub3RpZnlNT0lEZWxldGlvbicgcmVsYXRlZAogICAgICAgIHRvIHRoZSAnRmlsZScgaW5zdGFuY2VzIHRoYXQgd2lsbCBiZSBwcm9kdWNlZCBsYXRlci4gSW4gY2FzZSBhbiBleGlzdGluZwogICAgICAgIHN1YnNjcmlwdGlvbiBkb2VzIGFscmVhZHkgaW5jbHVkZSB0aGUgJ0ZpbGUnIGluc3RhbmNlcyB0byBiZSBwcm9kdWNlZCwKICAgICAgICBubyBuZXcgc3Vic2NyaXB0aW9uIHNoYWxsIGJlIGNyZWF0ZWQuIFRoZQogICAgICAgICdub3RpZmljYXRpb25SZWNpcGllbnRBZGRyZXNzJyBhdHRyaWJ1dGUgaW4gdGhlIGNyZWF0ZWQKICAgICAgICAnTnRmU3Vic2NyaXB0aW9uQ29udHJvbCcgaW5zdGFuY2Ugc2hhbGwgYmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUKICAgICAgICAnbm90aWZpY2F0aW9uUmVjaXBpZW50QWRkcmVzcycgaW4gdGhlIHJlbGF0ZWQgJ1BlcmZNZXRyaWNKb2InLiBUaGlzCiAgICAgICAgZmVhdHVyZSBpcyBjYWxsZWQgaW1wbGljaXQgbm90aWZpY2F0aW9uIHN1YnNjcmlwdGlvbiwgYXMgb3Bwb3NlZCB0byB0aGUKICAgICAgICBjYXNlIHdoZXJlIHRoZSBNblMgY29uc3VtZXIgY3JlYXRlcyB0aGUgc3Vic2NyaXB0aW9uIChleHBsaWNpdAogICAgICAgIG5vdGlmaWNhdGlvbiBzdWJzY3JpcHRpb24pLiBXaGVuIHRoZSByZWxhdGVkICdQZXJmTWV0cmljSm9iJyBpcwogICAgICAgIGRlbGV0ZWQsIHRoZSAnTnRmU3Vic2NyaXB0aW9uQ29udHJvbCcgaW5zdGFuY2UgY3JlYXRlZCBkdWUgdG8gdGhlCiAgICAgICAgcmVxdWVzdCBmb3IgaW1wbGljaXQgc3Vic2NyaXB0aW9uIHNoYWxsIGJlIGRlbGV0ZWQgYXMgd2VsbC4KCiAgICAgICAgLSBXaGVuIG9ubHkgdGhlIGZpbGVSZXBvcnRpbmdQZXJpb2QgYW5kIGZpbGVMb2NhdGlvbiBhdHRyaWJ1dGVzIGFyZQogICAgICAgIHByZXNlbnQsIHRoZSBNblMgcHJvZHVjZXIgc2hhbGwgc3RvcmUgdGhlIGZpbGVzIG9uIGEgTW5TIGNvbnN1bWVyLCB0aGF0CiAgICAgICAgY2FuIGJlIGFueSBlbnRpdHkgc3VjaCBhcyBhIGZpbGUgc2VydmVyLCBhdCB0aGUgbG9jYXRpb24gc3BlY2lmaWVkIGJ5CiAgICAgICAgZmlsZUxvY2F0aW9uLiBObyBub3RpZmljYXRpb24gaXMgZW1pdHRlZCBieSB0aGUgTW5TIHByb2R1Y2VyLgoKICAgICAgICAtIFdoZW4gb25seSB0aGUgc3RyZWFtVGFyZ2V0IGF0dHJpYnV0ZSBpcyBwcmVzZW50LCB0aGUgTW5TIHByb2R1Y2VyCiAgICAgICAgc2hhbGwgc3RyZWFtIHRoZSBkYXRhIHRvIHRoZSBsb2NhdGlvbiBzcGVjaWZpZWQgYnkgc3RyZWFtVGFyZ2V0LgoKICAgICAgICBGb3IgdGhlIGZpbGUtYmFzZWQgcmVwb3J0aW5nIG1ldGhvZHMgdGhlIGZpbGVSZXBvcnRpbmdQZXJpb2QgYXR0cmlidXRlCiAgICAgICAgc3BlY2lmaWVzIHRoZSB0aW1lIHdpbmRvdyBkdXJpbmcgd2hpY2ggY29sbGVjdGVkIG1lYXN1cmVtZW50cyBhcmUKICAgICAgICBzdG9yZWQgaW50byB0aGUgc2FtZSBmaWxlIGJlZm9yZSB0aGUgZmlsZSBpcyBjbG9zZWQgYW5kIGEgbmV3IGZpbGUgaXMKICAgICAgICBvcGVuZWQuIjsKCiAgICAgIGNhc2UgZmlsZS1iYXNlZC1yZXBvcnRpbmcgewogICAgICAgIGxlYWYgZmlsZVJlcG9ydGluZ1BlcmlvZCB7CiAgICAgICAgICB0eXBlIHVpbnQzMiB7CiAgICAgICAgICAgIHJhbmdlIDEuLm1heDsKICAgICAgICAgIH0KICAgICAgICAgIHVuaXRzIG1pbnV0ZXM7CiAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICAgIGRlc2NyaXB0aW9uICJGb3IgdGhlIGZpbGUtYmFzZWQgcmVwb3J0aW5nIG1ldGhvZCB0aGlzIGlzIHRoZSB0aW1lCiAgICAgICAgICAgIHdpbmRvdyBkdXJpbmcgd2hpY2ggY29sbGVjdGVkIG1lYXN1cmVtZW50cyBhcmUgc3RvcmVkIGludG8gdGhlIHNhbWUKICAgICAgICAgICAgZmlsZSBiZWZvcmUgdGhlIGZpbGUgaXMgY2xvc2VkIGFuZCBhIG5ldyBmaWxlIGlzIG9wZW5lZC4KICAgICAgICAgICAgVGhlIHRpbWUtcGVyaW9kIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgZ3JhbnVsYXJpdHlQZXJpb2QuCgogICAgICAgICAgICBBcHBsaWNhYmxlIHdoZW4gdGhlIGZpbGUtYmFzZWQgcmVwb3J0aW5nIG1ldGhvZCBpcyBzdXBwb3J0ZWQuIjsKICAgICAgICB9CiAgICAgICAgY2hvaWNlIHJlcG9ydGluZy10YXJnZXQgewogICAgICAgICAgY2FzZSBmaWxlLXRhcmdldCB7CiAgICAgICAgICAgIGxlYWYgZmlsZUxvY2F0aW9uIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmcgOwogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQXBwbGljYWJsZSBhbmQgbXVzdCBiZSBwcmVzZW50IHdoZW4gdGhlIGZpbGUtYmFzZWQKICAgICAgICAgICAgICByZXBvcnRpbmcgbWV0aG9kIGlzIHN1cHBvcnRlZCwgYW5kIHRoZSBmaWxlcyBhcmUgc3RvcmVkIG9uIHRoZSBNblMKICAgICAgICAgICAgICBjb25zdW1lci4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIG5vdGlmaWNhdGlvbi10YXJnZXQgewogICAgICAgICAgICBsZWFmIG5vdGlmaWNhdGlvblJlY2lwaWVudEFkZHJlc3MgewogICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk11c3QgYmUgcHJlc2VudCB3aGVuIHRoZSBub3RpZmljYXRpb24tYmFzZWQgcmVwb3J0aW5nCiAgICAgICAgICAgICAgbWV0aG9kIGlzIHN1cHBvcnRlZCwgYW5kIHRoZSB0aGUgZmlsZXMgYXJlIGF2YWlsYWJsZSBhcwogICAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMgZm9yIHRoZSBNblMgY29uc3VtZXIgdG8gc3Vic2NyaWJlIHRvLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBkZXNjcmlwdGlvbiAiV2hlbiBuZXRpaGVyIGZpbGVMb2NhdGlvbiBvciBub3RpZmljYXRpb25SZWNpcGllbnRBZGRyZXNzCiAgICAgICAgICBhcmUgcHJlc2VudCwgdGhlIGZpbGVzIGFyZSBzdG9yZWQgYW5kIGF2YWlsYWJsZSB0byB0aGUgTW5TIGNvbnN1bWVyCiAgICAgICAgICBpZiB0aGUgTW5TIHN1YnNjcmliZXMgdG8gdGhlIG5vdGlmeUZpbGVSZWFkeSBub3RpZmljYXRpb24uIjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGNhc2Ugc3RyZWFtLWJhc2VkLXJlcG9ydGluZyB7CiAgICAgICAgbGVhZiBzdHJlYW1UYXJnZXQgewogICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICAgIGRlc2NyaXB0aW9uICJBcHBsaWNhYmxlIHdoZW4gc3RyZWFtLWJhc2VkIHJlcG9ydGluZyBtZXRob2QgaXMKICAgICAgICAgICAgc3VwcG9ydGVkLiI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9
ietf-geo-location urn:ietf:params:xml:ns:yang:ietf-geo-location \N [] 2022-02-11 bW9kdWxlIGlldGYtZ2VvLWxvY2F0aW9uIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYtZ2VvLWxvY2F0aW9uIjsKICBwcmVmaXggZ2VvOwogIGltcG9ydCBpZXRmLXlhbmctdHlwZXMgewogICAgcHJlZml4IHlhbmc7CiAgICByZWZlcmVuY2UgIlJGQyA2OTkxOiBDb21tb24gWUFORyBEYXRhIFR5cGVzIjsKICB9CgogIG9yZ2FuaXphdGlvbgogICAgIklFVEYgTkVUTU9EIFdvcmtpbmcgR3JvdXAgKE5FVE1PRCkiOwogIGNvbnRhY3QKICAgIldHIFdlYjogICA8aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy93Zy9uZXRtb2QvPgogICAgV0cgTGlzdDogIDxtYWlsdG86bmV0bW9kQGlldGYub3JnPgoKICAgIEVkaXRvcjogICBDaHJpc3RpYW4gSG9wcHMKICAgICAgICAgICAgICA8bWFpbHRvOmNob3Bwc0BjaG9wcHMub3JnPiI7CgogIGRlc2NyaXB0aW9uCiAgICAiVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGdyb3VwaW5nIG9mIGEgY29udGFpbmVyIG9iamVjdCBmb3IKICAgICBzcGVjaWZ5aW5nIGEgbG9jYXRpb24gb24gb3IgYXJvdW5kIGFuIGFzdHJvbm9taWNhbCBvYmplY3QgKGUuZy4sCiAgICAgJ2VhcnRoJykuCgogICAgIFRoZSBrZXkgd29yZHMgJ01VU1QnLCAnTVVTVCBOT1QnLCAnUkVRVUlSRUQnLCAnU0hBTEwnLCAnU0hBTEwKICAgICBOT1QnLCAnU0hPVUxEJywgJ1NIT1VMRCBOT1QnLCAnUkVDT01NRU5ERUQnLCAnTk9UIFJFQ09NTUVOREVEJywKICAgICAnTUFZJywgYW5kICdPUFRJT05BTCcgaW4gdGhpcyBkb2N1bWVudCBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMKICAgICBkZXNjcmliZWQgaW4gQkNQIDE0IChSRkMgMjExOSkgKFJGQyA4MTc0KSB3aGVuLCBhbmQgb25seSB3aGVuLAogICAgIHRoZXkgYXBwZWFyIGluIGFsbCBjYXBpdGFscywgYXMgc2hvd24gaGVyZS4KCiAgICAgQ29weXJpZ2h0IChjKSAyMDIyIElFVEYgVHJ1c3QgYW5kIHRoZSBwZXJzb25zIGlkZW50aWZpZWQgYXMKICAgICBhdXRob3JzIG9mIHRoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywKICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHVyc3VhbnQgdG8sCiAgICAgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgdGVybXMgY29udGFpbmVkIGluLCB0aGUKICAgICBSZXZpc2VkIEJTRCBMaWNlbnNlIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUKICAgICBJRVRGIFRydXN0J3MgTGVnYWwgUHJvdmlzaW9ucyBSZWxhdGluZyB0byBJRVRGIERvY3VtZW50cwogICAgIChodHRwczovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoaXMgWUFORyBtb2R1bGUgaXMgcGFydCBvZiBSRkMgOTE3OQogICAgIChodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9pbmZvL3JmYzkxNzkpOyBzZWUgdGhlIFJGQyBpdHNlbGYKICAgICBmb3IgZnVsbCBsZWdhbCBub3RpY2VzLiI7CgogIHJldmlzaW9uIDIwMjItMDItMTEgewogICAgZGVzY3JpcHRpb24KICAgICAgIkluaXRpYWwgUmV2aXNpb24iOwogICAgcmVmZXJlbmNlCiAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgfQoKICBmZWF0dXJlIGFsdGVybmF0ZS1zeXN0ZW1zIHsKICAgIGRlc2NyaXB0aW9uCiAgICAgICJUaGlzIGZlYXR1cmUgbWVhbnMgdGhlIGRldmljZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIGxvY2F0aW9ucwogICAgICAgdXNpbmcgYWx0ZXJuYXRlIHN5c3RlbXMgZm9yIHJlZmVyZW5jZSBmcmFtZXMuIjsKICB9CgogIGdyb3VwaW5nIGdlby1sb2NhdGlvbiB7CiAgICBkZXNjcmlwdGlvbgogICAgICAiR3JvdXBpbmcgdG8gaWRlbnRpZnkgYSBsb2NhdGlvbiBvbiBhbiBhc3Ryb25vbWljYWwgb2JqZWN0LiI7CgogICAgY29udGFpbmVyIGdlby1sb2NhdGlvbiB7CiAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIkEgbG9jYXRpb24gb24gYW4gYXN0cm9ub21pY2FsIGJvZHkgKGUuZy4sICdlYXJ0aCcpCiAgICAgICAgIHNvbWV3aGVyZSBpbiBhIHVuaXZlcnNlLiI7CgogICAgICBjb250YWluZXIgcmVmZXJlbmNlLWZyYW1lIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBGcmFtZSBvZiBSZWZlcmVuY2UgZm9yIHRoZSBsb2NhdGlvbiB2YWx1ZXMuIjsKCiAgICAgICAgbGVhZiBhbHRlcm5hdGUtc3lzdGVtIHsKICAgICAgICAgIGlmLWZlYXR1cmUgImFsdGVybmF0ZS1zeXN0ZW1zIjsKICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBzeXN0ZW0gaW4gd2hpY2ggdGhlIGFzdHJvbm9taWNhbCBib2R5IGFuZAogICAgICAgICAgICAgZ2VvZGV0aWMtZGF0dW0gaXMgZGVmaW5lZC4gIE5vcm1hbGx5LCB0aGlzIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAgcHJlc2VudCBhbmQgdGhlIHN5c3RlbSBpcyB0aGUgbmF0dXJhbCB1bml2ZXJzZTsgaG93ZXZlciwKICAgICAgICAgICAgIHdoZW4gcHJlc2VudCwgdGhpcyB2YWx1ZSBhbGxvd3MgZm9yIHNwZWNpZnlpbmcgYWx0ZXJuYXRlCiAgICAgICAgICAgICBzeXN0ZW1zIChlLmcuLCB2aXJ0dWFsIHJlYWxpdGllcykuICBBbiBhbHRlcm5hdGUtc3lzdGVtCiAgICAgICAgICAgICBtb2RpZmllcyB0aGUgZGVmaW5pdGlvbiAoYnV0IG5vdCB0aGUgdHlwZSkgb2YgdGhlIG90aGVyCiAgICAgICAgICAgICB2YWx1ZXMgaW4gdGhlIHJlZmVyZW5jZSBmcmFtZS4iOwogICAgICAgIH0KICAgICAgICBsZWFmIGFzdHJvbm9taWNhbC1ib2R5IHsKICAgICAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgfQogICAgICAgICAgZGVmYXVsdCAiZWFydGgiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFuIGFzdHJvbm9taWNhbCBib2R5IGFzIG5hbWVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsCiAgICAgICAgICAgICBBc3Ryb25vbWljYWwgVW5pb24gKElBVSkgb3IgYWNjb3JkaW5nIHRvIHRoZSBhbHRlcm5hdGUKICAgICAgICAgICAgIHN5c3RlbSBpZiBzcGVjaWZpZWQuICBFeGFtcGxlcyBpbmNsdWRlICdzdW4nIChvdXIgc3RhciksCiAgICAgICAgICAgICAnZWFydGgnIChvdXIgcGxhbmV0KSwgJ21vb24nIChvdXIgbW9vbiksICdlbmNlbGFkdXMnIChhCiAgICAgICAgICAgICBtb29uIG9mIFNhdHVybiksICdjZXJlcycgKGFuIGFzdGVyb2lkKSwgYW5kCiAgICAgICAgICAgICAnNjdwL2NodXJ5dW1vdi1nZXJhc2ltZW5rbyAoYSBjb21ldCkuICBUaGUgQVNDSUkgdmFsdWUKICAgICAgICAgICAgIFNIT1VMRCBoYXZlIHVwcGVyY2FzZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGFuZCBub3QKICAgICAgICAgICAgIGluY2x1ZGUgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuLCB2YWx1ZXMgMzIuLjY0LCBhbmQKICAgICAgICAgICAgIDkxLi4xMjYpLiAgQW55IHByZWNlZGluZyAndGhlJyBpbiB0aGUgbmFtZSBTSE9VTEQgTk9UIGJlCiAgICAgICAgICAgICBpbmNsdWRlZC4iOwogICAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAgICJodHRwczovL3d3dy5pYXUub3JnLyI7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lciBnZW9kZXRpYy1zeXN0ZW0gewogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBnZW9kZXRpYyBzeXN0ZW0gb2YgdGhlIGxvY2F0aW9uIGRhdGEuIjsKICAgICAgICAgIGxlYWYgZ2VvZGV0aWMtZGF0dW0gewogICAgICAgICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkEgZ2VvZGV0aWMtZGF0dW0gZGVmaW5pbmcgdGhlIG1lYW5pbmcgb2YgbGF0aXR1ZGUsCiAgICAgICAgICAgICAgIGxvbmdpdHVkZSwgYW5kIGhlaWdodC4gIFRoZSBkZWZhdWx0IHdoZW4gdGhlCiAgICAgICAgICAgICAgIGFzdHJvbm9taWNhbCBib2R5IGlzICdlYXJ0aCcgaXMgJ3dncy04NCcsIHdoaWNoIGlzCiAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIEdsb2JhbCBQb3NpdGlvbmluZyBTeXN0ZW0gKEdQUykuICBUaGUKICAgICAgICAgICAgICAgQVNDSUkgdmFsdWUgU0hPVUxEIGhhdmUgdXBwZXJjYXNlIGNvbnZlcnRlZCB0bwogICAgICAgICAgICAgICBsb3dlcmNhc2UgYW5kIG5vdCBpbmNsdWRlIGNvbnRyb2wgY2hhcmFjdGVycwogICAgICAgICAgICAgICAoaS5lLiwgdmFsdWVzIDMyLi42NCwgYW5kIDkxLi4xMjYpLiAgVGhlIElBTkEgcmVnaXN0cnkKICAgICAgICAgICAgICAgZnVydGhlciByZXN0cmljdHMgdGhlIHZhbHVlIGJ5IGNvbnZlcnRpbmcgYWxsIHNwYWNlcwogICAgICAgICAgICAgICAoJyAnKSB0byBkYXNoZXMgKCctJykuCiAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZ2VvZGV0aWMtZGF0dW0gaW5kaWNhdGVzCiAgICAgICAgICAgICAgIGhvdyBhY2N1cmF0ZWx5IGl0IG1vZGVscyB0aGUgYXN0cm9ub21pY2FsIGJvZHkgaW4KICAgICAgICAgICAgICAgcXVlc3Rpb24sIGJvdGggZm9yIHRoZSAnaG9yaXpvbnRhbCcKICAgICAgICAgICAgICAgbGF0aXR1ZGUvbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGFuZCBmb3IgaGVpZ2h0CiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiI7CiAgICAgICAgICAgIHJlZmVyZW5jZQogICAgICAgICAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucywKICAgICAgICAgICAgICAgU2VjdGlvbiA2LjEiOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBjb29yZC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgYWNjdXJhY3kgb2YgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBwYWlyIGZvcgogICAgICAgICAgICAgICBlbGxpcHNvaWRhbCBjb29yZGluYXRlcywgb3IgdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMKICAgICAgICAgICAgICAgZm9yIENhcnRlc2lhbiBjb29yZGluYXRlcy4gIFdoZW4gY29vcmQtYWNjdXJhY3kgaXMKICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBpdCBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgY29vcmRpbmF0ZXMKICAgICAgICAgICAgICAgaW4gdGhlIGFzc29jaWF0ZWQgbGlzdCBvZiBsb2NhdGlvbnMgaGF2ZSBiZWVuCiAgICAgICAgICAgICAgIGRldGVybWluZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbQogICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1kYXR1bS4gIEZvciBleGFtcGxlLCB0aGVyZQogICAgICAgICAgICAgICBtaWdodCBiZSB1bmNlcnRhaW50eSBkdWUgdG8gbWVhc3VyZW1lbnQgZXJyb3IgaWYgYW4KICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIG1lYXN1cmVtZW50IHdhcyBtYWRlIHRvIGRldGVybWluZSBlYWNoCiAgICAgICAgICAgICAgIGxvY2F0aW9uLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIGhlaWdodC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBoZWlnaHQgdmFsdWUgZm9yIGVsbGlwc29pZGFsCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOyB0aGlzIHZhbHVlIGlzIG5vdCB1c2VkIHdpdGggQ2FydGVzaWFuCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiAgV2hlbiBoZWlnaHQtYWNjdXJhY3kgaXMgc3BlY2lmaWVkLCBpdAogICAgICAgICAgICAgICBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgaGVpZ2h0cyBpbiB0aGUKICAgICAgICAgICAgICAgYXNzb2NpYXRlZCBsaXN0IG9mIGxvY2F0aW9ucyBoYXZlIGJlZW4gZGV0ZXJtaW5lZAogICAgICAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGRlZmluZWQgYnkgdGhlCiAgICAgICAgICAgICAgIGdlb2RldGljLWRhdHVtLiAgRm9yIGV4YW1wbGUsIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgICAgICAgIHVuY2VydGFpbnR5IGR1ZSB0byBtZWFzdXJlbWVudCBlcnJvciBpZiBhbgogICAgICAgICAgICAgICBleHBlcmltZW50YWwgbWVhc3VyZW1lbnQgd2FzIG1hZGUgdG8gZGV0ZXJtaW5lIGVhY2gKICAgICAgICAgICAgICAgbG9jYXRpb24uIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY2hvaWNlIGxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBsb2NhdGlvbiBkYXRhIGVpdGhlciBpbiBsYXRpdHVkZS9sb25naXR1ZGUgb3IKICAgICAgICAgICBDYXJ0ZXNpYW4gdmFsdWVzIjsKICAgICAgICBjYXNlIGVsbGlwc29pZCB7CiAgICAgICAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGxhdGl0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBsb25naXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJkZWNpbWFsIGRlZ3JlZXMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgbG9uZ2l0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBoZWlnaHQgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkhlaWdodCBmcm9tIGEgcmVmZXJlbmNlIDAgdmFsdWUuICBUaGUgcHJlY2lzaW9uIGFuZAogICAgICAgICAgICAgICAnMCcgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhc2UgY2FydGVzaWFuIHsKICAgICAgICAgIGxlYWYgeCB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIFggdmFsdWUgYXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIHkgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIlRoZSBZIHZhbHVlIGFzIGRlZmluZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiB6IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJtZXRlcnMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgWiB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29udGFpbmVyIHZlbG9jaXR5IHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIklmIHRoZSBvYmplY3QgaXMgaW4gbW90aW9uLCB0aGUgdmVsb2NpdHkgdmVjdG9yIGRlc2NyaWJlcwogICAgICAgICAgIHRoaXMgbW90aW9uIGF0IHRoZSB0aW1lIGdpdmVuIGJ5IHRoZSB0aW1lc3RhbXAuICBGb3IgYQogICAgICAgICAgIGZvcm11bGEgdG8gY29udmVydCB0aGVzZSB2YWx1ZXMgdG8gc3BlZWQgYW5kIGhlYWRpbmcsIHNlZQogICAgICAgICAgIFJGQyA5MTc5LiI7CiAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwoKICAgICAgICBsZWFmIHYtbm9ydGggewogICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTI7CiAgICAgICAgICB9CiAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgInYtbm9ydGggaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgdG93YXJkcwogICAgICAgICAgICAgdHJ1ZSBub3J0aCBhcyBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1zeXN0ZW0uIjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdi1lYXN0IHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LWVhc3QgaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgcGVycGVuZGljdWxhcgogICAgICAgICAgICAgdG8gdGhlIHJpZ2h0IG9mIHRydWUgbm9ydGggYXMgZGVmaW5lZCBieQogICAgICAgICAgICAgdGhlIGdlb2RldGljLXN5c3RlbS4iOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB2LXVwIHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LXVwIGlzIHRoZSByYXRlIG9mIGNoYW5nZSAoaS5lLiwgc3BlZWQpIGF3YXkgZnJvbSB0aGUKICAgICAgICAgICAgIGNlbnRlciBvZiBtYXNzLiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxlYWYgdGltZXN0YW1wIHsKICAgICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlJlZmVyZW5jZSB0aW1lIHdoZW4gbG9jYXRpb24gd2FzIHJlY29yZGVkLiI7CiAgICAgIH0KICAgICAgbGVhZiB2YWxpZC11bnRpbCB7CiAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICJUaGUgdGltZXN0YW1wIGZvciB3aGljaCB0aGlzIGdlby1sb2NhdGlvbiBpcyB2YWxpZCB1bnRpbC4KICAgICAgICAgICBJZiB1bnNwZWNpZmllZCwgdGhlIGdlby1sb2NhdGlvbiBoYXMgbm8gc3BlY2lmaWMKICAgICAgICAgICBleHBpcmF0aW9uIHRpbWUuIjsKICAgICAgfQogICAgfQogIH0KfQo=
o-ran-smo-teiv-common-yang-extensions urn:o-ran:smo-teiv-common-yang-extensions \N [] 2024-05-24 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogICAgcHJlZml4IG9yLXRlaXYteWV4dDsKCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICJUb3BvbG9neSBhbmQgSW52ZW50b3J5IFlBTkcgZXh0ZW5zaW9ucyBtb2RlbC4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgZXh0ZW5zaW9ucyB0byB0aGUgWUFORyBsYW5ndWFnZSB0aGF0IHRvcG9sb2d5IGFuZAogICAgaW52ZW50b3J5IG1vZGVscyB3aWxsIHVzZSB0byBkZWZpbmUgYW5kIGFubm90YXRlIHR5cGVzIGFuZCByZWxhdGlvbnNoaXBzLiI7CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBleHRlbnNpb24gYmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiRGVmaW5lcyBhIGJpLWRpcmVjdGlvbmFsIHJlbGF0aW9uc2hpcCBpbiB0aGUgdG9wb2xvZ3kuCgogICAgICAgICAgICBBIGJpLWRpcmVjdGlvbmFsLWFzc29jaWF0aW9uIChCREEpIGlzIGEgcmVsYXRpb25zaGlwIGNvbXByaXNpbmcgb2YKICAgICAgICAgICAgYW4gQS1zaWRlIGFuZCBhIEItc2lkZS4gVGhlIEEtc2lkZSBpcyBjb25zaWRlcmVkIHRoZSBvcmlnaW5hdGluZwogICAgICAgICAgICBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXA7IHRoZSBCLXNpZGUgaXMgY29uc2lkZXJlZCB0aGUgdGVybWluYXRpbmcKICAgICAgICAgICAgc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgb3JkZXIgb2YgQS1zaWRlIGFuZCBCLXNpZGUgaXMgb2YKICAgICAgICAgICAgaW1wb3J0YW5jZSBhbmQgTVVTVCBOT1QgYmUgY2hhbmdlZCBvbmNlIGRlZmluZWQuCgogICAgICAgICAgICBCb3RoIEEtc2lkZSBhbmQgQi1zaWRlIGFyZSBkZWZpbmVkIG9uIGEgdHlwZSwgYW5kIGFyZSBnaXZlbiBhIHJvbGUuCiAgICAgICAgICAgIEEgdHlwZSBtYXkgaGF2ZSBtdWx0aXBsZSBvcmlnaW5hdGluZyBhbmQvb3IgdGVybWluYXRpbmcgc2lkZXMgb2YgYQogICAgICAgICAgICByZWxhdGlvbnNoaXAsIGFsbCBkaXN0aW5ndWlzaGVkIGJ5IHJvbGUgbmFtZS4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSAnbW9kdWxlJyBzdGF0ZW1lbnQuCiAgICAgICAgICAgIE11bHRpcGxlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudHMgYXJlCiAgICAgICAgICAgIGFsbG93ZWQgcGVyIHBhcmVudCBzdGF0ZW1lbnQuCgogICAgICAgICAgICBTdWJzdGF0ZW1lbnRzIHRvIHRoZSAnYmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBkZWZpbmUKICAgICAgICAgICAgdGhlIEEtc2lkZSBhbmQgdGhlIEItc2lkZSwgcmVzcGVjdGl2ZWx5LCBhbmQgb3B0aW9uYWxseSBwcm9wZXJ0aWVzCiAgICAgICAgICAgIG9mIHRoZSByZWxhdGlvbnNoaXAuIERhdGEgbm9kZXMgb2YgdHlwZXMgJ2xlYWYnIGFuZCAnbGVhZi1saXN0JyBhcmUKICAgICAgICAgICAgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLiBPbmUgb2YgdGhlIGRhdGEgbm9kZXMgTVVTVCBiZSBhbm5vdGF0ZWQgd2l0aAogICAgICAgICAgICB0aGUgJ2Etc2lkZScgZXh0ZW5zaW9uOyBhbm90aGVyIGRhdGEgbm9kZSBNVVNUIGJlIGFubm90YXRlZCB3aXRoIHRoZQogICAgICAgICAgICAnYi1zaWRlJyBleHRlbnNpb24uIE90aGVyIGRhdGEgbm9kZXMgZGVmaW5lIHByb3BlcnRpZXMgb2YgdGhlCiAgICAgICAgICAgIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgcmVsYXRpb25zaGlwIG5hbWUKICAgICAgICAgICAgaXMgc2NvcGVkIHRvIHRoZSBuYW1lc3BhY2Ugb2YgdGhlIGRlY2xhcmluZyBtb2R1bGUgYW5kIE1VU1QgYmUKICAgICAgICAgICAgdW5pcXVlIHdpdGhpbiB0aGUgc2NvcGUuIjsKCiAgICAgICAgYXJndW1lbnQgcmVsYXRpb25zaGlwTmFtZTsKICAgIH0KCiAgICBleHRlbnNpb24gYVNpZGUgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJEZWZpbmVzIHRoZSBBLXNpZGUgb2YgYSByZWxhdGlvbnNoaXAuCgogICAgICAgICAgICBUaGUgc3RhdGVtZW50IE1VU1Qgb25seSBiZSBhIHN1YnN0YXRlbWVudCBvZiBhICdsZWFmJyBvciAnbGVhZi1saXN0JwogICAgICAgICAgICBzdGF0ZW1lbnQsIHdoaWNoIGl0c2VsZiBtdXN0IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZQogICAgICAgICAgICAndW5pLWRpcmVjdGlvbmFsLXRvcG9sb2d5LXJlbGF0aW9uc2hpcCcgc3RhdGVtZW50LgoKICAgICAgICAgICAgVGhlIGRhdGEgdHlwZSBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBNVVNUIGJlCiAgICAgICAgICAgICdpbnN0YW5jZS1pZGVudGlmaWVyJy4gQ29uc3RyYWludHMgTUFZIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgcGFyZW50CiAgICAgICAgICAgICdsZWFmJyBvciAnbGVhZi1saXN0JyB0byBlbmZvcmNlIGNhcmRpbmFsaXR5LgoKICAgICAgICAgICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgaXMgdXNlZCBhcyBuYW1lCiAgICAgICAgICAgIG9mIHRoZSByb2xlIG9mIHRoZSBBLXNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcC4gVGhlIG5hbWUgb2YgdGhlIHJvbGUKICAgICAgICAgICAgaXMgc2NvcGVkIHRvIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBBLXNpZGUgaXMgZGVmaW5lZCBhbmQgTVVTVCBiZQogICAgICAgICAgICB1bmlxdWUgd2l0aGluIHRoZSBzY29wZS4KCiAgICAgICAgICAgIFdoaWxlIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGRvZXMgbm90IHJlc3VsdCBpbiBhIHByb3BlcnR5CiAgICAgICAgICAgIG9mIHRoZSByZWxhdGlvbnNoaXAsIGl0IGlzIFJFQ09NTUVOREVEIHRvIGF2b2lkIHVzaW5nIHRoZSBuYW1lIG9mIGFuCiAgICAgICAgICAgIGV4aXN0aW5nIHR5cGUgcHJvcGVydHkgYXMgcm9sZSBuYW1lIHRvIGF2b2lkIHBvdGVudGlhbCBhbWJpZ3VpdGllcwogICAgICAgICAgICBiZXR3ZWVuIHByb3BlcnRpZXMgb2YgYSB0eXBlLCBhbmQgcm9sZXMgb2YgYSByZWxhdGlvbnNoaXAgb24gdGhlCiAgICAgICAgICAgIHR5cGUuCgogICAgICAgICAgICBUaGUgYXJndW1lbnQgaXMgdGhlIG5hbWUgb2YgdGhlIHR5cGUgb24gd2hpY2ggdGhlIEEtc2lkZSByZXNpZGVzLgogICAgICAgICAgICBJZiB0aGUgdHlwZSBpcyBkZWNsYXJlZCBpbiBhbm90aGVyIG1vZHVsZSwgdGhlIHR5cGUgbXVzdCBiZQogICAgICAgICAgICBwcmVmaXhlZCwgYW5kIGEgY29ycmVzcG9uZGluZyAnaW1wb3J0JyBzdGF0ZW1lbnQgYmUgdXNlZCB0byBkZWNsYXJlCiAgICAgICAgICAgIHRoZSBwcmVmaXguIjsKCiAgICAgICAgYXJndW1lbnQgYVNpZGVUeXBlOwogICAgfQoKICAgIGV4dGVuc2lvbiBiU2lkZSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkRlZmluZXMgdGhlIEItc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICAgICAgIHN0YXRlbWVudCwgd2hpY2ggaXRzZWxmIG11c3QgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICAgICAgJ2luc3RhbmNlLWlkZW50aWZpZXInLiBDb25zdHJhaW50cyBNQVkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQKICAgICAgICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUKICAgICAgICAgICAgb2YgdGhlIHJvbGUgb2YgdGhlIEItc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgbmFtZSBvZiB0aGUgcm9sZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEItc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlCiAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgICAgICAgV2hpbGUgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgZG9lcyBub3QgcmVzdWx0IGluIGEgcHJvcGVydHkKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICAgICAgIGJldHdlZW4gcHJvcGVydGllcyBvZiBhIHR5cGUsIGFuZCByb2xlcyBvZiBhIHJlbGF0aW9uc2hpcCBvbiB0aGUKICAgICAgICAgICAgdHlwZS4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIHJlc2lkZXMuCiAgICAgICAgICAgIElmIHRoZSB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlCiAgICAgICAgICAgIHByZWZpeGVkLCBhbmQgYSBjb3JyZXNwb25kaW5nICdpbXBvcnQnIHN0YXRlbWVudCBiZSB1c2VkIHRvIGRlY2xhcmUKICAgICAgICAgICAgdGhlIHByZWZpeC4iOwoKICAgICAgICBhcmd1bWVudCBiU2lkZVR5cGU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGRvbWFpbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIktleXdvcmQgdXNlZCB0byBjYXJyeSBkb21haW4gaW5mb3JtYXRpb24uIjsKICAgICAgICBhcmd1bWVudCBkb21haW5OYW1lOwogICAgfQoKICAgIGV4dGVuc2lvbiBsYWJlbCB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBsYWJlbCBjYW4gYmUgdXNlZCB0byBnaXZlIG1vZHVsZXMgYW5kIHN1Ym1vZHVsZXMgYSBzZW1hbnRpYwogICAgICAgICAgICB2ZXJzaW9uLCBpbiBhZGRpdGlvbiB0byB0aGVpciByZXZpc2lvbi4KCiAgICAgICAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIGxhYmVsIGlzIOKAmHgueS564oCZIOKAkyBleHByZXNzZWQgYXMgcGF0dGVybiwgaXQgaXMKICAgICAgICAgICAgWzAtOV0rXFwuWzAtOV0rXFwuWzAtOV0rCgogICAgICAgICAgICBUaGUgc3RhdGVtZW50IE1VU1Qgb25seSBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUgcmV2aXNpb24gc3RhdGVtZW50LgogICAgICAgICAgICBaZXJvIG9yIG9uZSByZXZpc2lvbiBsYWJlbCBzdGF0ZW1lbnRzIHBlciBwYXJlbnQgc3RhdGVtZW50IGFyZQogICAgICAgICAgICBhbGxvd2VkLgoKICAgICAgICAgICAgUmV2aXNpb24gbGFiZWxzIE1VU1QgYmUgdW5pcXVlIGFtb25nc3QgYWxsIHJldmlzaW9ucyBvZiBhIG1vZHVsZSBvcgogICAgICAgICAgICBzdWJtb2R1bGUuIjsKCiAgICAgICAgYXJndW1lbnQgc2VtdmVyc2lvbjsKICAgIH0KfQ==
test-built-in-module test-built-in-namespace TEST [] 2024-05-24 bW9kdWxlIHRlc3QtYnVpbHQtaW4tbW9kdWxlIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInRlc3QtYnVpbHQtaW4tbmFtZXNwYWNlIjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIGltcG9ydCBfM2dwcC1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCB0eXBlczNncHA7IH0KCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gewogICAgICAgIHByZWZpeCBnZW87CiAgICAgICAgcmVmZXJlbmNlICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgICB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVGVzdCB0b3BvbG9neSBtb2RlbC4iOwoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBURVNUOwoKICAgIGxpc3QgRW50aXR5VHlwZUEgewoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICB9CgogICAgbGlzdCBFbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgYXR0cmlidXRlQTFXaXRoQXR0cmlidXRlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhdHRyaWJ1dGVBMldpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGF0dHJpYnV0ZUEzV2l0aEF0dHJpYnV0ZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhdHRyaWJ1dGVBNFdpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgYXR0cmlidXRlQTVXaXRoQXR0cmlidXRlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NHsKICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuaXRzICJkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGF0dHJpYnV0ZUE2V2l0aEF0dHJpYnV0ZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVBN1dpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX1VTRVNfRU5USVRZVFlQRUFXSVRIRU5USVRZVFlQRU5BTUVMRU5HVEhMT05HRVJUSEFOU0lYVFlUSFJFRUNIQVJBQ1RFUlMgeyAvLyAwLi4xIHRvIDAuLjEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgdXNlZC1lbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFbnRpdHlUeXBlQTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQoKICAgICAgICBsZWFmIHVzZWQtYnktZW50aXR5VHlwZUEgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX1BST1ZJREVTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUE7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZiBwcm92aWRlZC1ieS1lbnRpdHlUeXBlQSB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBFbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVyczsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgRU5USVRZVFlQRUFfR1JPVVBTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGdyb3VwZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUE7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGdyb3VwZWQtYnktZW50aXR5VHlwZUEgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX0lOU1RBTExFRF9BVF9FTlRJVFlUWVBFQVdJVEhFTlRJVFlUWVBFTkFNRUxFTkdUSExPTkdFUlRIQU5TSVhUWVRIUkVFQ0hBUkFDVEVSUyB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGluc3RhbGxlZC1hdC1lbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFbnRpdHlUeXBlQTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgaW5zdGFsbGVkLWVudGl0eVR5cGVBIHsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBFTlRJVFlUWVBFQVdJVEhFTlRJVFlUWVBFTkFNRUxFTkdUSExPTkdFUlRIQU5TSVhUWVRIUkVFQ0hBUkFDVEVSU19VU0VTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4uMSB0byAwLi4xCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIHVzZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZiB1c2VkLWJ5LWVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICB9CiAgICB9Cn0=
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
o-ran-smo-teiv-equipment_AntennaModule AntennaModule o-ran-smo-teiv-equipment ["antennaBeamWidth", "antennaModelNumber", "electricalAntennaTilt", "geo-location", "mechanicalAntennaBearing", "mechanicalAntennaTilt", "positionWithinSector", "totalTilt"]
o-ran-smo-teiv-ran_AntennaCapability AntennaCapability o-ran-smo-teiv-ran ["eUtranFqBands", "geranFqBands", "nRFqBands"]
o-ran-smo-teiv-ran_ENodeBFunction ENodeBFunction o-ran-smo-teiv-ran ["eNBId", "eNodeBPlmnId"]
test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters test-built-in-module ["attributeA1WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA2WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA3WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA4WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA5WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA6WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA7WithAttributeNameLengthLongerThanSixtyThreeCharacters"]
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
ANTENNAMODULE_SERVES_ANTENNACAPABILITY serviced-antennaCapability AntennaModule o-ran-smo-teiv-equipment 0 9223372036854775807 serving-antennaModule AntennaCapability o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY o-ran-smo-teiv-rel-equipment-ran
ENODEBFUNCTION_PROVIDES_LTESECTORCARRIER provided-lteSectorCarrier ENodeBFunction o-ran-smo-teiv-ran 1 1 provided-by-enodebFunction LTESectorCarrier o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false B_SIDE o-ran-smo-teiv-ran_LTESectorCarrier o-ran-smo-teiv-ran
ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters test-built-in-module 0 1 used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters test-built-in-module 0 1 BI_DIRECTIONAL true RELATION test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS test-built-in-module
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
-ALTER SCHEMA ties_consumer_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_consumer_data;
+ALTER SCHEMA teiv_consumer_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."module_reference" (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"revision" TEXT NOT NULL,
"status" VARCHAR(127) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."decorators" (
"name" TEXT PRIMARY KEY,
"dataType" VARCHAR(511) NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."classifiers" (
"name" TEXT PRIMARY KEY,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
COMMIT;
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_groups;
-ALTER SCHEMA ties_groups OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_groups;
+ALTER SCHEMA teiv_groups OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_groups.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_groups.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_groups' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_groups' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE TABLE IF NOT EXISTS ties_groups."groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."groups" (
"id" VARCHAR(150) PRIMARY KEY,
"name" VARCHAR(150) NOT NULL,
"type" VARCHAR(50) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_groups."static_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."static_groups" (
"id" VARCHAR(150),
"topology_type" TEXT NOT NULL,
"provided_members_ids" TEXT[] NOT NULL,
PRIMARY KEY ("id", "topology_type"),
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_groups."dynamic_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."dynamic_groups" (
"id" VARCHAR(150) PRIMARY KEY,
"criteria" JSONB NOT NULL,
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-SELECT ties_groups.create_constraint_if_not_exists(
+SELECT teiv_groups.create_constraint_if_not_exists(
'groups',
'CHECK_groups_type',
- 'ALTER TABLE ties_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
+ 'ALTER TABLE teiv_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
);
COMMIT;
<!--
============LICENSE_START=======================================================
Copyright (C) 2024 Ericsson
- Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
================================================================================
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
- <version>3.2.0</version>
+ <version>3.4.2</version>
<relativePath />
</parent>
<groupId>org.oran.smo</groupId>
JaCoCo plugin. Industry standard is 0.8 or 80% which allows at least 80%
of the code to be covered by the test cases. -->
<jacoco-maven-plugin.coveredratio.minimum>0.8</jacoco-maven-plugin.coveredratio.minimum>
+ <version.snakeyaml>2.3</version.snakeyaml>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
- <groupId>com.mycila</groupId>
- <artifactId>license-maven-plugin</artifactId>
- <version>${version.license-maven-plugin}</version>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <version>0.15</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
<configuration>
- <licenseSets>
- <licenseSet>
- <header>${maven.multiModuleProjectDirectory}/license/copyright-2024.txt</header>
- <validHeaders>
- <validHeader>${maven.multiModuleProjectDirectory}/license/copyright-2024.txt</validHeader>
- </validHeaders>
- <excludes>
- <exclude>**/*.html</exclude>
- <exclude>**/*.tpl</exclude>
- <exclude>**/*.tgz</exclude>
- <exclude>**/VERSION*</exclude>
- <exclude>license/copyright*</exclude>
- <exclude>**/*.txt</exclude>
- <exclude>**/*.config</exclude>
- <exclude>**/*.yang</exclude>
- <exclude>settings.xml</exclude>
- <exclude>**/*.openapi-generator-ignore</exclude>
- <exclude>**/src/main/resources/v1/.openapi-generator/*</exclude>
- <exclude>generated/*</exclude>
- <exclude>generated*/</exclude>
- <exclude>dependencies/*</exclude>
- <exclude>dependencies*/</exclude>
- <exclude>teiv/src/main/resources/v1/**/*.html</exclude>
- <exclude>teiv/src/main/resources/v1/topology-exposure-inventory-openapi.json</exclude>
- <exclude>pgsql-schema-generator/src/main/resources/scripts/custom-sql-script.sql</exclude>
- <exclude>pgsql-schema-generator/src/test/resources/baseline-schema/custom-sql-script.sql</exclude>
- </excludes>
- </licenseSet>
- </licenseSets>
- <headerDefinitions>
- <headerDefinition>${maven.multiModuleProjectDirectory}/license/javaHeaderDefinition.xml</headerDefinition>
- <headerDefinition>${maven.multiModuleProjectDirectory}/license/xmlHeaderDefinition.xml</headerDefinition>
- </headerDefinitions>
- <mapping>
- <java>JAVADOC_STYLE</java>
- <groovy>JAVADOC_STYLE</groovy>
- <g4>JAVADOC_STYLE</g4>
- <xml>XML_STYLE</xml>
- </mapping>
+ <excludes>
+ <exclude>**/*.html</exclude>
+ <exclude>**/*.tpl</exclude>
+ <exclude>**/*.tgz</exclude>
+ <exclude>**/VERSION*</exclude>
+ <exclude>license/copyright*</exclude>
+ <exclude>**/*.txt</exclude>
+ <exclude>**/*.config</exclude>
+ <exclude>**/*.yang</exclude>
+ <exclude>settings.xml</exclude>
+ <exclude>**/*.openapi-generator-ignore</exclude>
+ <exclude>**/src/main/resources/v1/.openapi-generator/*</exclude>
+ <exclude>generated/*</exclude>
+ <exclude>generated*/</exclude>
+ <exclude>dependencies/*</exclude>
+ <exclude>dependencies*/</exclude>
+ <exclude>src/main/resources/v1/html/**/*</exclude>
+ <exclude>src/main/resources/v1/README.md</exclude>
+ <exclude>src/main/resources/v1/topology-exposure-inventory-openapi.json</exclude>
+ <exclude>src/test/resources/basics/file-based-resolver-test/folder2/file5</exclude>
+ <exclude>src/test/resources/META-INF/MANIFEST.MF</exclude>
+ <exclude>pgsql-schema-generator/src/main/resources/scripts/custom-sql-script.sql</exclude>
+ <exclude>pgsql-schema-generator/src/test/resources/baseline-schema/custom-sql-script.sql</exclude>
+ <exclude>.tox/**</exclude>
+ <exclude>docs/_build/**</exclude>
+ <exclude>**/*.helmignore</exclude>
+ </excludes>
</configuration>
</plugin>
<plugin>
<trimTrailingWhitespace />
<removeUnusedImports />
<endWithNewline />
- <licenseHeader>
- <file>${maven.multiModuleProjectDirectory}/CopyrightSample.txt</file>
- </licenseHeader>
</java>
<groovy>
<includes>
<include>**/*.groovy</include>
</includes>
+ <excludes>
+ <exclude>target/**/*.groovy</exclude>
+ </excludes>
<greclipse>
<file>${maven.multiModuleProjectDirectory}/code_conventions.xml</file>
</greclipse>
- <licenseHeader>
- <file>${maven.multiModuleProjectDirectory}/CopyrightSample.txt</file>
- </licenseHeader>
<endWithNewline />
</groovy>
</configuration>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
+ <version>${version.snakeyaml}</version>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>${version.antlr}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents.client5</groupId>
+ <artifactId>httpclient5</artifactId>
+ <version>5.4.1</version>
+ </dependency>
<dependency>
<groupId>org.oran.smo.yangtools.parser</groupId>
<artifactId>yang-parser-jar</artifactId>
<version>${version.asciidoctor-maven-plugin}</version>
<configuration>
<sourceDirectory>${project.basedir}/target/generated-contract-docs</sourceDirectory>
- <outputDirectory>${project.basedir}/doc/contracts-ties</outputDirectory>
+ <outputDirectory>${project.basedir}/doc/contracts-teiv</outputDirectory>
</configuration>
<executions>
<execution>
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <version>0.15</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
* https://github.com/antlr/grammars-v4/blob/master/xpath/xpath31/XPath31Parser.g4
*/
-grammar tiesPath ;
+grammar teivPath ;
-tiesPath : ( prefix | incorrectPrefix ) multipleLeafConditions? containsTextFunctionCondition? textFunctionCondition? containsFunctionCondition? withinMetersFunctionCondition? coveredByFunctionCondition? ancestorAxis? invalidPostFix? containerName? fieldLeaf?;
+teivPath : ( prefix | incorrectPrefix ) multipleLeafConditions? containsTextFunctionCondition? textFunctionCondition? containsFunctionCondition? withinMetersFunctionCondition? coveredByFunctionCondition? ancestorAxis? invalidPostFix? containerName? fieldLeaf?;
ancestorAxis : SLASH KW_ANCESTOR COLONCOLON ancestorPath ;
coveredByFunctionCondition : OB KW_COVERED_BY OP AT leafName COMMA StringLiteral CP CB ;
-// Onnly EQ supported for now
-comparativeOperators : ( EQ /*| GT | LT | GE | LE */ ) ;
+// GT,LT,GE and LE only supported for lastModified and firstDiscovered in metadata - if used for other attributes this filter will be ignored
+comparativeOperators : ( EQ | GT | LT | GE | LE ) ;
invalidPostFix : (AT | CB | COLONCOLON | comparativeOperators ).+ ;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
-import org.springframework.boot.web.client.RestTemplateBuilder;
+import org.springframework.boot.http.client.ClientHttpRequestFactoryBuilder;
+import org.springframework.boot.http.client.HttpComponentsClientHttpRequestFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.web.client.RestTemplate;
+import org.springframework.web.client.RestClient;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.oran.smo.teiv.service.JSONBSerializer;
}
/**
- * Making a RestTemplate, using the RestTemplateBuilder, to use for consumption of RESTful
+ * Making a RestClient, using RestClient.Builder, to use for consumption of RESTful
* interfaces.
*
- * @param restTemplateBuilder
- * RestTemplateBuilder instance
+ * @param restClientBuilder
+ * WebClient.Builder instance
*
- * @return RestTemplate
+ * @return RestClient
*/
@Bean
- public RestTemplate restTemplate(final RestTemplateBuilder restTemplateBuilder) {
- return restTemplateBuilder.build();
+ public RestClient restClient(final RestClient.Builder restClientBuilder) {
+ return restClientBuilder.build();
}
/**
new JSONBSerializer());
}
+ /*
+ * Apache HTTP Components have changed defaults in the HttpClient
+ * relating to HTTP/1.1 TLS upgrades. This bean restores previous
+ * behavior, fixing issues with Istio.
+ * https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.4-Release-Notes
+ */
+ @Bean
+ public HttpComponentsClientHttpRequestFactoryBuilder httpComponentsClientHttpRequestFactoryBuilder() {
+ return ClientHttpRequestFactoryBuilder.httpComponents().withDefaultRequestConfigCustomizer(builder -> builder
+ .setProtocolUpgradeEnabled(false));
+ }
+
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
this.meterRegistry = meterRegistry;
- numReceivedCloudEventCreate = Counter.builder("ties_ingestion_event_topology_create_total").register(meterRegistry);
+ numReceivedCloudEventCreate = Counter.builder("teiv_ingestion_event_topology_create_total").register(meterRegistry);
- numReceivedCloudEventMerge = Counter.builder("ties_ingestion_event_topology_merge_total").register(meterRegistry);
+ numReceivedCloudEventMerge = Counter.builder("teiv_ingestion_event_topology_merge_total").register(meterRegistry);
- numReceivedCloudEventDelete = Counter.builder("ties_ingestion_event_topology_delete_total").register(meterRegistry);
+ numReceivedCloudEventDelete = Counter.builder("teiv_ingestion_event_topology_delete_total").register(meterRegistry);
numReceivedCloudEventSourceEntityDelete = Counter.builder(
- "ties_ingestion_event_topology_source_entity_delete_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_source_entity_delete_total").register(meterRegistry);
- numReceivedCloudEventNotSupported = Counter.builder("ties_ingestion_event_topology_not_supported_total").register(
+ numReceivedCloudEventNotSupported = Counter.builder("teiv_ingestion_event_topology_not_supported_total").register(
meterRegistry);
- numSuccessfullyParsedMergeCloudEvents = Counter.builder("ties_ingestion_event_topology_merge_parse_success_total")
+ numSuccessfullyParsedMergeCloudEvents = Counter.builder("teiv_ingestion_event_topology_merge_parse_success_total")
.register(meterRegistry);
- numSuccessfullyParsedCreateCloudEvents = Counter.builder("ties_ingestion_event_topology_create_parse_success_total")
+ numSuccessfullyParsedCreateCloudEvents = Counter.builder("teiv_ingestion_event_topology_create_parse_success_total")
.register(meterRegistry);
- numSuccessfullyParsedDeleteCloudEvents = Counter.builder("ties_ingestion_event_topology_delete_parse_success_total")
+ numSuccessfullyParsedDeleteCloudEvents = Counter.builder("teiv_ingestion_event_topology_delete_parse_success_total")
.register(meterRegistry);
numSuccessfullyParsedSourceEntityDeleteCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_source_entity_delete_parse_success_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_source_entity_delete_parse_success_total").register(meterRegistry);
- numUnsuccessfullyParsedMergeCloudEvents = Counter.builder("ties_ingestion_event_topology_merge_parse_fail_total")
+ numUnsuccessfullyParsedMergeCloudEvents = Counter.builder("teiv_ingestion_event_topology_merge_parse_fail_total")
.register(meterRegistry);
- numUnsuccessfullyParsedCreateCloudEvents = Counter.builder("ties_ingestion_event_topology_create_parse_fail_total")
+ numUnsuccessfullyParsedCreateCloudEvents = Counter.builder("teiv_ingestion_event_topology_create_parse_fail_total")
.register(meterRegistry);
- numUnsuccessfullyParsedDeleteCloudEvents = Counter.builder("ties_ingestion_event_topology_delete_parse_fail_total")
+ numUnsuccessfullyParsedDeleteCloudEvents = Counter.builder("teiv_ingestion_event_topology_delete_parse_fail_total")
.register(meterRegistry);
numUnsuccessfullyParsedSourceEntityDeleteCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_source_entity_delete_parse_fail_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_source_entity_delete_parse_fail_total").register(meterRegistry);
numSuccessfullyPersistedMergeCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_merge_persist_success_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_merge_persist_success_total").register(meterRegistry);
numSuccessfullyPersistedCreateCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_create_persist_success_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_create_persist_success_total").register(meterRegistry);
numSuccessfullyPersistedDeleteCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_delete_persist_success_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_delete_persist_success_total").register(meterRegistry);
numSuccessfullyPersistedSourceEntityDeleteCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_source_entity_delete_persist_success_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_source_entity_delete_persist_success_total").register(meterRegistry);
numUnsuccessfullyPersistedMergeCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_merge_persist_fail_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_merge_persist_fail_total").register(meterRegistry);
numUnsuccessfullyPersistedCreateCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_create_persist_fail_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_create_persist_fail_total").register(meterRegistry);
numUnsuccessfullyPersistedDeleteCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_delete_persist_fail_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_delete_persist_fail_total").register(meterRegistry);
numUnsuccessfullyPersistedSourceEntityDeleteCloudEvents = Counter.builder(
- "ties_ingestion_event_topology_source_entity_delete_persist_fail_total").register(meterRegistry);
+ "teiv_ingestion_event_topology_source_entity_delete_persist_fail_total").register(meterRegistry);
numUnsuccessfullyExposedRelationshipsByEntityId = Counter.builder(
- "ties_exposure_http_get_relationships_by_entity_id_fail_total").register(meterRegistry);
+ "teiv_exposure_http_get_relationships_by_entity_id_fail_total").register(meterRegistry);
- numUnsuccessfullyExposedEntityById = Counter.builder("ties_exposure_http_get_entity_by_id_fail_total").register(
+ numUnsuccessfullyExposedEntityById = Counter.builder("teiv_exposure_http_get_entity_by_id_fail_total").register(
meterRegistry);
- numUnsuccessfullyExposedEntitiesByType = Counter.builder("ties_exposure_http_get_entities_by_type_fail_total")
+ numUnsuccessfullyExposedEntitiesByType = Counter.builder("teiv_exposure_http_get_entities_by_type_fail_total")
.register(meterRegistry);
- numUnsuccessfullyExposedEntitiesByDomain = Counter.builder("ties_exposure_http_get_entities_by_domain_fail_total")
+ numUnsuccessfullyExposedEntitiesByDomain = Counter.builder("teiv_exposure_http_get_entities_by_domain_fail_total")
.register(meterRegistry);
- numUnsuccessfullyExposedRelationshipById = Counter.builder("ties_exposure_http_get_relationship_by_id_fail_total")
+ numUnsuccessfullyExposedRelationshipById = Counter.builder("teiv_exposure_http_get_relationship_by_id_fail_total")
.register(meterRegistry);
numUnsuccessfullyExposedRelationshipsByType = Counter.builder(
- "ties_exposure_http_get_relationships_by_type_fail_total").register(meterRegistry);
+ "teiv_exposure_http_get_relationships_by_type_fail_total").register(meterRegistry);
- numUnsuccessfullyExposedRelationshipTypes = Counter.builder("ties_exposure_http_get_relationship_types_fail_total")
+ numUnsuccessfullyExposedRelationshipTypes = Counter.builder("teiv_exposure_http_get_relationship_types_fail_total")
.register(meterRegistry);
- numUnsuccessfullyExposedEntityTypes = Counter.builder("ties_exposure_http_get_entity_types_fail_total").register(
+ numUnsuccessfullyExposedEntityTypes = Counter.builder("teiv_exposure_http_get_entity_types_fail_total").register(
meterRegistry);
- numUnsuccessfullyExposedDomainTypes = Counter.builder("ties_exposure_http_get_domain_types_fail_total").register(
+ numUnsuccessfullyExposedDomainTypes = Counter.builder("teiv_exposure_http_get_domain_types_fail_total").register(
meterRegistry);
- numUnsuccessfullyUpdatedClassifiers = Counter.builder("ties_exposure_http_update_classifiers_fail_total").register(
+ numUnsuccessfullyUpdatedClassifiers = Counter.builder("teiv_exposure_http_update_classifiers_fail_total").register(
meterRegistry);
- numUnsuccessfullyUpdatedDecorators = Counter.builder("ties_exposure_http_update_decorators_fail_total").register(
+ numUnsuccessfullyUpdatedDecorators = Counter.builder("teiv_exposure_http_update_decorators_fail_total").register(
meterRegistry);
- cloudEventMergePersistTime = Timer.builder("ties_ingestion_event_topology_merge_persist_seconds").register(
+ cloudEventMergePersistTime = Timer.builder("teiv_ingestion_event_topology_merge_persist_seconds").register(
meterRegistry);
- cloudEventCreatePersistTime = Timer.builder("ties_ingestion_event_topology_create_persist_seconds").register(
+ cloudEventCreatePersistTime = Timer.builder("teiv_ingestion_event_topology_create_persist_seconds").register(
meterRegistry);
- cloudEventDeletePersistTime = Timer.builder("ties_ingestion_event_topology_delete_persist_seconds").register(
+ cloudEventDeletePersistTime = Timer.builder("teiv_ingestion_event_topology_delete_persist_seconds").register(
meterRegistry);
cloudEventSourceEntityDeletePersistTime = Timer.builder(
- "ties_ingestion_event_topology_source_entity_delete_persist_seconds").register(meterRegistry);
+ "teiv_ingestion_event_topology_source_entity_delete_persist_seconds").register(meterRegistry);
- cloudEventMergeParseTime = Timer.builder("ties_ingestion_event_topology_merge_parse_seconds").register(
+ cloudEventMergeParseTime = Timer.builder("teiv_ingestion_event_topology_merge_parse_seconds").register(
meterRegistry);
- cloudEventCreateParseTime = Timer.builder("ties_ingestion_event_topology_create_parse_seconds").register(
+ cloudEventCreateParseTime = Timer.builder("teiv_ingestion_event_topology_create_parse_seconds").register(
meterRegistry);
- cloudEventDeleteParseTime = Timer.builder("ties_ingestion_event_topology_delete_parse_seconds").register(
+ cloudEventDeleteParseTime = Timer.builder("teiv_ingestion_event_topology_delete_parse_seconds").register(
meterRegistry);
cloudEventSourceEntityDeleteParseTime = Timer.builder(
- "ties_ingestion_event_topology_source_entity_delete_parse_seconds").register(meterRegistry);
+ "teiv_ingestion_event_topology_source_entity_delete_parse_seconds").register(meterRegistry);
- numIgnoredAttributes = Counter.builder("ties_ingestion_event_ignored_attributes_total").register(meterRegistry);
+ numIgnoredAttributes = Counter.builder("teiv_ingestion_event_ignored_attributes_total").register(meterRegistry);
}
/**
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.springframework.stereotype.Component;
/**
- * Health Check component for TIES exposure.
+ * Health Check component for TEIV exposure.
*/
@Component
@Profile("exposure")
-public class TiesExposureHealthIndicator extends TiesKafkaHealthIndicator {
+public class TeivExposureHealthIndicator extends TeivKafkaHealthIndicator {
- public TiesExposureHealthIndicator(HealthStatus healthStatus,
+ public TeivExposureHealthIndicator(HealthStatus healthStatus,
DependentServiceAvailabilityKafka dependentServiceAvailabilityKafka) {
super(healthStatus, dependentServiceAvailabilityKafka);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.springframework.stereotype.Component;
/**
- * Health Check component for TIES exposure.
+ * Health Check component for TEIV exposure.
*/
@Component
@Profile("groups")
-public class TiesGroupsHealthIndicator extends TiesHealthIndicator {
+public class TeivGroupsHealthIndicator extends TeivHealthIndicator {
- public TiesGroupsHealthIndicator(HealthStatus healthStatus) {
+ public TeivGroupsHealthIndicator(HealthStatus healthStatus) {
super(healthStatus);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.extern.slf4j.Slf4j;
@Slf4j
-public abstract class TiesHealthIndicator implements HealthIndicator {
+public abstract class TeivHealthIndicator implements HealthIndicator {
protected final HealthStatus healthStatus;
protected abstract String getServiceName();
- protected TiesHealthIndicator(HealthStatus healthStatus) {
+ protected TeivHealthIndicator(HealthStatus healthStatus) {
this.healthStatus = healthStatus;
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.availability.DependentServiceAvailabilityKafka;
/**
- * Health Check component for TIES ingestion.
+ * Health Check component for TEIV ingestion.
*/
@Component
@Profile("ingestion")
-public class TiesIngestionHealthIndicator extends TiesKafkaHealthIndicator {
+public class TeivIngestionHealthIndicator extends TeivKafkaHealthIndicator {
@Override
protected String getServiceName() {
return "top-exp-inv-ingestion";
}
- public TiesIngestionHealthIndicator(HealthStatus healthStatus,
+ public TeivIngestionHealthIndicator(HealthStatus healthStatus,
DependentServiceAvailabilityKafka dependentServiceAvailabilityKafka) {
super(healthStatus, dependentServiceAvailabilityKafka);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.availability.DependentServiceAvailabilityKafka;
@Slf4j
-public abstract class TiesKafkaHealthIndicator extends TiesHealthIndicator {
+public abstract class TeivKafkaHealthIndicator extends TeivHealthIndicator {
protected final DependentServiceAvailabilityKafka dependentServiceAvailabilityKafka;
protected abstract String getServiceName();
- protected TiesKafkaHealthIndicator(HealthStatus healthStatus,
+ protected TeivKafkaHealthIndicator(HealthStatus healthStatus,
DependentServiceAvailabilityKafka dependentServiceAvailabilityKafka) {
super(healthStatus);
this.dependentServiceAvailabilityKafka = dependentServiceAvailabilityKafka;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.Getter;
+import static org.oran.smo.teiv.utils.TeivConstants.URN_PREFIX;
+
@Getter
-public class TiesException extends RuntimeException {
+public class TeivException extends RuntimeException {
private final HttpStatus status;
private final String message;
private final String details;
private final Exception exception;
- public static TiesException unknownModule(final String module) {
+ public static TeivException unknownModule(final String module) {
return clientException("Unknown module", String.format("Unknown module: %s", module));
}
- public static TiesException unknownTopologyObjectType(final String topologyObject) {
+ public static TeivException unknownTopologyObjectType(final String topologyObject) {
return serverException("Unknown topology object type", String.format("Unknown topology object type: %s",
topologyObject), null);
}
// Request validation
- public static TiesException unknownDomain(final String domain, final Collection<String> domains) {
+ public static TeivException unknownDomain(final String domain, final Collection<String> domains) {
return clientException("Unknown domain", String.format("Unknown domain: %s, known domains: %s", domain, domains));
}
- public static TiesException unknownEntityType(final String entityType, final Collection<String> entityTypes) {
+ public static TeivException invalidTopologyID(String id) {
+ return clientException("Topology ID format not supported", String.format(
+ "Topology ID : %s is not in supported format. Topology ID should start with %s", id, URN_PREFIX));
+ }
+
+ public static TeivException unknownEntityType(final String entityType, final Collection<String> entityTypes) {
return clientException("Unknown entity type", String.format(
"Entity type %s is not part of the model, known entity types: %s", entityType, entityTypes));
}
- public static TiesException unknownEntityTypeInDomain(final String entityType, final String domain,
+ public static TeivException unknownEntityTypeInDomain(final String entityType, final String domain,
final Collection<String> entityTypesInDomain) {
return clientException("Unknown entity type", String.format(
"Entity type %s is not part of the domain %s, known entity types: %s", entityType, domain,
entityTypesInDomain));
}
- public static TiesException unknownRelationshipType(final String relationshipType,
+ public static TeivException unknownRelationshipType(final String relationshipType,
final Collection<String> relationshipTypes) {
return clientException("Unknown relationship type", String.format(
"Relationship type %s is not part of the model, known relationship types: %s", relationshipType,
relationshipTypes));
}
- public static TiesException unknownRelationshipTypeInDomain(final String relationshipType, final String domain,
+ public static TeivException unknownRelationshipTypeInDomain(final String relationshipType, final String domain,
final Collection<String> relationshipTypesInDomain) {
return clientException("Unknown relationship type", String.format(
"Relationship type %s is not part of the domain %s, known relationship types: %s", relationshipType, domain,
}
// Schema validation
- public static TiesException invalidSchema(final String name) {
+ public static TeivException invalidSchema(final String name) {
return clientException("Invalid schema name", String.format("Invalid schema name: %s", name));
}
- public static TiesException invalidFileInput(final String error) {
+ public static TeivException invalidFileInput(final String error) {
return clientException("Invalid file input", String.format("Invalid file input: %s", error));
}
- public static TiesException duplicateEntryForClassifiers(final String name) {
+ public static TeivException duplicateEntryForClassifiers(final String name) {
return clientException("Duplicate entry in schema", String.format("Duplicate classifier present in schema: %s",
name));
}
- public static TiesException duplicateEntryForDecorators(final String name) {
+ public static TeivException duplicateEntryForDecorators(final String name) {
return clientException("Duplicate entry in schema", String.format("Duplicate decorator present in schema: %s",
name));
}
- public static TiesException schemaNotOwned(final String name) {
- return new TiesException("Forbidden", String.format("Schema %s is not owned by user", name), HttpStatus.FORBIDDEN,
+ public static TeivException schemaNotOwned(final String name) {
+ return new TeivException("Forbidden", String.format("Schema %s is not owned by user", name), HttpStatus.FORBIDDEN,
null);
}
- public static TiesException serverSQLException() {
+ public static TeivException serverSQLException() {
return serverException("Sql exception during query execution", "Please check the logs for more details", null);
}
- public static TiesException unParsedTopologyObjectType(String topologyObjectName) {
+ public static TeivException unParsedTopologyObjectType(String topologyObjectName) {
return serverException(String.format("Un parsed topology object type: %s", topologyObjectName),
"Please check the logs for more details", null);
}
- public static TiesException invalidContainerType(String containerType) {
+ public static TeivException invalidContainerType(String containerType) {
return serverException(String.format("Invalid container type: %s", containerType),
"Please check the logs for more details", null);
}
- public static TiesException invalidAssociationType(final String association) {
+ public static TeivException invalidAssociationType(final String association) {
return serverException(String.format("Invalid association type: %s", association),
"Please check the logs for more details", null);
}
- public static TiesException resourceNotFoundException(final String id) {
- return new TiesException("Resource Not Found", String.format("The requested resource is not found. ID: %s", id),
+ public static TeivException resourceNotFoundException(final String id) {
+ return new TeivException("Resource Not Found", String.format("The requested resource is not found. ID: %s", id),
HttpStatus.NOT_FOUND, null);
}
- public static TiesException resourceNotFoundException(Set<String> entityIds, Set<String> relationshipIds) {
- return new TiesException("Resource Not Found", String.format(
+ public static TeivException resourceNotFoundException(Set<String> entityIds, Set<String> relationshipIds) {
+ return new TeivException("Resource Not Found", String.format(
"The requested resource with the following ids cannot be found. Entities: %s Relationships: %s", entityIds,
relationshipIds), HttpStatus.NOT_FOUND, null);
}
- public static TiesException invalidClassifiersException(List<String> classifiers) {
- return new TiesException("Invalid classifiers", String.format("The provided classifiers are invalid %s",
+ public static TeivException invalidClassifiersException(List<String> classifiers) {
+ return new TeivException("Invalid classifiers", String.format("The provided classifiers are invalid %s",
classifiers), HttpStatus.NOT_FOUND, null);
}
- public static TiesException invalidDecoratorsException(Map<String, String> problems) {
- return new TiesException("Invalid decorators", String.format("The provided decorators are invalid %s", problems),
+ public static TeivException invalidDecoratorsException(Map<String, String> problems) {
+ return new TeivException("Invalid decorators", String.format("The provided decorators are invalid %s", problems),
HttpStatus.NOT_FOUND, null);
}
- public static TiesException invalidValueException(String valueName, Integer valueLimit, Boolean isLowerLimit) {
+ public static TeivException invalidValueException(String valueName, Integer valueLimit, Boolean isLowerLimit) {
return clientException("Invalid Value", String.format("%s cannot be %s than %d", valueName, isLowerLimit ?
"larger" :
"lower", valueLimit));
}
- public static TiesException invalidJsonFormat(Exception exception) {
+ public static TeivException invalidJsonFormat(Exception exception) {
return serverException("Invalid json format", "Please check the logs for more details", exception);
}
- public static TiesException serverException(String message, String details, Exception exception) {
- return new TiesException(message, details, HttpStatus.INTERNAL_SERVER_ERROR, exception);
+ public static TeivException serverException(String message, String details, Exception exception) {
+ return new TeivException(message, details, HttpStatus.INTERNAL_SERVER_ERROR, exception);
}
- public static TiesException clientException(String message, String details) {
- return new TiesException(message, details, HttpStatus.BAD_REQUEST, null);
+ public static TeivException clientException(String message, String details) {
+ return new TeivException(message, details, HttpStatus.BAD_REQUEST, null);
}
- public static TiesException schemaInDeletingState(String moduleName) {
- return new TiesException("Schema in deleting state", String.format(
+ public static TeivException schemaInDeletingState(String moduleName) {
+ return new TeivException("Schema in deleting state", String.format(
"Schema %s already exists and is in the process of being deleted. This may take some time, please try again later.",
moduleName), HttpStatus.CONFLICT, null);
}
- private TiesException(String message, String details, HttpStatus status, Exception exception) {
+ private TeivException(String message, String details, HttpStatus status, Exception exception) {
this.status = status;
this.message = message;
this.details = details;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.extern.slf4j.Slf4j;
import org.oran.smo.teiv.api.model.OranTeivClassifier;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.classifiers.api.ClassifiersService;
import org.oran.smo.teiv.exposure.consumerdata.ConsumerDataOperationRegistry;
import org.oran.smo.teiv.exposure.consumerdata.model.Classifiers;
import org.oran.smo.teiv.exposure.consumerdata.operation.ClassifiersOperation;
import org.oran.smo.teiv.exposure.spi.ModelRepository;
+import org.oran.smo.teiv.exposure.utils.RequestValidator;
import org.oran.smo.teiv.schema.ConsumerDataCache;
import org.oran.smo.teiv.service.models.OperationResult;
import org.springframework.context.annotation.Profile;
import java.util.function.Consumer;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA;
@Slf4j
@Service
private final ConsumerDataCache consumerDataCache;
private final ConsumerDataOperationRegistry consumerDataOperationRegistry;
+ private final RequestValidator requestValidator;
+
@Override
public void update(final OranTeivClassifier oranTeivClassifier) {
private void validateMerge(final Classifiers classifiers) {
log.debug(String.format("Validating merging %s", classifiers));
-
+ classifiers.entityIds().forEach(requestValidator::validateTopologyID);
+ classifiers.relationshipIds().forEach(requestValidator::validateTopologyID);
final List<String> problems = checkAvailability(classifiers);
if (!problems.isEmpty()) {
- throw TiesException.invalidClassifiersException(problems);
+ throw TeivException.invalidClassifiersException(problems);
}
}
for (String classifier : classifiers.data()) {
final String schemaName = classifier.split(":")[0];
- if (!modelRepository.doesModuleExists(TIES_CONSUMER_DATA, schemaName)) {
- throw TiesException.invalidSchema(schemaName);
+ if (!modelRepository.doesModuleExists(TEIV_CONSUMER_DATA, schemaName)) {
+ throw TeivException.invalidSchema(schemaName);
}
}
}
private void runMethodSafe(Consumer<Classifiers> consumer, Classifiers classifiers) {
try {
consumer.accept(classifiers);
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
log.error("Exception during validation", ex);
throw ex;
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.CustomMetrics;
import org.oran.smo.teiv.api.ClassifiersApi;
import org.oran.smo.teiv.api.model.OranTeivClassifier;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.audit.AuditMapper;
import org.oran.smo.teiv.exposure.audit.LoggerHandler;
import org.oran.smo.teiv.exposure.classifiers.api.ClassifiersService;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.http.HttpStatus;
@Slf4j
@RestController
-@RequestMapping(TiesConstants.REQUEST_MAPPING)
+@RequestMapping(TeivConstants.REQUEST_MAPPING)
@RequiredArgsConstructor
@Profile("exposure")
public class ClassifiersRestController implements ClassifiersApi {
private int limit;
@Override
- @Timed("ties_exposure_http_update_classifiers_seconds")
+ @Timed("teiv_exposure_http_update_classifiers_seconds")
public ResponseEntity<Void> updateClassifier(final String accept, final String contentType,
final OranTeivClassifier oranTeivClassifier) {
return runWithFailCheck(() -> {
if (Optional.ofNullable(oranTeivClassifier.getEntityIds()).orElseGet(Collections::emptyList).size() + Optional
.ofNullable(oranTeivClassifier.getRelationshipIds()).orElseGet(Collections::emptyList).size() > limit) {
- throw TiesException.clientException("Limit exceeded",
+ throw TeivException.clientException("Limit exceeded",
"Number of entities and relationships exceeded the limit");
}
runSafeMethod(() -> classifiersService.update(oranTeivClassifier), status -> loggerHandler.logAudit(log,
try {
runnable.run();
logAudit.accept(HttpStatus.NO_CONTENT);
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
logAudit.accept(ex.getStatus());
log.error("Exception during service call", ex);
throw ex;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.oran.smo.teiv.exposure.consumerdata;
import static org.jooq.impl.DSL.field;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.DECORATORS;
-import static org.oran.smo.teiv.utils.TiesConstants.MODULE_REFERENCE;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.MODULE_REFERENCE;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA;
import java.util.HashMap;
import java.util.HashSet;
import org.jooq.Record1;
import org.jooq.Record2;
import org.jooq.SelectConditionStep;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.YangDataTypes;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import org.springframework.stereotype.Service;
@Slf4j
public Set<String> loadClassifiers() {
final Field<Object> classifierName = field("classifiers.name").as("classifierName");
SelectConditionStep<Record1<Object>> availableClassifiers = runMethodSafe(() -> readDataDslContext.select(
- classifierName).from(String.format(TIES_CONSUMER_DATA, CLASSIFIERS)).join(String.format(TIES_CONSUMER_DATA,
- MODULE_REFERENCE)).on(field("\"moduleReferenceName\"").eq(field(String.format(TIES_CONSUMER_DATA,
- MODULE_REFERENCE) + ".name"))).where(field("status").like(TiesConstants.IN_USAGE)));
+ classifierName).from(String.format(TEIV_CONSUMER_DATA, CLASSIFIERS)).join(String.format(TEIV_CONSUMER_DATA,
+ MODULE_REFERENCE)).on(field("\"moduleReferenceName\"").eq(field(String.format(TEIV_CONSUMER_DATA,
+ MODULE_REFERENCE) + ".name"))).where(field("status").like(TeivConstants.IN_USAGE)));
Set<String> result = new HashSet<>();
for (Record record : availableClassifiers) {
result.add((String) record.get("classifierName"));
final Field<Object> decoratorName = field("decorators.name").as("decoratorName");
final Field<Object> dataType = field("decorators.\"dataType\"").as("dataType");
SelectConditionStep<Record2<Object, Object>> availableDecorators = runMethodSafe(() -> readDataDslContext.select(
- decoratorName, dataType).from(String.format(TIES_CONSUMER_DATA, DECORATORS)).join(String.format(
- TIES_CONSUMER_DATA, MODULE_REFERENCE)).on(field("\"moduleReferenceName\"").eq(field(String.format(
- TIES_CONSUMER_DATA, MODULE_REFERENCE) + ".name"))).where(field("status").like(
- TiesConstants.IN_USAGE)));
+ decoratorName, dataType).from(String.format(TEIV_CONSUMER_DATA, DECORATORS)).join(String.format(
+ TEIV_CONSUMER_DATA, MODULE_REFERENCE)).on(field("\"moduleReferenceName\"").eq(field(String.format(
+ TEIV_CONSUMER_DATA, MODULE_REFERENCE) + ".name"))).where(field("status").like(
+ TeivConstants.IN_USAGE)));
Map<String, YangDataTypes> result = new HashMap<>();
for (Record record : availableDecorators) {
result.put((String) record.get("decoratorName"), YangDataTypes.fromYangDataType("" + record.get("dataType")));
protected <T> T runMethodSafe(Supplier<T> supp) {
try {
return supp.get();
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
throw ex;
} catch (Exception ex) {
log.error("Sql exception during query execution", ex);
- throw TiesException.serverSQLException();
+ throw TeivException.serverSQLException();
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.List;
import java.util.Map;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.consumerdata.model.Classifiers;
import org.oran.smo.teiv.exposure.consumerdata.model.Decorators;
import org.oran.smo.teiv.schema.ConsumerDataCache;
final List<String> problems = checkAvailability(classifiers);
if (!problems.isEmpty()) {
- throw TiesException.invalidClassifiersException(problems);
+ throw TeivException.invalidClassifiersException(problems);
}
}
final Map<String, String> problems = checkAvailability(decorators);
if (!problems.isEmpty()) {
- throw TiesException.invalidDecoratorsException(problems);
+ throw TeivException.invalidDecoratorsException(problems);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.service.models.OperationResult;
import org.oran.smo.teiv.utils.JooqTypeConverter;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@Slf4j
public abstract class ClassifiersOperation extends ConsumerDataOperation<List<String>> {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.jooq.impl.DSL.table;
import org.jooq.exception.DataAccessException;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.consumerdata.model.ConsumerData;
import org.oran.smo.teiv.exposure.consumerdata.model.PersistableIdMap;
import org.oran.smo.teiv.schema.Persistable;
if (!entityCheckResult.idsNotFound().isEmpty() || !relationshipCheckResult.idsNotFound().isEmpty()) {
- throw TiesException.resourceNotFoundException(entityCheckResult.idsNotFound(), relationshipCheckResult
+ throw TeivException.resourceNotFoundException(entityCheckResult.idsNotFound(), relationshipCheckResult
.idsNotFound());
}
return supplier.get();
} catch (DataAccessException ex) {
log.error("Sql exception during query execution", ex);
- throw TiesException.serverSQLException();
+ throw TeivException.serverSQLException();
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.service.models.OperationResult;
import org.oran.smo.teiv.utils.JooqTypeConverter;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@Slf4j
public abstract class DecoratorsOperation extends ConsumerDataOperation<Map<String, Object>> {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.jooq.impl.DSL.select;
import static org.jooq.impl.DSL.table;
import static org.jooq.impl.DSL.val;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@Component
@Profile("exposure")
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.jooq.impl.DSL.table;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.val;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@Component
@Profile("exposure")
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.jooq.impl.DSL.select;
import static org.jooq.impl.DSL.table;
import static org.jooq.impl.DSL.val;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@Component
@Profile("exposure")
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.not;
import static org.jooq.impl.DSL.table;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@Component
@Profile("exposure")
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.List;
import java.util.Set;
-import org.oran.smo.teiv.exposure.tiespath.resolver.ScopeResolver;
+import org.oran.smo.teiv.exposure.teivpath.resolver.ScopeResolver;
import org.jooq.Record;
import org.jooq.Result;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.spi.DataRepository;
import org.oran.smo.teiv.exposure.spi.mapper.EntityMapper;
import org.oran.smo.teiv.exposure.spi.mapper.RelationshipMapper;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.FilterCriteria;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.InnerFilterCriteria;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.OrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.refiner.BasePathRefinement;
-import org.oran.smo.teiv.exposure.tiespath.resolver.TargetResolver;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.FilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.InnerFilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.OrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.refiner.BasePathRefinement;
+import org.oran.smo.teiv.exposure.teivpath.resolver.TargetResolver;
import org.oran.smo.teiv.exposure.utils.RequestDetails;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Service;
final EntityType entityType = SchemaRegistry.getEntityTypeByName(entityName);
final Result<Record> result = dataRepository.getEntityById(entityType, id);
if (result.isEmpty()) {
- throw TiesException.resourceNotFoundException(id);
+ throw TeivException.resourceNotFoundException(id);
}
return entityMapper.getItemsWithTotalCount(result).getLeft().get(0);
final RelationType relationType = SchemaRegistry.getRelationTypeByName(relationName);
final Result<Record> result = dataRepository.getRelationshipById(id, relationType);
if (result.isEmpty()) {
- throw TiesException.resourceNotFoundException(id);
+ throw TeivException.resourceNotFoundException(id);
}
return relationshipMapper.getItemsWithTotalCount(result).getLeft().get(0);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.exposure.data.api.DataService;
import org.oran.smo.teiv.exposure.utils.RequestDetails;
import org.oran.smo.teiv.exposure.utils.RequestValidator;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import org.springframework.context.annotation.Profile;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
@Slf4j
@RestController
-@RequestMapping(TiesConstants.REQUEST_MAPPING)
+@RequestMapping(TeivConstants.REQUEST_MAPPING)
@RequiredArgsConstructor
@Profile("exposure")
public class DataController implements EntitiesAndRelationshipsApi {
private final CustomMetrics customMetrics;
@Override
- @Timed("ties_exposure_http_get_domain_types_seconds")
+ @Timed("teiv_exposure_http_get_domain_types_seconds")
public ResponseEntity<OranTeivDomains> getAllDomains(@NotNull String accept, @Min(0) @Valid final Integer offset,
@Min(1) @Max(500) @Valid final Integer limit) {
return runWithFailCheck(() -> new ResponseEntity<>(dataService.getDomainTypes(RequestDetails.builder().offset(
}
@Override
- @Timed("ties_exposure_http_get_entity_types_seconds")
+ @Timed("teiv_exposure_http_get_entity_types_seconds")
public ResponseEntity<OranTeivEntityTypes> getTopologyEntityTypes(@NotNull String accept, String domain,
@Min(0) @Valid final Integer offset, @Min(1) @Max(500) @Valid final Integer limit) {
return runWithFailCheck(() -> {
}
@Override
- @Timed("ties_exposure_http_get_relationship_types_seconds")
+ @Timed("teiv_exposure_http_get_relationship_types_seconds")
public ResponseEntity<OranTeivRelationshipTypes> getTopologyRelationshipTypes(@NotNull String accept, String domain,
@Min(0) @Valid final Integer offset, @Min(1) @Max(500) @Valid final Integer limit) {
return runWithFailCheck(() -> {
}
@Override
- @Timed("ties_exposure_http_get_relationships_by_type_seconds")
+ @Timed("teiv_exposure_http_get_relationships_by_type_seconds")
public ResponseEntity<OranTeivRelationshipsResponseMessage> getRelationshipsByType(@NotNull String accept,
String domain, String relationshipType, @Valid String targetFilter, @Valid String scopeFilter,
@Min(0) @Valid final Integer offset, @Min(1) @Max(500) @Valid final Integer limit) {
}
@Override
- @Timed("ties_exposure_http_get_entity_by_id_seconds")
+ @Timed("teiv_exposure_http_get_entity_by_id_seconds")
public ResponseEntity<Object> getTopologyById(@NotNull final String accept, final String domain,
final String entityType, final String id) {
return runWithFailCheck(() -> {
requestValidator.validateDomain(domain);
requestValidator.validateEntityType(entityType);
requestValidator.validateEntityTypeInDomain(entityType, domain);
+ requestValidator.validateTopologyID(id);
return new ResponseEntity<>(dataService.getEntityById(entityType, id), HttpStatus.OK);
}, customMetrics::incrementNumUnsuccessfullyExposedEntityById);
}
@Override
- @Timed("ties_exposure_http_get_entities_by_type_seconds")
+ @Timed("teiv_exposure_http_get_entities_by_type_seconds")
public ResponseEntity<OranTeivEntitiesResponseMessage> getTopologyByEntityTypeName(@NotNull final String accept,
final String domain, final String entityType, @Valid final String targetFilter, @Valid final String scopeFilter,
@Min(0) @Valid final Integer offset, @Min(1) @Max(500) @Valid final Integer limit) {
}
@Override
- @Timed("ties_exposure_http_get_entities_by_domain_seconds")
+ @Timed("teiv_exposure_http_get_entities_by_domain_seconds")
public ResponseEntity<OranTeivEntitiesResponseMessage> getEntitiesByDomain(@NotNull final String accept,
final String domain, @Valid final String targetFilter, @Valid final String scopeFilter,
@Min(0) @Valid final Integer offset, @Min(1) @Max(500) @Valid final Integer limit) {
}
@Override
- @Timed("ties_exposure_http_get_relationships_by_entity_id_seconds")
+ @Timed("teiv_exposure_http_get_relationships_by_entity_id_seconds")
public ResponseEntity<OranTeivRelationshipsResponseMessage> getAllRelationshipsForEntityId(@NotNull final String accept,
final String domain, final String entityType, final String id, @Valid final String targetFilter,
@Valid final String scopeFilter, @Min(0) @Valid final Integer offset,
requestValidator.validateDomain(domain);
requestValidator.validateEntityType(entityType);
requestValidator.validateEntityTypeInDomain(entityType, domain);
+ requestValidator.validateTopologyID(id);
return ResponseEntity.ok(dataService.getAllRelationshipsForObjectId(domain, entityType, id, targetFilter,
scopeFilter, RequestDetails.builder().offset(offset).limit(limit).basePath(String.format(
"/domains/%s/entity-types/%s/entities/%s/relationships", domain, entityType, id)).queryParam(
}
@Override
- @Timed("ties_exposure_http_get_relationship_by_id_seconds")
+ @Timed("teiv_exposure_http_get_relationship_by_id_seconds")
public ResponseEntity<Object> getRelationshipById(final String accept, final String domain,
final String relationshipType, final String id) {
return runWithFailCheck(() -> {
requestValidator.validateDomain(domain);
requestValidator.validateRelationshipType(relationshipType);
requestValidator.validateRelationshipTypeInDomain(relationshipType, domain);
+ requestValidator.validateTopologyID(id);
return ResponseEntity.ok(dataService.getRelationshipById(relationshipType, id));
}, customMetrics::incrementNumUnsuccessfullyExposedRelationshipById);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.oran.smo.teiv.api.model.OranTeivDecorator;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.consumerdata.ConsumerDataOperationRegistry;
import org.oran.smo.teiv.exposure.consumerdata.model.Decorators;
import org.oran.smo.teiv.exposure.consumerdata.operation.DecoratorsOperation;
import org.oran.smo.teiv.exposure.decorators.api.DecoratorsService;
import org.oran.smo.teiv.exposure.spi.ModelRepository;
+import org.oran.smo.teiv.exposure.utils.RequestValidator;
import org.oran.smo.teiv.schema.ConsumerDataCache;
import org.oran.smo.teiv.schema.YangDataTypes;
import org.oran.smo.teiv.service.models.OperationResult;
import java.util.List;
import java.util.function.Consumer;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA;
@Slf4j
@Service
private final ModelRepository modelRepository;
private final ConsumerDataCache consumerDataCache;
private final ConsumerDataOperationRegistry consumerDataOperationRegistry;
+ private final RequestValidator requestValidator;
@Override
public void update(final OranTeivDecorator oranTeivDecorator) {
public void validateMerge(final Decorators decorators) {
log.debug(String.format("Validating merging %s", decorators));
-
+ decorators.entityIds().forEach(requestValidator::validateTopologyID);
+ decorators.relationshipIds().forEach(requestValidator::validateTopologyID);
final Map<String, String> problems = checkAvailability(decorators);
if (!problems.isEmpty()) {
- throw TiesException.invalidDecoratorsException(problems);
+ throw TeivException.invalidDecoratorsException(problems);
}
}
for (String decorator : decorators.data().keySet()) {
final String schemaName = decorator.split(":")[0];
- if (!modelRepository.doesModuleExists(TIES_CONSUMER_DATA, schemaName)) {
- throw TiesException.invalidSchema(schemaName);
+ if (!modelRepository.doesModuleExists(TEIV_CONSUMER_DATA, schemaName)) {
+ throw TeivException.invalidSchema(schemaName);
}
}
}
private void runMethodSafe(Consumer<Decorators> consumer, Decorators classifiers) {
try {
consumer.accept(classifiers);
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
log.error("Exception during validation", ex);
throw ex;
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.CustomMetrics;
import org.oran.smo.teiv.api.DecoratorsApi;
import org.oran.smo.teiv.api.model.OranTeivDecorator;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.audit.AuditMapper;
import org.oran.smo.teiv.exposure.audit.LoggerHandler;
import org.oran.smo.teiv.exposure.decorators.api.DecoratorsService;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Profile;
import org.springframework.http.HttpStatus;
@Slf4j
@RestController
-@RequestMapping(TiesConstants.REQUEST_MAPPING)
+@RequestMapping(TeivConstants.REQUEST_MAPPING)
@RequiredArgsConstructor
@Profile("exposure")
public class DecoratorsRestController implements DecoratorsApi {
private int limit;
@Override
- @Timed("ties_exposure_http_update_decorators_seconds")
+ @Timed("teiv_exposure_http_update_decorators_seconds")
public ResponseEntity<Void> updateDecorator(final String accept, final String contentType,
final OranTeivDecorator oranTeivDecorator) {
return runWithFailCheck(() -> {
if (Optional.ofNullable(oranTeivDecorator.getEntityIds()).orElseGet(Collections::emptyList).size() + Optional
.ofNullable(oranTeivDecorator.getRelationshipIds()).orElseGet(Collections::emptyList).size() > limit) {
- throw TiesException.clientException("Limit exceeded",
+ throw TeivException.clientException("Limit exceeded",
"Number of entities and relationships exceeded the limit");
}
runSafeMethod(() -> decoratorsService.update(oranTeivDecorator), status -> loggerHandler.logAudit(log,
try {
runnable.run();
logAudit.accept(HttpStatus.NO_CONTENT);
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
logAudit.accept(ex.getStatus());
log.error("Exception during service call", ex);
throw ex;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.oran.smo.teiv.exposure.exception;
import org.oran.smo.teiv.api.model.OranTeivErrorMessage;
-import org.oran.smo.teiv.exception.TiesException;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.exception.TeivException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j;
public class ApplicationExceptionHandler extends ResponseEntityExceptionHandler {
@ResponseBody
- @ExceptionHandler(TiesException.class)
- public ResponseEntity<OranTeivErrorMessage> handleTiesException(final TiesException exception) {
+ @ExceptionHandler(TeivException.class)
+ public ResponseEntity<OranTeivErrorMessage> handleTeivException(final TeivException exception) {
if (exception.getException() != null) {
log.error(exception.getMessage(), exception.getException());
}
}
@ResponseBody
- @ExceptionHandler(TiesPathException.class)
- public ResponseEntity<Object> handleTiesPathException(final TiesPathException exception) {
+ @ExceptionHandler(TeivPathException.class)
+ public ResponseEntity<Object> handleTeivPathException(final TeivPathException exception) {
if (exception.getResponse() != null) {
return new ResponseEntity<>(exception.getResponse(), HttpStatus.OK);
} else {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.api.model.OranTeivHref;
import org.oran.smo.teiv.api.model.OranTeivSchema;
import org.oran.smo.teiv.api.model.OranTeivSchemaList;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exception.YangModelException;
import org.oran.smo.teiv.exposure.model.api.ModelService;
import org.oran.smo.teiv.exposure.spi.ModelRepository;
import static org.oran.smo.teiv.exposure.utils.PaginationUtil.nextHref;
import static org.oran.smo.teiv.exposure.utils.PaginationUtil.prevHref;
import static org.oran.smo.teiv.exposure.utils.PaginationUtil.selfHref;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.DECORATORS;
-import static org.oran.smo.teiv.utils.TiesConstants.INVALID_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.INVALID_SCHEMA;
@Slf4j
@Service
Map<String, String> decorators = (Map<String, String>) result.get(DECORATORS);
if (classifiers.isEmpty() && decorators.isEmpty()) {
log.warn("No classifiers and decorators found in module {} ", moduleName);
- throw TiesException.invalidFileInput(INVALID_SCHEMA);
+ throw TeivException.invalidFileInput(INVALID_SCHEMA);
}
modelRepository.createConsumerDataModule(Module.builder().name(moduleName).content(content).revision(revision)
.ownerAppId("APP").status(ModuleStatus.IN_USAGE).build(), classifiers, decorators);
return Optional.ofNullable(modelRepository.getModuleContentByName(name)).map(content -> new String(Base64
.getDecoder().decode(content), StandardCharsets.UTF_8)).orElseGet(() -> {
log.warn("No schema found with name: {}", name);
- throw TiesException.invalidSchema(name);
+ throw TeivException.invalidSchema(name);
});
}
schemaCleanUpService.cleanUpModule(name);
}, () -> {
log.warn("No module found with name: {}", name);
- throw TiesException.invalidSchema(name);
+ throw TeivException.invalidSchema(name);
});
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.api.SchemasApi;
import org.oran.smo.teiv.api.model.OranTeivSchemaList;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.audit.LoggerHandler;
import org.oran.smo.teiv.exposure.model.api.ModelService;
import org.oran.smo.teiv.exposure.utils.RequestDetails;
import org.oran.smo.teiv.exposure.utils.RequestValidator;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Profile;
@Slf4j
@RestController
-@RequestMapping(TiesConstants.REQUEST_MAPPING)
+@RequestMapping(TeivConstants.REQUEST_MAPPING)
@RequiredArgsConstructor
@Profile("exposure")
public class ModelController implements SchemasApi {
final String schemaName = modelService.createModule(file);
loggerHandler.logAudit(logger, String.format("Successful - Create schema %s", schemaName), context);
return new ResponseEntity<>(HttpStatus.CREATED);
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
loggerHandler.logAudit(logger, String.format("Failed - Create schema using provided file, %s", ex.getDetails()),
context);
log.error("Exception during service call", ex);
modelService.deleteConsumerModule(schemaName);
loggerHandler.logAudit(logger, String.format("Successful - Delete schema %s", schemaName), context);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
loggerHandler.logAudit(logger, String.format("Failed - Delete schema %s, %s", schemaName, ex.getDetails()),
context);
log.error("Exception during service call", ex);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.jooq.Record;
import org.jooq.Result;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.FilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.FilterCriteria;
import org.oran.smo.teiv.schema.EntityType;
+import org.oran.smo.teiv.schema.Persistable;
import org.oran.smo.teiv.schema.RelationType;
public interface DataRepository {
* @return the entity ids for classifier deletion
*/
List<String> getEntityIdsForClassifierDeletion(final EntityType entityType, final Set<String> classifiers);
+
+ /**
+ * Check if a topology object - entity or relationship - exists with given id and type.
+ *
+ * @param type
+ * The topology type
+ * @param id
+ * The id
+ * @return true if exists, false if it does not
+ */
+ boolean isTopologyExist(final Persistable type, final String id);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.table;
import static org.jooq.impl.DSL.val;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA;
+import static org.jooq.impl.DSL.name;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA;
import java.util.HashSet;
import java.util.List;
import org.jooq.SelectConditionStep;
import org.jooq.SelectOrderByStep;
import org.jooq.impl.DSL;
+import org.oran.smo.teiv.schema.Persistable;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.spi.DataRepository;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.FilterCriteria;
-import org.oran.smo.teiv.exposure.tiespath.refiner.BasePathRefinement;
-import org.oran.smo.teiv.exposure.tiespath.refiner.PathToJooqRefinement;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.FilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.refiner.BasePathRefinement;
+import org.oran.smo.teiv.exposure.teivpath.refiner.PathToJooqRefinement;
import org.oran.smo.teiv.schema.EntityType;
import org.oran.smo.teiv.schema.RelationType;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
@Slf4j
@Service
@Override
public Set<String> getClassifiersForSchema(final String schemaName) {
SelectConditionStep<Record> availableClassifiers = runMethodSafe(() -> readDataDslContext.select().from(String
- .format(TIES_CONSUMER_DATA, "classifiers")).where(field("\"moduleReferenceName\"").eq(schemaName)));
+ .format(TEIV_CONSUMER_DATA, "classifiers")).where(field("\"moduleReferenceName\"").eq(schemaName)));
Set<String> result = new HashSet<>();
for (Record record : availableClassifiers) {
result.add((String) record.get("name"));
@Override
public Set<String> getDecoratorsForSchema(final String schemaName) {
SelectConditionStep<Record> availableDecorators = runMethodSafe(() -> readDataDslContext.select().from(String
- .format(TIES_CONSUMER_DATA, "decorators")).where(field("\"moduleReferenceName\"").like(schemaName)));
+ .format(TEIV_CONSUMER_DATA, "decorators")).where(field("\"moduleReferenceName\"").like(schemaName)));
Set<String> result = new HashSet<>();
for (Record record : availableDecorators) {
result.add((String) record.get("name"));
.fetchInto(String.class));
}
+ @Override
+ public boolean isTopologyExist(final Persistable type, final String id) {
+ return runMethodSafe(() -> readDataDslContext.fetchExists(readDataDslContext.selectFrom(table(type.getTableName()))
+ .where(field(name(type.getIdColumnName())).eq(id))));
+ }
+
protected <T> T runMethodSafe(Supplier<T> supp) {
try {
return supp.get();
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
throw ex;
- } catch (TiesPathException ex) {
+ } catch (TeivPathException ex) {
log.error("Exception during query construction", ex);
throw ex;
} catch (Exception ex) {
log.error("Sql exception during query execution", ex);
- throw TiesException.serverSQLException();
+ throw TeivException.serverSQLException();
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.noCondition;
import static org.jooq.impl.DSL.table;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.DECORATORS;
-import static org.oran.smo.teiv.utils.TiesConstants.IN_USAGE;
-import static org.oran.smo.teiv.utils.TiesConstants.MODULE_REFERENCE_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.SCHEMA_ALREADY_EXISTS;
-import static org.oran.smo.teiv.utils.TiesConstants.SEMICOLON_SEPARATION;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_MODEL;
-import static org.oran.smo.teiv.utils.TiesConstants.MODULE_REFERENCE;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.IN_USAGE;
+import static org.oran.smo.teiv.utils.TeivConstants.MODULE_REFERENCE_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.SCHEMA_ALREADY_EXISTS;
+import static org.oran.smo.teiv.utils.TeivConstants.SEMICOLON_SEPARATION;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_MODEL;
+import static org.oran.smo.teiv.utils.TeivConstants.MODULE_REFERENCE;
import java.util.ArrayList;
import java.util.List;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.spi.ModelRepository;
import org.oran.smo.teiv.exposure.spi.Module;
import org.oran.smo.teiv.exposure.spi.ModuleStatus;
@Override
public Optional<Module> getConsumerModuleByName(final String name) {
final Record moduleRecord = runMethodSafe(() -> readDataDslContext.select().from(table(String.format(
- TIES_CONSUMER_DATA, MODULE_REFERENCE))).where(field("name").eq(name)).and(field(STATUS).eq(
+ TEIV_CONSUMER_DATA, MODULE_REFERENCE))).where(field("name").eq(name)).and(field(STATUS).eq(
ModuleStatus.IN_USAGE.name())).fetchAny());
return Optional.ofNullable(moduleRecord).map(module -> Module.builder().name((String) module.get(NAME)).namespace(
(String) module.get("namespace")).revision((String) module.get(REVISION)).ownerAppId((String) module.get(
public List<Module> getModules() {
return runMethodSafe(() -> {
final List<Module> modules = new ArrayList<>();
- final List<Module> modulesFromModelSchema = getModulesBySchema(TIES_MODEL);
- final List<Module> modulesFromConsumerDataSchema = getModulesBySchema(TIES_CONSUMER_DATA);
+ final List<Module> modulesFromModelSchema = getModulesBySchema(TEIV_MODEL);
+ final List<Module> modulesFromConsumerDataSchema = getModulesBySchema(TEIV_CONSUMER_DATA);
modules.addAll(modulesFromModelSchema);
modules.addAll(modulesFromConsumerDataSchema);
return modules;
@Override
public List<Module> getDeletingModulesOnStartup() {
return runMethodSafe(() -> {
- Select<Record> moduleRecords = readDataDslContext.select().from(table(String.format(TIES_CONSUMER_DATA,
+ Select<Record> moduleRecords = readDataDslContext.select().from(table(String.format(TEIV_CONSUMER_DATA,
MODULE_REFERENCE))).where(field(STATUS).eq(ModuleStatus.DELETING.name()));
Function<Record, Module> buildModuleFunction;
buildModuleFunction = buildConsumerModules();
@Override
public String getModuleContentByName(final String name) {
return runMethodSafe(() -> {
- String content = getModuleContentByNameFromSchema(TIES_MODEL, name);
+ String content = getModuleContentByNameFromSchema(TEIV_MODEL, name);
if (content == null || content.equals("")) {
- content = getModuleContentByNameFromSchema(TIES_CONSUMER_DATA, name);
+ content = getModuleContentByNameFromSchema(TEIV_CONSUMER_DATA, name);
}
return content;
});
}
private void createModule(DSLContext transactionalDSL, Module module) {
- createModuleWithDuplicateCheck(() -> transactionalDSL.insertInto(table(String.format(TIES_CONSUMER_DATA,
+ createModuleWithDuplicateCheck(() -> transactionalDSL.insertInto(table(String.format(TEIV_CONSUMER_DATA,
MODULE_REFERENCE))).set(field(NAME), module.getName()).set(field("content"), module.getContent()).set(field(
"\"ownerAppId\""), module.getOwnerAppId()).set(field(STATUS), module.getStatus().name()).set(field(
REVISION), module.getRevision()).execute(), module.getName());
@Override
public void updateModuleStatus(String name, ModuleStatus status) {
- runMethodSafe(() -> writeDataDslContext.update(table(String.format(TIES_CONSUMER_DATA, MODULE_REFERENCE))).set(
+ runMethodSafe(() -> writeDataDslContext.update(table(String.format(TEIV_CONSUMER_DATA, MODULE_REFERENCE))).set(
field(STATUS), status.name()).where(field("name").eq(name)).execute());
}
@Override
public void deleteModuleByName(String name) {
- runMethodSafe(() -> writeDataDslContext.deleteFrom(table(String.format(TIES_CONSUMER_DATA, MODULE_REFERENCE)))
+ runMethodSafe(() -> writeDataDslContext.deleteFrom(table(String.format(TEIV_CONSUMER_DATA, MODULE_REFERENCE)))
.where(field("name").eq(name)).execute());
}
.where(noCondition());
Function<Record, Module> buildModuleFunction;
- if (schemaName.equals(TIES_CONSUMER_DATA)) {
+ if (schemaName.equals(TEIV_CONSUMER_DATA)) {
moduleRecords = moduleRecords.$where((field(STATUS).eq(IN_USAGE)));
buildModuleFunction = buildConsumerModules();
} else {
private void insertValues(final DSLContext transactionalDSL, final String tableName, final List<String> columns,
final Consumer<InsertValuesStepN<?>> consumer) {
- InsertValuesStepN<?> executable = transactionalDSL.insertInto(table(String.format(TIES_CONSUMER_DATA, tableName)))
+ InsertValuesStepN<?> executable = transactionalDSL.insertInto(table(String.format(TEIV_CONSUMER_DATA, tableName)))
.columns(columns.stream().map(column -> field(column, String.class)).toList());
consumer.accept(executable);
return supp.get();
} catch (Exception ex) {
log.warn("Exception occurred during query execution.", ex);
- throw TiesException.serverSQLException();
+ throw TeivException.serverSQLException();
}
}
} catch (IntegrityConstraintViolationException icve) {
if (isModuleInDeletingState(moduleName)) {
log.warn("Module in deleting state", icve);
- throw TiesException.schemaInDeletingState(moduleName);
+ throw TeivException.schemaInDeletingState(moduleName);
} else {
log.warn("Module already exists", icve);
- throw TiesException.invalidFileInput(SCHEMA_ALREADY_EXISTS);
+ throw TeivException.invalidFileInput(SCHEMA_ALREADY_EXISTS);
}
} catch (Exception ex) {
log.warn("Exception occurred during query execution.", ex);
- throw TiesException.serverSQLException();
+ throw TeivException.serverSQLException();
}
}
private boolean isModuleInDeletingState(String moduleName) {
final SelectConditionStep<Record1<Integer>> query = readDataDslContext.selectOne().from(String.format(
- TIES_CONSUMER_DATA, MODULE_REFERENCE)).where(field(name(NAME)).eq(moduleName).and(field(STATUS).eq(
+ TEIV_CONSUMER_DATA, MODULE_REFERENCE)).where(field(name(NAME)).eq(moduleName).and(field(STATUS).eq(
ModuleStatus.DELETING.name())));
return query.fetchAny() != null;
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.exposure.spi.mapper;
-import static org.oran.smo.teiv.exposure.tiespath.refiner.AliasMapper.getOriginalAlias;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.PROPERTY_A_SIDE;
-import static org.oran.smo.teiv.utils.TiesConstants.PROPERTY_B_SIDE;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.SOURCE_IDS;
+import static org.oran.smo.teiv.exposure.teivpath.refiner.AliasMapper.getOriginalAlias;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.PROPERTY_A_SIDE;
+import static org.oran.smo.teiv.utils.TeivConstants.PROPERTY_B_SIDE;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.SOURCE_IDS;
import java.util.ArrayList;
import java.util.HashMap;
import org.oran.smo.teiv.schema.RelationType;
import lombok.extern.slf4j.Slf4j;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
@Slf4j
public abstract class ResponseMapper {
}
}
if (!attributes.isEmpty()) {
- data.put(TiesConstants.ATTRIBUTES, attributes);
+ data.put(TeivConstants.ATTRIBUTES, attributes);
}
item.put(managedObject, List.of(data));
return item;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import org.jooq.Condition;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@Override
public Set<Pair<String, Field>> getJoinCondition() {
- Set<Pair<String, Field>> tables = new HashSet<>();
+ Set<Pair<String, Field>> tables = new LinkedHashSet<>();
tables.addAll(children.get(0).getJoinCondition());
tables.addAll(children.get(1).getJoinCondition());
return tables;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.val;
-import static org.oran.smo.teiv.exposure.tiespath.innerlanguage.QueryFunction.EQ;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction.EQ;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction.GREATER_THAN;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction.GREATER_THAN_OR_EQ;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction.LESS_THAN;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction.LESS_THAN_OR_EQ;
import static org.oran.smo.teiv.utils.PersistableUtil.getTableNameWithColumnName;
-import static org.oran.smo.teiv.utils.TiesConstants.ITEM;
+import static org.oran.smo.teiv.utils.TeivConstants.ITEM;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.time.OffsetDateTime;
import java.util.List;
import java.util.Objects;
+import lombok.extern.slf4j.Slf4j;
import org.jooq.Condition;
import org.jooq.Field;
import org.jooq.JSONB;
import org.oran.smo.teiv.schema.RelationType;
import org.oran.smo.teiv.schema.RelationshipDataLocation;
import org.oran.smo.teiv.schema.SchemaRegistry;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
+@Slf4j
@UtilityClass
public class ConditionFactory {
private static final String INVALID_TOPOLOGY_OBJECT_TYPE = "Invalid topology object type";
return switch (scopeObject.getContainer()) {
case ATTRIBUTES -> new AttributesCondition();
case RELATION -> new RelationCondition();
- case ID -> new IdCondition();
- case ASSOCIATION -> new AssociationCondition();
+ case ID -> switch (scopeObject.getTopologyObjectType()) {
+ case ASSOCIATION -> new AssociationCondition();
+ default -> new IdCondition();
+ };
+ case NOT_NULL -> new AssociationCondition();
case CLASSIFIERS, SOURCE_IDS -> new ConsumerDataListCondition();
case DECORATORS -> new ConsumerDataMapCondition();
case METADATA -> new MetaDataMapCondition();
validateGeographicPoint(scopeObject.getParameter());
return scopeObject.getParameter();
}
- default -> throw TiesPathException.invalidQueryCondition("Unexpected value: " + scopeObject.getDataType());
+ case TIMESTAMPTZ -> {
+ try {
+ return OffsetDateTime.parse(scopeObject.getParameter());
+ } catch (Exception e) {
+ log.error("Error while parsing timestamp in scope filter:", e);
+ throw TeivPathException.invalidQueryCondition("Invalid timestamp: " + scopeObject.getParameter());
+ }
+ }
+ default -> throw TeivPathException.invalidQueryCondition("Unexpected value: " + scopeObject.getDataType());
}
}
case RELATION -> {
return SchemaRegistry.getRelationTypeByName(scopeObject.getTopologyObject());
}
- default -> throw TiesPathException.invalidQueryCondition(INVALID_TOPOLOGY_OBJECT_TYPE);
+ case ASSOCIATION -> {
+ String[] topologyObjectTypeSplit = scopeObject.getTopologyObject().split("/");
+ List<RelationType> relationTypes = SchemaRegistry.getAllRelationNamesByAssociationName(
+ topologyObjectTypeSplit[1]);
+ RelationType relationType = relationTypes.stream().filter(rel -> rel.getASide().getName().equals(
+ topologyObjectTypeSplit[0]) || rel.getBSide().getName().equals(topologyObjectTypeSplit[0]))
+ .findFirst().orElseThrow(() -> TeivPathException.grammarError("invalid relation"));
+ return relationType.getASide().getName().equals(topologyObjectTypeSplit[0]) ?
+ relationType.getBSide() :
+ relationType.getASide();
+ }
+ default -> throw TeivPathException.invalidQueryCondition(INVALID_TOPOLOGY_OBJECT_TYPE);
}
}
final boolean is3D = point.matches("(?i)POINT Z \\([-?\\d]+(\\.\\d+)? -?\\d+(\\.\\d+)? -?\\d+(\\.\\d+)?\\)");
if (!is2D && !is3D) {
- throw TiesPathException.invalidQueryCondition(
+ throw TeivPathException.invalidQueryCondition(
"Invalid geographic format, geographic type must be 2D or 3D coordinates. For example: POINT(39.40 67.94) or POINT Z (47.49 19.04 111.11)");
}
}
}
case CONTAINS -> {
if (scopeObject.getDataType().equals(DataType.GEOGRAPHIC)) {
- throw TiesPathException.invalidQueryCondition("Cannot have CONTAINS on geography type data");
+ throw TeivPathException.invalidQueryCondition("Cannot have CONTAINS on geography type data");
}
return field(handleSimpleLeaf(scopeObject)).contains(convert(scopeObject));
}
case WITHIN_METERS -> {
if (!scopeObject.getDataType().equals(DataType.GEOGRAPHIC)) {
- throw TiesPathException.invalidQueryCondition("Within meters condition needs geography type data");
+ throw TeivPathException.invalidQueryCondition("Within meters condition needs geography type data");
}
String[] parameters = scopeObject.getParameter().split(",");
if (parameters.length != 2 || !parameters[0].matches(pointRegex)) {
- throw TiesPathException.invalidQueryCondition("Invalid parameter for within meters condition");
+ throw TeivPathException.invalidQueryCondition("Invalid parameter for within meters condition");
}
return condition("ST_DWithin(?, ST_GeographyFromText(?), ?)", field("\"" + scopeObject
.getLeaf() + "\""), field(parameters[0]), field(parameters[1].replaceAll(" ", "")));
}
case COVERED_BY -> {
if (!scopeObject.getDataType().equals(DataType.GEOGRAPHIC)) {
- throw TiesPathException.invalidQueryCondition("Covered by condition needs geography type data");
+ throw TeivPathException.invalidQueryCondition("Covered by condition needs geography type data");
}
if (!scopeObject.getParameter().matches(polygonRegex) && !scopeObject.getParameter().matches(
multiPolygonRegex)) {
- throw TiesPathException.invalidQueryCondition("Invalid parameter for covered by condition");
+ throw TeivPathException.invalidQueryCondition("Invalid parameter for covered by condition");
}
return condition("ST_CoveredBy(?, ST_GeographyFromText(?))", field("\"" + scopeObject.getLeaf() + "\""),
val(scopeObject.getParameter()));
return condition(field(handleContainers(scopeObject) + " ->> ?", val(scopeObject.getLeaf())).like(
handleLikeComplexParameter(scopeObject)));
}
- default -> throw TiesPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
+ default -> throw TeivPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
}
}
switch (scopeObject.getTopologyObjectType()) {
case ENTITY -> persistable = SchemaRegistry.getEntityTypeByName(scopeObject.getTopologyObject());
case RELATION -> persistable = SchemaRegistry.getRelationTypeByName(scopeObject.getTopologyObject());
- default -> throw TiesPathException.invalidQueryCondition(INVALID_TOPOLOGY_OBJECT_TYPE);
+ case ASSOCIATION -> {
+ String[] topologyObjectSplit = scopeObject.getTopologyObject().split("/");
+ List<RelationType> relationTypes = SchemaRegistry.getAllRelationNamesByAssociationName(
+ topologyObjectSplit[1]);
+ RelationType relation = relationTypes.stream().filter(r -> r.getASide().getName().equals(
+ topologyObjectSplit[0]) || r.getBSide().getName().equals(topologyObjectSplit[0])).findFirst()
+ .orElseThrow(() -> TeivPathException.invalidQueryCondition("Relation was not found"));
+ persistable = relation.getASideAssociation().getName().equals(topologyObjectSplit[1]) ?
+ relation.getBSide() :
+ relation.getASide();
+ }
+ default -> throw TeivPathException.invalidQueryCondition(INVALID_TOPOLOGY_OBJECT_TYPE);
}
return persistable;
}
case NOT_NULL -> {
return notNullCondition(scopeObject);
}
- default -> throw TiesPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
+ default -> throw TeivPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
}
}
final List<String> relationNames = SchemaRegistry.getRelationNamesByEntityName(scopeObject
.getTopologyObject());
final String relationName = relationNames.stream().filter(name -> name.equals(scopeObject
- .getInnerContainer().get(0))).findFirst().orElseThrow(() -> TiesPathException.invalidQueryCondition(
+ .getInnerContainer().get(0))).findFirst().orElseThrow(() -> TeivPathException.invalidQueryCondition(
"Relationship was not found for topology object"));
final Persistable persistable = SchemaRegistry.getRelationTypeByName(relationName);
return Objects.requireNonNull(persistable).getTableName() + "." + name(persistable.getIdColumnName());
} else {
- throw TiesPathException.invalidQueryCondition(INVALID_TOPOLOGY_OBJECT_TYPE);
+ throw TeivPathException.invalidQueryCondition(INVALID_TOPOLOGY_OBJECT_TYPE);
}
}
.getInnerContainer().get(0));
relation = relationTypes.stream().filter(r -> r.getASide().getName().equals(scopeObject
.getTopologyObject()) || r.getBSide().getName().equals(scopeObject.getTopologyObject()))
- .findFirst().orElseThrow(() -> TiesPathException.invalidQueryCondition(
+ .findFirst().orElseThrow(() -> TeivPathException.invalidQueryCondition(
"Relation was not found"));
}
case RELATION -> relation = SchemaRegistry.getRelationTypeByName(scopeObject.getTopologyObject());
- default -> throw TiesPathException.invalidQueryCondition(INVALID_TOPOLOGY_OBJECT_TYPE);
+ case ASSOCIATION -> {
+ String[] topologyObjectSplit = scopeObject.getTopologyObject().split("/");
+ List<RelationType> relationTypes = SchemaRegistry.getAllRelationNamesByAssociationName(
+ topologyObjectSplit[1]);
+ relation = relationTypes.stream().filter(r -> r.getASide().getName().equals(topologyObjectSplit[0]) || r
+ .getBSide().getName().equals(topologyObjectSplit[0]) || r.getName().equals(
+ topologyObjectSplit[0])).findFirst().orElseThrow(() -> TeivPathException
+ .invalidQueryCondition("Relation was not found"));
+ }
+ default -> throw TeivPathException.invalidQueryCondition(INVALID_TOPOLOGY_OBJECT_TYPE);
}
switch (scopeObject.getQueryFunction()) {
case EQ, CONTAINS -> {
return condition(field(SchemaRegistry.getReferenceColumnName(Objects.requireNonNull(relation)))
.isNotNull());
}
- default -> throw TiesPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
+ default -> throw TeivPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
}
}
private static String checkManyToMany(RelationType relation, ScopeObject scopeObject) {
- if (relation.getASide().getName().equals(scopeObject.getTopologyObject()) || SchemaRegistry
- .getEntityTypeOnAssociationSide(relation, scopeObject.getInnerContainer().get(0)).getName().equals(
- relation.getASide().getName())) {
+ if (relation.getASide().getName().equals(scopeObject.getTopologyObject().split("/")[0]) || SchemaRegistry
+ .getEntityTypeOnAssociationSide(relation, scopeObject.getTopologyObject().split("/")[1]).getName()
+ .equals(relation.getASide().getName())) {
return relation.bSideColumnName();
} else {
return relation.aSideColumnName();
}
private static String checkSameEntityRelationship(RelationType relation, ScopeObject scopeObject) {
- if (relation.getASideAssociation().getName().equals(scopeObject.getInnerContainer().get(0))) {
+ if (relation.getASideAssociation().getName().equals(scopeObject.getTopologyObject().split("/")[1])) {
return relation.aSideColumnName();
} else {
return relation.bSideColumnName();
static class MetaDataMapCondition extends AnyCondition {
@Override
public Condition getCondition(final ScopeObject scopeObject) {
- if (!scopeObject.getQueryFunction().equals(EQ)) {
- throw TiesPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
+ if (scopeObject.getQueryFunction().equals(LESS_THAN)) {
+ return lessThanCondition(scopeObject);
+ }
+ if (scopeObject.getQueryFunction().equals(GREATER_THAN)) {
+ return greaterThanCondition(scopeObject);
+ }
+ if (scopeObject.getQueryFunction().equals(LESS_THAN_OR_EQ)) {
+ return lessThanOrEqualsCondition(scopeObject);
+ }
+ if (scopeObject.getQueryFunction().equals(GREATER_THAN_OR_EQ)) {
+ return greaterThanOrEqualsCondition(scopeObject);
+ }
+ if (scopeObject.getQueryFunction().equals(EQ)) {
+ return equalsCondition(scopeObject);
+ } else {
+ throw TeivPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
}
- return equalsCondition(scopeObject);
}
private static String getColumnName(final ScopeObject scopeObject) {
}
private static Condition equalsCondition(final ScopeObject scopeObject) {
+ if (scopeObject.getDataType().equals(DataType.TIMESTAMPTZ)) {
+ return condition("(? ->> ?)::timestamptz = ?", field(getColumnName(scopeObject)), inline(scopeObject
+ .getLeaf()), inline(convert(scopeObject)));
+ }
return condition("? -> ? = ?", field(getColumnName(scopeObject)), inline(scopeObject.getLeaf()), inline(
"\"" + convert(scopeObject) + "\""));
}
+
+ private static Condition lessThanCondition(final ScopeObject scopeObject) {
+ return condition("(? ->> ?)::timestamptz < ?", field(getColumnName(scopeObject)), inline(scopeObject.getLeaf()),
+ inline(convert(scopeObject)));
+ }
+
+ private static Condition lessThanOrEqualsCondition(final ScopeObject scopeObject) {
+ return condition("(? ->> ?)::timestamptz <= ?", field(getColumnName(scopeObject)), inline(scopeObject
+ .getLeaf()), inline(convert(scopeObject)));
+ }
+
+ private static Condition greaterThanCondition(final ScopeObject scopeObject) {
+ return condition("(? ->> ?)::timestamptz > ?", field(getColumnName(scopeObject)), inline(scopeObject.getLeaf()),
+ inline(convert(scopeObject)));
+ }
+
+ private static Condition greaterThanOrEqualsCondition(final ScopeObject scopeObject) {
+ return condition("(? ->> ?)::timestamptz >= ?", field(getColumnName(scopeObject)), inline(scopeObject
+ .getLeaf()), inline(convert(scopeObject)));
+ }
}
private static Condition getConditionContainsOrEquals(ScopeObject scopeObject, RelationType relation,
EntityType entityType, String sideColumnName) {
- if (scopeObject.getTopologyObject().equals(entityType.getName()) || SchemaRegistry.getEntityTypeOnAssociationSide(
- relation, scopeObject.getInnerContainer().get(0)).getName().equals(entityType.getName())) {
+ if (scopeObject.getTopologyObject().split("/")[0].equals(entityType.getName()) || SchemaRegistry
+ .getEntityTypeOnAssociationSide(relation, scopeObject.getTopologyObject().split("/")[1]).getName().equals(
+ entityType.getName())) {
Field<Object> field = field(getTableNameWithColumnName(Objects.requireNonNull(entityType).getTableName(),
sideColumnName));
if (scopeObject.getQueryFunction().equals(EQ)) {
case NOT_NULL -> {
return field(getColumnName(scopeObject)).isNotNull();
}
- default -> throw TiesPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
+ default -> throw TeivPathException.invalidQueryCondition(INVALID_QUERY_FUNCTION);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import jakarta.annotation.Nullable;
import lombok.Getter;
SOURCE_IDS("sourceIds", false),
//ToDo Resolver should not treat below two as containers but refinement do so this needs to be fixed
- ASSOCIATION("association", false),
RELATION("relation", false),
- METADATA("metadata", false);
+ METADATA("metadata", false),
+ NOT_NULL("not_null", false);
private final String value;
private final boolean isParamAllowedInTargetFilter;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import java.util.Collections;
import java.util.Set;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import lombok.AllArgsConstructor;
import lombok.Builder;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.table;
-import static org.oran.smo.teiv.exposure.tiespath.refiner.AliasMapper.hashAlias;
+import static org.oran.smo.teiv.exposure.teivpath.refiner.AliasMapper.hashAlias;
import static org.oran.smo.teiv.utils.PersistableUtil.getFullyQualifiedNameWithColumnName;
import static org.oran.smo.teiv.utils.PersistableUtil.getTableNameWithColumnName;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.METADATA;
-import static org.oran.smo.teiv.utils.TiesConstants.PROPERTY_A_SIDE;
-import static org.oran.smo.teiv.utils.TiesConstants.PROPERTY_B_SIDE;
-import static org.oran.smo.teiv.utils.TiesConstants.SOURCE_IDS;
-import static org.oran.smo.teiv.utils.TiesConstants.DECORATORS;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.METADATA;
+import static org.oran.smo.teiv.utils.TeivConstants.PROPERTY_A_SIDE;
+import static org.oran.smo.teiv.utils.TeivConstants.PROPERTY_B_SIDE;
+import static org.oran.smo.teiv.utils.TeivConstants.SOURCE_IDS;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
import org.apache.commons.lang3.tuple.Pair;
import org.jooq.Condition;
import lombok.Builder;
import lombok.Data;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.DataType;
import org.oran.smo.teiv.schema.Persistable;
import org.oran.smo.teiv.schema.RelationType;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
}
public Set<Pair<String, Field>> getJoinCondition() {
- Set<Pair<String, Field>> joins = new HashSet<>();
+ Set<Pair<String, Field>> joins = new LinkedHashSet<>();
joins.addAll(scope.getJoinCondition());
return joins;
.bSideColumnName())).as(hashAlias(getFullyQualifiedNameWithColumnName(persistable
.getFullyQualifiedName(), PROPERTY_B_SIDE))), DataType.PRIMITIVE);
}
- default -> throw TiesException.unParsedTopologyObjectType(targetObject.getTopologyObject());
+ default -> throw TeivException.unParsedTopologyObjectType(targetObject.getTopologyObject());
}
select.put(field(idColumn).as(hashAlias(getFullyQualifiedNameWithColumnName(persistable.getFullyQualifiedName(),
case SOURCE_IDS -> select.put(field(getTableNameWithColumnName(persistable.getTableName(), persistable
.getSourceIdsColumnName()), JSONB.class).as(hashAlias(getFullyQualifiedNameWithColumnName(persistable
.getFullyQualifiedName(), SOURCE_IDS))), DataType.CONTAINER);
- default -> throw TiesException.invalidContainerType(targetObject.getContainer().getValue());
+ default -> throw TeivException.invalidContainerType(targetObject.getContainer().getValue());
}
return Pair.of(field(idColumn).as(hashAlias(getFullyQualifiedNameWithColumnName(persistable.getFullyQualifiedName(),
case RELATION -> {
return table(SchemaRegistry.getRelationTypeByName(targetObject.getTopologyObject()).getTableName());
}
- default -> throw TiesException.unParsedTopologyObjectType(targetObject.getTopologyObject());
+ default -> throw TeivException.unParsedTopologyObjectType(targetObject.getTopologyObject());
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import lombok.Data;
import org.apache.commons.lang3.tuple.Pair;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import lombok.EqualsAndHashCode;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import lombok.Data;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import lombok.Getter;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
@Getter
public enum QueryFunction {
EQ("="),
+ LESS_THAN("<"),
+ LESS_THAN_OR_EQ("<="),
+ GREATER_THAN(">"),
+ GREATER_THAN_OR_EQ(">="),
CONTAINS("contains"),
NOT_NULL("notNull"),
WITHIN_METERS("withinMeters"),
return queryFunction;
}
}
- throw TiesPathException.grammarError("Unsupported operation: " + value);
+ throw TeivPathException.grammarError("Unsupported operation: " + value);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jooq.Condition;
import org.jooq.Field;
import org.jooq.Table;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.EntityType;
import org.oran.smo.teiv.schema.RelationType;
import org.oran.smo.teiv.schema.RelationshipDataLocation;
import org.oran.smo.teiv.schema.SchemaRegistry;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
import java.util.HashSet;
+import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.table;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.TopologyObjectType.ASSOCIATION;
import static org.oran.smo.teiv.utils.PersistableUtil.getTableNameWithColumnName;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@Data
@EqualsAndHashCode(callSuper = true)
@Override
public Set<Table> getTables() {
Set<Table> result = new HashSet<>();
- if (scopeObject.getContainer().equals(ContainerType.ASSOCIATION)) {
+ if (scopeObject.getTopologyObjectType() == TopologyObjectType.ASSOCIATION) {
result.add(addAssociationToTable());
} else if (scopeObject.getTopologyObjectType() == TopologyObjectType.ENTITY) {
result.add(addEntityToTable());
} else if (scopeObject.getTopologyObjectType() == TopologyObjectType.RELATION) {
result.add(addRelationToTable());
} else if (scopeObject.getTopologyObjectType() == TopologyObjectType.UNDEFINED) {
- throw TiesException.unknownTopologyObjectType(scopeObject.getTopologyObject());
+ throw TeivException.unknownTopologyObjectType(scopeObject.getTopologyObject());
}
return result;
}
+ @SuppressWarnings({ "java:S1874" })
public Set<Pair<String, Field>> getJoinCondition() {
- HashSet<Pair<String, Field>> joinCondition = new HashSet<>();
- if (scopeObject.getContainer().equals(ContainerType.ASSOCIATION) && scopeObject.getTopologyObjectType().equals(
- TopologyObjectType.ENTITY)) {
- EntityType entityType = SchemaRegistry.getEntityTypeByName(scopeObject.getTopologyObject());
- String association = scopeObject.getInnerContainer().get(0);
+ Set<Pair<String, Field>> joinCondition = new LinkedHashSet<>();
+ String[] topologyObjectSplit = scopeObject.getTopologyObject().split("/");
+ if (scopeObject.getTopologyObjectType().equals(ASSOCIATION) && SchemaRegistry.getEntityTypeByName(
+ topologyObjectSplit[0]) != null) {
+ EntityType entityType = SchemaRegistry.getEntityTypeByName(topologyObjectSplit[0]);
+ String association = topologyObjectSplit[1];
List<RelationType> relationTypes = SchemaRegistry.getAllRelationNamesByAssociationName(association);
RelationType relationType = relationTypes.stream().filter(relation -> relation.getASide().equals(
- entityType) || relation.getBSide().equals(entityType)).findFirst().orElseThrow(() -> TiesPathException
+ entityType) || relation.getBSide().equals(entityType)).findFirst().orElseThrow(() -> TeivPathException
.invalidAssociation(entityType.getName(), association));
- if (relationType.getRelationshipStorageLocation().equals(RelationshipDataLocation.RELATION)) {
- String columnName = "";
- if (relationType.getASide().equals(entityType)) {
- columnName = relationType.aSideColumnName();
- } else {
- columnName = relationType.bSideColumnName();
- }
+ if (isManyToMany(relationType)) {
+ String columnName = getColumnNameForManyToManyJoin(entityType, relationType);
String col1 = constructColumnNameForJoinCondition(relationType, columnName);
String col2 = getTableNameWithColumnName(entityType.getTableName(), ID_COLUMN_NAME);
- joinCondition.add(constructJoinConditionPair(relationType, col1, col2));
- } else if (!relationType.getStoringSideEntityType().getName().equals(scopeObject.getTopologyObject())) {
+ joinCondition.add(constructJoinConditionPair(relationType.getTableName(), col1, col2));
+
+ if (isSecondJoinNeeded()) {
+ joinCondition.add(getSecondJoinCondition(entityType, relationType));
+ }
+ } else if (isJoinNeeded(topologyObjectSplit, relationType)) {
String col1 = constructColumnNameForJoinCondition(relationType, relationType
.getNotStoringSideEntityIdColumnNameInStoringSideTable());
String col2 = getTableNameWithColumnName(relationType.getNotStoringSideTableName(), ID_COLUMN_NAME);
- joinCondition.add(constructJoinConditionPair(relationType, col1, col2));
+ String tableName = getTableNameForJoin(topologyObjectSplit, relationType);
+ joinCondition.add(constructJoinConditionPair(tableName, col1, col2));
}
}
return joinCondition;
}
+ private boolean isSecondJoinNeeded() {
+ return !scopeObject.getContainer().equals(ContainerType.ID) && !scopeObject.getContainer().equals(
+ ContainerType.NOT_NULL);
+ }
+
+ private static boolean isManyToMany(RelationType relationType) {
+ return relationType.getRelationshipStorageLocation().equals(RelationshipDataLocation.RELATION);
+ }
+
+ private boolean isJoinNeeded(String[] topologyObjectSplit, RelationType relationType) {
+ return !relationType.getStoringSideEntityType().getName().equals(topologyObjectSplit[0]) || (!scopeObject
+ .getContainer().equals(ContainerType.ID) && !scopeObject.getContainer().equals(ContainerType.NOT_NULL));
+ }
+
+ private static String getTableNameForJoin(String[] topologyObjectSplit, RelationType relationType) {
+ if (relationType.getStoringSideEntityType().getName().equals(topologyObjectSplit[0])) {
+ return relationType.getNotStoringSideTableName();
+ } else {
+ return relationType.getTableName();
+ }
+ }
+
+ private static Pair<String, Field> getSecondJoinCondition(EntityType entityType, RelationType relationType) {
+ EntityType entityTypeForSecondJoin;
+ String columnNameForSecondJoin;
+ if (!relationType.getASide().equals(entityType)) {
+ columnNameForSecondJoin = relationType.aSideColumnName();
+ entityTypeForSecondJoin = relationType.getASide();
+ } else {
+ columnNameForSecondJoin = relationType.bSideColumnName();
+ entityTypeForSecondJoin = relationType.getBSide();
+ }
+ String col1ForSecondJoin = constructColumnNameForJoinCondition(relationType, columnNameForSecondJoin);
+ String col2ForSecondJoin = getTableNameWithColumnName(entityTypeForSecondJoin.getTableName(), ID_COLUMN_NAME);
+ return constructJoinConditionPair(entityTypeForSecondJoin.getTableName(), col1ForSecondJoin, col2ForSecondJoin);
+ }
+
+ private static String getColumnNameForManyToManyJoin(EntityType entityType, RelationType relationType) {
+ if (relationType.getASide().equals(entityType)) {
+ return relationType.aSideColumnName();
+ } else {
+ return relationType.bSideColumnName();
+ }
+ }
+
private static String constructColumnNameForJoinCondition(RelationType relationType, String columnName) {
return relationType.getTableName() + "." + String.format(QUOTED_STRING, columnName);
}
- private static Pair<String, Field> constructJoinConditionPair(RelationType relationType, String col1, String col2) {
+ private static Pair<String, Field> constructJoinConditionPair(String tableName, String col1, String col2) {
Field equalsField = field(col1 + "=" + col2);
- return new ImmutablePair<>(relationType.getTableName(), equalsField);
+ return new ImmutablePair<>(tableName, equalsField);
}
+ @SuppressWarnings({ "java:S1874" })
private Table addEntityToTable() {
return table(SchemaRegistry.getEntityTypeByName(scopeObject.getTopologyObject()).getTableName());
}
+ @SuppressWarnings({ "java:S1874" })
private Table addRelationToTable() {
return table(SchemaRegistry.getRelationTypeByName(scopeObject.getTopologyObject()).getTableName());
}
private Table addAssociationToTable() {
- List<RelationType> relationTypes = SchemaRegistry.getAllRelationNamesByAssociationName(scopeObject
- .getInnerContainer().get(0));
- if (scopeObject.getTopologyObjectType().equals(TopologyObjectType.ENTITY)) {
+ String[] topologyObjectArray = scopeObject.getTopologyObject().split("/");
+ String topologyObject = topologyObjectArray[0];
+ boolean isEntity = SchemaRegistry.getEntityNames().contains(topologyObject);
+ List<RelationType> relationTypes = SchemaRegistry.getAllRelationNamesByAssociationName(topologyObjectArray[1]);
+ if (isEntity) {
for (RelationType relation : relationTypes) {
- if (relation.getASide().getName().equals(scopeObject.getTopologyObject()) || relation.getBSide().getName()
- .equals(scopeObject.getTopologyObject())) {
+ if (relation.getASide().getName().equals(topologyObject) || relation.getBSide().getName().equals(
+ topologyObject)) {
return table(relation.getTableName());
}
}
} else {
Optional<RelationType> relation = relationTypes.stream().filter(relationType -> relationType.getName().equals(
- scopeObject.getTopologyObject())).findFirst();
+ topologyObject)).findFirst();
if (relation.isPresent()) {
return table(relation.get().getTableName());
}
}
- throw TiesException.invalidAssociationType(scopeObject.getInnerContainer().get(0));
+
+ throw TeivException.invalidAssociationType(scopeObject.getInnerContainer().get(0));
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import lombok.Builder;
-import org.oran.smo.teiv.exposure.tiespath.resolver.ResolverDataType;
+import org.oran.smo.teiv.exposure.teivpath.resolver.ResolverDataType;
import org.oran.smo.teiv.schema.DataType;
import lombok.Data;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import java.util.List;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
public enum TopologyObjectType {
ENTITY,
RELATION,
+ ASSOCIATION,
UNDEFINED
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.refiner;
+package org.oran.smo.teiv.exposure.teivpath.refiner;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import lombok.extern.slf4j.Slf4j;
import jakarta.xml.bind.DatatypeConverter;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
@Slf4j
@UtilityClass
return DatatypeConverter.printHexBinary(hashBytes).toUpperCase(Locale.US);
} catch (NoSuchAlgorithmException exception) {
log.warn("Not a valid algorithm", exception);
- throw TiesException.serverException("Invalid Hashing algorithm", "Error while hashing alias", exception);
+ throw TeivException.serverException("Invalid Hashing algorithm", "Error while hashing alias", exception);
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.refiner;
+package org.oran.smo.teiv.exposure.teivpath.refiner;
import lombok.RequiredArgsConstructor;
import org.oran.smo.teiv.exposure.consumerdata.ConsumerDataValidator;
import org.oran.smo.teiv.exposure.consumerdata.model.Classifiers;
import org.oran.smo.teiv.exposure.consumerdata.model.Decorators;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndOrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ContainerType;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.EmptyLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.FilterCriteria;
-
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.QueryFunction;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.InnerFilterCriteria;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.LogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.OrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeObject;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TopologyObjectType;
-import org.oran.smo.teiv.exposure.tiespath.resolver.ResolverDataType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndOrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.EmptyLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.FilterCriteria;
+
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.InnerFilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.LogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.OrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeObject;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TopologyObjectType;
+import org.oran.smo.teiv.exposure.teivpath.resolver.ResolverDataType;
import org.oran.smo.teiv.schema.DataType;
import org.oran.smo.teiv.schema.EntityType;
import org.oran.smo.teiv.schema.Persistable;
import org.oran.smo.teiv.schema.RelationType;
import org.oran.smo.teiv.schema.Reliability;
import org.oran.smo.teiv.schema.SchemaRegistry;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TargetObject;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TargetObject;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import lombok.extern.slf4j.Slf4j;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType.ATTRIBUTES;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType.ID;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType.NOT_NULL;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.FilterCriteria.ResolvingTopologyObjectType.RELATIONSHIP;
+import static org.oran.smo.teiv.exposure.teivpath.innerlanguage.TopologyObjectType.ASSOCIATION;
import static org.oran.smo.teiv.schema.DataType.BIGINT;
import static org.oran.smo.teiv.schema.DataType.DECIMAL;
import static org.oran.smo.teiv.schema.DataType.INTEGER;
import static org.oran.smo.teiv.schema.DataType.PRIMITIVE;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.ITEM;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.ITEM;
+import static org.oran.smo.teiv.utils.TeivConstants.WILDCARD;
-@Component
@Slf4j
+@Component
@RequiredArgsConstructor
public class BasePathRefinement {
private final ConsumerDataValidator consumerDataValidator;
* the filter criteria
*/
public void refine(FilterCriteria filterCriteria) {
+ filterCriteria.getFilterCriteriaList().forEach(innerFilterCriteria -> runOnTree(innerFilterCriteria.getScope(),
+ filterCriteria.getDomain(), this::handleAssociationsInScope));
processTopologyObjectsWithContainerTypeNull(filterCriteria);
+ if (filterCriteria.getResolvingTopologyObjectType().equals(RELATIONSHIP)) {
+ filterCriteria.getFilterCriteriaList().forEach(innerFilterCriteria -> runOnTree(innerFilterCriteria.getScope(),
+ filterCriteria.getDomain(), this::restrictQueriesOnAssociationOfRelationIfNotId));
+ }
filterCriteria.getFilterCriteriaList().forEach(innerFilterCriteria -> resolveWildCardObjectsInScopeAndTarget(
innerFilterCriteria, filterCriteria.getDomain(), filterCriteria.getResolvingTopologyObjectType()));
resolveUndefinedTopologyObjectTypes(filterCriteria);
innerFilterCriteria, filterCriteria.getDomain()));
splitFilterCriteria(filterCriteria);
validateQuery(filterCriteria);
+ matchTopologyObjectTypeWithResolvingTopologyObjectType(filterCriteria);
applyRelationshipCriteria(filterCriteria);
}
+ public void handleAssociationsInScope(ScopeLogicalBlock slb, String domain) {
+ String topologyObject = slb.getScopeObject().getTopologyObject();
+ String[] topologyObjectSplit = topologyObject.split("/");
+ if (topologyObjectSplit.length == 2) {
+ if ((SchemaRegistry.getEntityNamesByDomain(domain).contains(topologyObjectSplit[0]) && SchemaRegistry
+ .getAssociationNamesByEntityName(topologyObjectSplit[0]).contains(
+ topologyObjectSplit[1])) || SchemaRegistry.getAllRelationNamesByAssociationName(
+ topologyObjectSplit[1]).stream().anyMatch(rel -> rel.getName().equals(
+ topologyObjectSplit[0]))) {
+ slb.getScopeObject().setTopologyObjectType(ASSOCIATION);
+ } else if (topologyObjectSplit[0].equals(WILDCARD)) {
+ if (SchemaRegistry.getEntityNamesByDomain(domain).stream().anyMatch(entityName -> SchemaRegistry
+ .getAssociationNamesByEntityName(entityName).contains(topologyObjectSplit[1]))) {
+ slb.getScopeObject().setTopologyObjectType(ASSOCIATION);
+ } else {
+ slb.getScopeObject().setTopologyObject(topologyObjectSplit[1]);
+ }
+ } else {
+ throw TeivPathException.grammarError(String.format("Invalid parameter name (%s) after %s",
+ topologyObjectSplit[1], topologyObjectSplit[0]));
+ }
+ }
+ }
+
+ public void restrictQueriesOnAssociationOfRelationIfNotId(ScopeLogicalBlock slb, String domain) {
+ if (slb.getScopeObject().getTopologyObjectType().equals(ASSOCIATION) && (!ID.equals(slb.getScopeObject()
+ .getContainer()) && !NOT_NULL.equals(slb.getScopeObject().getContainer()))) {
+ throw TeivPathException.grammarError(
+ "Querying any thing other than id is not supported in case of association of relation");
+ }
+ }
+
/**
* Process topology objects with container type null.
* If scopeResolver can not differentiate ASSOCIATION from ENTITY and RELATION,
private void setContainerTypesAndTopologyObjects(ScopeLogicalBlock slb, String domain) {
if (slb.getScopeObject().getContainer() == null) {
- if (slb.getScopeObject().getInnerContainer().isEmpty()) {
- throw TiesPathException.grammarError("invalid scopeFilter");
- }
- boolean isResolved = false;
- if (SchemaRegistry.getEntityNames().stream().anyMatch(entityName -> SchemaRegistry
- .getAssociationNamesByEntityName(entityName).contains(slb.getScopeObject().getInnerContainer().get(
- 0))) || !SchemaRegistry.getAllRelationNamesByAssociationName(slb.getScopeObject()
- .getInnerContainer().get(0)).isEmpty()) {
- setContainerTypeForScopeLogicalBlocksScopeObject(slb, ContainerType.ASSOCIATION);
- isResolved = true;
- }
- if (SchemaRegistry.getRelationNames().contains(slb.getScopeObject().getInnerContainer().get(0))) {
- checkIfAlreadyResolved(slb.getScopeObject().getInnerContainer().get(0), isResolved);
- setContainerTypeForScopeLogicalBlocksScopeObject(slb, ContainerType.RELATION);
- isResolved = true;
- }
- isResolved = entityTopologyObjectSettings(slb, isResolved);
- if (!isResolved) {
- throw TiesPathException.invalidInnerContainer(slb.getScopeObject().getInnerContainer().get(0));
- }
- } else if (slb.getScopeObject().getContainer().equals(ContainerType.ATTRIBUTES) && !slb.getScopeObject()
- .getInnerContainer().isEmpty() && slb.getScopeObject().getTopologyObject() == null) {
- slb.getScopeObject().setTopologyObject("*");
- }
- }
-
- private void setContainerTypeForScopeLogicalBlocksScopeObject(ScopeLogicalBlock slb, ContainerType containerType) {
- slb.getScopeObject().setContainer(containerType);
- if (slb.getScopeObject().getTopologyObject() == null) {
- slb.getScopeObject().setTopologyObject("*");
- }
- }
-
- private boolean entityTopologyObjectSettings(ScopeLogicalBlock slb, boolean isResolved) {
- if (SchemaRegistry.getEntityNames().contains(slb.getScopeObject().getInnerContainer().get(0))) {
- checkIfAlreadyResolved(slb.getScopeObject().getInnerContainer().get(0), isResolved);
- if (slb.getScopeObject().getLeaf().equals(ID_COLUMN_NAME)) {
- slb.getScopeObject().setContainer(ContainerType.ID);
- slb.getScopeObject().setLeaf(null);
- } else {
- throw TiesPathException.grammarError("invalid scopeFilter, missing containerType");
- }
- if (slb.getScopeObject().getTopologyObject() == null) {
- slb.getScopeObject().setTopologyObject(slb.getScopeObject().getInnerContainer().get(0));
- slb.getScopeObject().getInnerContainer().remove(0);
+ if (slb.getScopeObject().getLeaf() != null) {
+ if (slb.getScopeObject().getLeaf().equals("id")) {
+ slb.getScopeObject().setContainer(ID);
+ slb.getScopeObject().setLeaf(null);
+ } else {
+ throw TeivPathException.grammarError(String.format("Missing container type for queried leaf %s", slb
+ .getScopeObject().getLeaf()));
+ }
} else {
- throw TiesPathException.grammarError("invalid ScopeFilter");
+ if (slb.getScopeObject().getTopologyObjectType().equals(ASSOCIATION)) {
+ slb.getScopeObject().setContainer(NOT_NULL);
+ } else {
+ throw TeivPathException.invalidDataInScopeFilter(slb.getScopeObject().getTopologyObject());
+ }
}
- isResolved = true;
- }
- return isResolved;
- }
-
- private void checkIfAlreadyResolved(String innerContainer, boolean isResolved) {
- if (isResolved) {
- throw TiesPathException.ambiguousTopologyObject(innerContainer);
+ } else if (slb.getScopeObject().getContainer().equals(ATTRIBUTES) && !slb.getScopeObject().getInnerContainer()
+ .isEmpty() && slb.getScopeObject().getTopologyObject() == null) {
+ slb.getScopeObject().setTopologyObject(WILDCARD);
}
}
Set<String> uniqueTopologyObjects = new HashSet<>();
targetObjects.stream().filter(targetObject -> targetObject.getContainer().equals(containerType)).forEach(
targetObject -> uniqueTopologyObjects.add(targetObject.getTopologyObject()));
-
for (String topologyObject : uniqueTopologyObjects) {
final Set<String> unifiedParams = new HashSet<>();
- boolean isAllParamQueried = containerType == ContainerType.ATTRIBUTES && targetObjects.stream().anyMatch(
+ boolean isAllParamQueried = containerType == ATTRIBUTES && targetObjects.stream().anyMatch(
targetObject -> targetObject.getTopologyObject().equals(topologyObject) && (targetObject.getParams()
.isEmpty() || targetObject.isAllParamQueried()) && targetObject.getContainer().equals(
containerType));
-
targetObjects.stream().filter(targetObject -> targetObject.getTopologyObject().equals(
topologyObject) && targetObject.getContainer().equals(containerType)).forEach(
targetObject -> unifiedParams.addAll(targetObject.getParams()));
-
targetObjects.removeIf(targetObject -> targetObject.getTopologyObject().equals(topologyObject) && targetObject
.getContainer().equals(containerType));
TargetObject unifiedTarget = TargetObject.builder(topologyObject).container(containerType).params(unifiedParams
.stream().toList()).isAllParamQueried(isAllParamQueried).build();
-
targetObjects.add(unifiedTarget);
}
}
public void resolveWildCardObjectsInScopeAndTarget(InnerFilterCriteria filterCriteria, String domain,
FilterCriteria.ResolvingTopologyObjectType resolvingTopologyObjectType) {
if (filterCriteria.getTargets() == null || filterCriteria.getTargets().isEmpty()) {
- filterCriteria.setTargets(List.of(TargetObject.builder("*").container(ContainerType.ID).build()));
+ filterCriteria.setTargets(List.of(TargetObject.builder("*").container(ID).build()));
}
-
// merge targets
Arrays.stream(ContainerType.values()).toList().forEach(containerType -> unifyDuplicatedTargetsByContainerType(
filterCriteria.getTargets(), containerType));
-
// calculate situation
final List<ScopeLogicalBlock> wildCardsInScope = new ArrayList<>();
final List<ScopeLogicalBlock> nonWildCardsInScope = new ArrayList<>();
runOnTree(filterCriteria.getScope(), domain, (lb, s) -> {
- if (lb.getScopeObject().getTopologyObject().equals("*")) {
+ if (lb.getScopeObject().getTopologyObject().split("/")[0].equals("*")) {
wildCardsInScope.add(lb);
} else {
nonWildCardsInScope.add(lb);
}
});
-
boolean wildCardInTarget = filterCriteria.getTargets().stream().anyMatch(t -> t.getTopologyObject().equals("*"));
boolean wildCardInScope = (filterCriteria.getScope() instanceof EmptyLogicalBlock) || !wildCardsInScope.isEmpty();
boolean isAllParamRequired = filterCriteria.getTargets().stream().anyMatch(t -> t.getTopologyObject().equals(
- "*") && t.getContainer().equals(ContainerType.ATTRIBUTES) && t.isAllParamQueried());
-
+ "*") && t.getContainer().equals(ATTRIBUTES) && t.isAllParamQueried());
// skip when nothing to do
if ((!wildCardInScope || filterCriteria.getScope() instanceof EmptyLogicalBlock) && !wildCardInTarget) {
return;
}
-
List<Persistable> possibleTypes = listPossibleTypes(filterCriteria, domain, nonWildCardsInScope, wildCardInTarget,
wildCardInScope, resolvingTopologyObjectType);
-
filterPossibleTypesInTarget(filterCriteria, possibleTypes);
- filterPossibleTypesInScope(wildCardsInScope, possibleTypes);
-
+ switch (resolvingTopologyObjectType) {
+ case ENTITY:
+ filterPossibleTypesInScopeForEntities(wildCardsInScope, possibleTypes);
+ break;
+ case RELATIONSHIP:
+ filterPossibleTypesInScopeForRelations(wildCardsInScope, possibleTypes);
+ break;
+ default:
+ break;
+ }
// check
if (possibleTypes.isEmpty()) {
- throw TiesPathException.notMatchingScopeAndTargetFilter();
+ throw TeivPathException.notMatchingScopeAndTargetFilter();
}
-
resolveTargets(filterCriteria, isAllParamRequired, possibleTypes);
-
// merge targets
Arrays.stream(ContainerType.values()).toList().forEach(containerType -> unifyDuplicatedTargetsByContainerType(
filterCriteria.getTargets(), containerType));
-
//resolve scope
List<LogicalBlock> resolvedTrees = new ArrayList<>();
if (!(filterCriteria.getScope() instanceof EmptyLogicalBlock) && wildCardInScope) {
} else {
return;
}
-
rebuildBinaryTree(filterCriteria, resolvedTrees);
}
+ @SuppressWarnings({ "java:S1874" })
private List<Persistable> listPossibleTypes(InnerFilterCriteria filterCriteria, String domain,
List<ScopeLogicalBlock> nonWildCardsInScope, boolean wildCardInTarget, boolean wildCardInScope,
FilterCriteria.ResolvingTopologyObjectType resolvingTopologyObjectType) {
} else if (!wildCardInScope) {
if (resolvingTopologyObjectType.isResolveEntities()) {
result.addAll(nonWildCardsInScope.stream().map(ScopeLogicalBlock::getScopeObject).map(
- ScopeObject::getTopologyObject).map(SchemaRegistry::getEntityTypeByName).filter(Objects::nonNull)
- .toList());
+ scopeObject -> scopeObject.getTopologyObject().split("/")[0]).map(
+ SchemaRegistry::getEntityTypeByName).filter(Objects::nonNull).toList());
}
if (resolvingTopologyObjectType.isResolveRelationships()) {
result.addAll(nonWildCardsInScope.stream().map(ScopeLogicalBlock::getScopeObject).map(
- ScopeObject::getTopologyObject).map(SchemaRegistry::getRelationTypeByName).filter(Objects::nonNull)
- .toList());
+ scopeObject -> scopeObject.getTopologyObject().split("/")[0]).map(
+ SchemaRegistry::getRelationTypeByName).filter(Objects::nonNull).toList());
}
} else {
if (resolvingTopologyObjectType.isResolveEntities()) {
private void filterPossibleTypesInTarget(InnerFilterCriteria filterCriteria, List<Persistable> possibleTypes) {
for (TargetObject targetObject : filterCriteria.getTargets().stream().filter(t -> t.getTopologyObject().equals("*"))
.toList()) {
- if (targetObject.getContainer().equals(ContainerType.ATTRIBUTES)) {
+ if (targetObject.getContainer().equals(ATTRIBUTES)) {
for (String parameter : targetObject.getParams()) {
possibleTypes.removeIf(t -> !t.getAttributeNames().contains(parameter));
}
}
}
- private void filterPossibleTypesInScope(List<ScopeLogicalBlock> wildCardsInScope, List<Persistable> possibleTypes) {
+ private void filterPossibleTypesInScopeForEntities(List<ScopeLogicalBlock> wildCardsInScope,
+ List<Persistable> possibleTypes) {
+ for (ScopeObject scopeObject : wildCardsInScope.stream().map(ScopeLogicalBlock::getScopeObject).toList()) {
+ if (scopeObject.getTopologyObjectType().equals(ASSOCIATION)) {
+ possibleTypes.removeIf(t -> SchemaRegistry.getAllEntityForAssociation(scopeObject.getTopologyObject().split(
+ "/")[1]).stream().noneMatch(r -> r.getName().equals(t.getName())));
+ }
+ if (ATTRIBUTES.equals(scopeObject.getContainer()) && !scopeObject.getTopologyObjectType().equals(ASSOCIATION)) {
+ if (!scopeObject.getInnerContainer().isEmpty()) {
+ possibleTypes.removeIf(t -> !t.getAttributeNames().contains(scopeObject.getInnerContainer().get(0)));
+ } else {
+ possibleTypes.removeIf(t -> !t.getAttributeNames().contains(scopeObject.getLeaf()));
+ }
+ }
+ }
+ }
+
+ private void filterPossibleTypesInScopeForRelations(List<ScopeLogicalBlock> wildCardsInScope,
+ List<Persistable> possibleTypes) {
for (ScopeObject scopeObject : wildCardsInScope.stream().map(ScopeLogicalBlock::getScopeObject).toList()) {
if (scopeObject.getContainer().equals(ContainerType.ATTRIBUTES)) {
if (!scopeObject.getInnerContainer().isEmpty()) {
possibleTypes.removeIf(t -> !t.getAttributeNames().contains(scopeObject.getLeaf()));
}
}
- if (scopeObject.getContainer().equals(ContainerType.ASSOCIATION)) {
+ if (scopeObject.getTopologyObjectType().equals(TopologyObjectType.ASSOCIATION)) {
filterPossibleTypesInScopeByAssociations(possibleTypes, scopeObject);
}
}
}
+ @SuppressWarnings({ "java:S1874" })
private void filterPossibleTypesInScopeByAssociations(List<Persistable> possibleTypes, ScopeObject scopeObject) {
- String innerContainer = scopeObject.getInnerContainer().get(0);
+ String[] topologyObjectSplit = scopeObject.getTopologyObject().split("/");
List<Persistable> entityTypesCopy = new ArrayList<>(possibleTypes);
for (Persistable t : entityTypesCopy) {
if ((t instanceof RelationType && !(SchemaRegistry.getRelationTypeByName(t.getName()).getASideAssociation()
- .getName().equals(innerContainer) || SchemaRegistry.getRelationTypeByName(t.getName())
+ .getName().equals(topologyObjectSplit[1]) || SchemaRegistry.getRelationTypeByName(t.getName())
.getBSideAssociation().getName().equals(
- innerContainer))) || (t instanceof EntityType && !SchemaRegistry
- .getAssociationNamesByEntityName(t.getName()).contains(innerContainer))) {
+ topologyObjectSplit[1]))) || (t instanceof EntityType && !SchemaRegistry
+ .getAssociationNamesByEntityName(t.getName()).contains(
+ topologyObjectSplit[1]))) {
possibleTypes.remove(t);
}
}
return lb;
}
if (logicalBlock instanceof ScopeLogicalBlock scopeLogicalBlock) {
- ScopeObject scopeObject = ScopeObject.builder((topologyObject == null || !scopeLogicalBlock.getScopeObject()
- .getTopologyObject().equals("*")) ?
+ ScopeObject scopeObject = buildScopeObject(topologyObject, scopeLogicalBlock);
+ if (scopeObject.getLeaf() != null && scopeObject.getLeaf().equals(ID_COLUMN_NAME) && scopeObject.getContainer()
+ .equals(ID)) {
+ scopeObject.setLeaf(null);
+ }
+ ScopeLogicalBlock lb = new ScopeLogicalBlock(scopeObject);
+ lb.setValid(logicalBlock.isValid());
+ return lb;
+ }
+ return EmptyLogicalBlock.getInstance();
+ }
+
+ private static ScopeObject buildScopeObject(String topologyObject, ScopeLogicalBlock scopeLogicalBlock) {
+ if (scopeLogicalBlock.getScopeObject().getTopologyObjectType().equals(ASSOCIATION)) {
+ return ScopeObject.builder((topologyObject == null || !scopeLogicalBlock.getScopeObject().getTopologyObject()
+ .split("/")[0].equals("*")) ?
scopeLogicalBlock.getScopeObject().getTopologyObject() :
- topologyObject).topologyObjectType((topologyObject == null || !scopeLogicalBlock
- .getScopeObject().getTopologyObject().equals("*")) ?
+ String.format("%s/%s", topologyObject, scopeLogicalBlock.getScopeObject().getTopologyObject()
+ .split("/")[1])).topologyObjectType(ASSOCIATION).container(scopeLogicalBlock
+ .getScopeObject().getContainer()).innerContainer(scopeLogicalBlock
+ .getScopeObject().getInnerContainer()).leaf(scopeLogicalBlock
+ .getScopeObject().getLeaf()).queryFunction(scopeLogicalBlock
+ .getScopeObject().getQueryFunction()).parameter(
+ scopeLogicalBlock.getScopeObject()
+ .getParameter()).dataType(
+ scopeLogicalBlock
+ .getScopeObject()
+ .getDataType())
+ .resolverDataType(scopeLogicalBlock.getScopeObject().getResolverDataType()).build();
+ } else {
+ return ScopeObject.builder((topologyObject == null || !scopeLogicalBlock.getScopeObject().getTopologyObject()
+ .split("/")[0].equals("*")) ?
+ scopeLogicalBlock.getScopeObject().getTopologyObject().split("/")[0] :
+ topologyObject.split("/")[0]).topologyObjectType((topologyObject == null || !scopeLogicalBlock
+ .getScopeObject().getTopologyObject().split("/")[0].equals("*")) ?
scopeLogicalBlock.getScopeObject().getTopologyObjectType() :
TopologyObjectType.UNDEFINED).container(scopeLogicalBlock.getScopeObject()
.getContainer()).innerContainer(scopeLogicalBlock.getScopeObject()
.getScopeObject()
.getDataType())
.resolverDataType(scopeLogicalBlock.getScopeObject().getResolverDataType()).build();
-
- if (scopeObject.getLeaf() != null && scopeObject.getLeaf().equals(ID_COLUMN_NAME) && scopeObject.getContainer()
- .equals(ContainerType.ID)) {
- scopeObject.setLeaf(null);
- }
-
- ScopeLogicalBlock lb = new ScopeLogicalBlock(scopeObject);
- lb.setValid(logicalBlock.isValid());
- return lb;
}
- return EmptyLogicalBlock.getInstance();
}
private void rebuildBinaryTree(InnerFilterCriteria filterCriteria, List<LogicalBlock> resolvedTrees) {
lb.getChildren().add(resolvedTrees.get(i));
subTree = lb;
}
-
filterCriteria.setScope(subTree);
}
private void defineTopologyObjectTypeInScope(ScopeLogicalBlock scopeLogicalBlock, String domain) {
if (scopeLogicalBlock.getScopeObject().getTopologyObjectType().equals(TopologyObjectType.UNDEFINED)) {
boolean isResolved = false;
- if (SchemaRegistry.getEntityNamesByDomain(domain).contains(scopeLogicalBlock.getScopeObject()
- .getTopologyObject())) {
+ String topologyObject = scopeLogicalBlock.getScopeObject().getTopologyObject().split("/")[0];
+ if (SchemaRegistry.getEntityNamesByDomain(domain).contains(topologyObject)) {
scopeLogicalBlock.getScopeObject().setTopologyObjectType(TopologyObjectType.ENTITY);
isResolved = true;
}
- if (SchemaRegistry.getRelationNamesByDomain(domain).contains(scopeLogicalBlock.getScopeObject()
- .getTopologyObject())) {
+ if (SchemaRegistry.getRelationNamesByDomain(domain).contains(topologyObject)) {
if (!isResolved) {
scopeLogicalBlock.getScopeObject().setTopologyObjectType(TopologyObjectType.RELATION);
isResolved = true;
} else {
- throw TiesPathException.ambiguousTopologyObject(scopeLogicalBlock.getScopeObject().getTopologyObject());
+ throw TeivPathException.ambiguousTopologyObject(topologyObject);
}
}
if (!isResolved) {
- throw TiesPathException.invalidTopologyObject(scopeLogicalBlock.getScopeObject().getTopologyObject());
+ throw TeivPathException.invalidTopologyObject(topologyObject);
}
}
}
targetObject.setTopologyObjectType(TopologyObjectType.RELATION);
isResolved = true;
} else {
- throw TiesPathException.ambiguousTopologyObject(targetObject.getTopologyObject());
+ throw TeivPathException.ambiguousTopologyObject(targetObject.getTopologyObject());
}
}
if (!isResolved) {
- throw TiesPathException.invalidTopologyObject(targetObject.getTopologyObject());
+ throw TeivPathException.invalidTopologyObject(targetObject.getTopologyObject());
}
}
private void validateScope(LogicalBlock logicalBlock, String domain) {
ScopeObject scopeObject = ((ScopeLogicalBlock) logicalBlock).getScopeObject();
- validateContainerWithMatchingParameters(scopeObject.getContainer(), new ArrayList<>(Collections.singletonList(
- scopeObject.getLeaf())), scopeObject.getTopologyObject(), scopeObject.getTopologyObjectType(), scopeObject
- .getInnerContainer());
+ if (scopeObject.getContainer() != null) {
+ validateContainerWithMatchingParameters(scopeObject.getContainer(), new ArrayList<>(Collections.singletonList(
+ scopeObject.getLeaf())), scopeObject.getTopologyObject(), scopeObject.getTopologyObjectType(),
+ scopeObject.getInnerContainer());
+ }
}
private void validateContainerWithMatchingParameters(ContainerType containerType, List<String> params,
switch (containerType) {
case ID:
if (!params.isEmpty() && !(params.size() == 1 && params.contains(null))) {
- throw TiesPathException.grammarError("Adding parameters for id container is not supported");
+ throw TeivPathException.grammarError("Adding parameters for id container is not supported");
}
break;
case ATTRIBUTES:
case SOURCE_IDS, CLASSIFIERS:
checkSourceIdTopologyObject(params, topologyObject);
break;
- case ASSOCIATION:
- checkAssociationTopologyObject(params, topologyObject, topologyObjectType, innerContainer);
- break;
default:
break;
}
}
- private void checkAssociationTopologyObject(List<String> params, String topologyObject,
- TopologyObjectType topologyObjectType, List<String> innerContainer) {
- if (innerContainer.isEmpty()) {
- throw TiesPathException.grammarError("Missing association name");
+ @SuppressWarnings({ "java:S1874" })
+ private void checkAssociationTopologyObject(List<String> params, String topologyObject) {
+ if (topologyObject.split("/").length < 2) {
+ throw TeivPathException.grammarError("Missing association name");
}
+ String[] topologyObjectArray = topologyObject.split("/");
+ String realTopologyObject = topologyObjectArray[0];
+ String association = topologyObjectArray[1];
RelationType relation;
- switch (topologyObjectType) {
- case ENTITY -> relation = SchemaRegistry.getRelationTypes().stream().filter(relationType -> (relationType
- .getASide().getName().equals(topologyObject) && relationType.getASideAssociation().getName().equals(
- innerContainer.get(0))) || (relationType.getBSide().getName().equals(
- topologyObject) && relationType.getBSideAssociation().getName().equals(innerContainer
- .get(0)))).findFirst().orElseThrow(() -> TiesPathException.invalidAssociation(
- topologyObject, innerContainer.get(0)));
- case RELATION -> {
- relation = SchemaRegistry.getRelationTypeByName(topologyObject);
- if (!relation.getASideAssociation().getName().equals(innerContainer.get(0)) && !relation
- .getBSideAssociation().getName().equals(innerContainer.get(0))) {
- throw TiesPathException.invalidAssociation(topologyObject, innerContainer.get(0));
- }
+ // Case Entity
+ if (SchemaRegistry.getEntityNames().contains(realTopologyObject)) {
+ relation = SchemaRegistry.getRelationTypes().stream().filter(relationType -> (relationType.getASide().getName()
+ .equals(realTopologyObject) && relationType.getASideAssociation().getName().equals(
+ association)) || (relationType.getBSide().getName().equals(realTopologyObject) && relationType
+ .getBSideAssociation().getName().equals(association))).findFirst().orElseThrow(
+ () -> TeivPathException.invalidAssociation(realTopologyObject, association));
+ }
+ // Case Relation
+ else if (SchemaRegistry.getRelationNames().contains(realTopologyObject)) {
+ relation = SchemaRegistry.getRelationTypeByName(realTopologyObject);
+ if (!relation.getASideAssociation().getName().equals(association) && !relation.getBSideAssociation().getName()
+ .equals(association)) {
+ throw TeivPathException.invalidAssociation(realTopologyObject, association);
}
- default -> throw TiesPathException.containerValidationWithUndefinedTopologyObjectType(topologyObject);
+ } else {
+ throw TeivPathException.invalidTopologyObject(realTopologyObject);
}
if (!params.isEmpty() && params.get(0) != null) {
- checkParamsForAssociation(relation, innerContainer.get(0), params);
+ checkParamsForAssociation(relation, association, params);
}
}
private void checkParamsForAssociation(RelationType relationType, String associationName, List<String> params) {
if ((relationType.getASideAssociation().getName().equals(associationName) && !params.stream().allMatch(
- param -> relationType.getBSide().getFields().containsKey(param))) || (relationType.getBSideAssociation()
- .getName().equals(associationName) && !params.stream().allMatch(param -> relationType.getASide()
- .getFields().containsKey(param)))) {
- throw TiesPathException.invalidParamsForAssociation(associationName);
+ param -> relationType.getBSide().getAttributeNames().contains(param))) || (relationType
+ .getBSideAssociation().getName().equals(associationName) && !params.stream().allMatch(
+ param -> relationType.getASide().getAttributeNames().contains(param)))) {
+ throw TeivPathException.invalidParamsForAssociation(associationName);
}
}
private void checkSourceIdTopologyObject(List<String> params, String topologyObject) {
if (params.stream().anyMatch(param -> !param.equals(ITEM))) {
- throw TiesPathException.sourceIdNameError(topologyObject);
+ throw TeivPathException.sourceIdNameError(topologyObject);
}
}
+ @SuppressWarnings({ "java:S1874" })
private void checkAttributesOfTopologyObject(List<String> params, String topologyObject,
TopologyObjectType topologyObjectType) {
switch (topologyObjectType) {
List<String> notMatchingParams = params.stream().filter(a -> !entityType.getAttributeNames().contains(a))
.toList();
if (!notMatchingParams.isEmpty()) {
- throw TiesPathException.columnNamesError(topologyObject, notMatchingParams);
+ throw TeivPathException.columnNamesError(topologyObject, notMatchingParams);
}
}
case RELATION -> {
- RelationType relationType = SchemaRegistry.getRelationTypeByName(topologyObject);
- List<String> notMatchingParams2 = params.stream().filter(a -> !relationType.getAttributeNames().contains(a))
+ RelationType relation = SchemaRegistry.getRelationTypeByName(topologyObject);
+ List<String> notMatchingParams2 = params.stream().filter(a -> !relation.getAttributeNames().contains(a))
.toList();
if (!notMatchingParams2.isEmpty()) {
- throw TiesPathException.columnNamesError(topologyObject, notMatchingParams2);
+ throw TeivPathException.columnNamesError(topologyObject, notMatchingParams2);
}
}
+ case ASSOCIATION -> checkAssociationTopologyObject(params, topologyObject);
+ default -> throw TeivPathException.grammarError(String.format("Undefined topologyObject: %s", topologyObject));
}
}
}
private void validateParameterOfScopeObject(ScopeLogicalBlock scopeLogicalBlock, String domain) {
- ScopeObject so = scopeLogicalBlock.getScopeObject();
- switch (so.getContainer()) {
- case ATTRIBUTES:
- validateAttributesParameter(so);
- break;
- case ID:
- validateIdParameter(so);
- break;
- case ASSOCIATION, RELATION:
- validateAssociationAndRelationParameter(so);
- break;
- case SOURCE_IDS:
- validateSourceIdsParameter(so);
- break;
- case CLASSIFIERS:
- validateClassifiersParameter(so);
- break;
- case DECORATORS:
- validateDecoratorsParameter(so);
- break;
- case METADATA:
- validateMetadataParameter(so);
- break;
- default:
- break;
- }
- }
-
+ if (scopeLogicalBlock.getScopeObject().getContainer() != null) {
+ ScopeObject so = scopeLogicalBlock.getScopeObject();
+ switch (so.getContainer()) {
+ case ATTRIBUTES:
+ validateAttributesParameter(so);
+ break;
+ case ID:
+ validateIdParameter(so);
+ break;
+ case RELATION:
+ validateAssociationAndRelationParameter(so);
+ break;
+ case SOURCE_IDS:
+ validateSourceIdsParameter(so);
+ break;
+ case CLASSIFIERS:
+ validateClassifiersParameter(so);
+ break;
+ case DECORATORS:
+ validateDecoratorsParameter(so);
+ break;
+ case METADATA:
+ validateMetadataParameter(so);
+ break;
+ default:
+ break;
+ }
+ }
+ }
+
+ @SuppressWarnings({ "java:S1874" })
private void validateAttributesParameter(final ScopeObject so) {
- if (so.getInnerContainer().isEmpty()) {
- so.setDataType(SchemaRegistry.getEntityTypeByName(so.getTopologyObject()).getFields().get(so.getLeaf()));
- compareResolverDataTypeToDataType(so);
+ String[] topologyObject = so.getTopologyObject().split("/");
+ if (topologyObject.length > 1) {
+ if (so.getInnerContainer().isEmpty()) {
+ so.setDataType(SchemaRegistry.getAssociationSideEntity(topologyObject[1]).getFields().get(so.getLeaf()));
+ compareResolverDataTypeToDataType(so);
+ } else {
+ setDataTypeForComplexAttribute(so);
+ }
} else {
- setDataTypeForComplexAttribute(so);
+ if (so.getInnerContainer().isEmpty()) {
+ so.setDataType(SchemaRegistry.getEntityTypeByName(topologyObject[0]).getFields().get(so.getLeaf()));
+ compareResolverDataTypeToDataType(so);
+ } else {
+ setDataTypeForComplexAttribute(so);
+ }
}
}
private void validateIdParameter(final ScopeObject so) {
if (so.getResolverDataType().equals(ResolverDataType.INTEGER)) {
- throw TiesPathException.grammarError("Data is given in invalid datatype in scopeFilter");
+ throw TeivPathException.grammarError("Data is given in invalid datatype in scopeFilter");
}
so.setDataType(DataType.PRIMITIVE);
}
private void validateAssociationAndRelationParameter(final ScopeObject so) {
if (so.getLeaf() != null && !ID_COLUMN_NAME.equals(so.getLeaf())) {
- throw TiesPathException.grammarError("Only id condition can be queried in case of association container");
+ throw TeivPathException.grammarError("Only id condition can be queried in case of association container");
} else if (so.getResolverDataType().equals(ResolverDataType.INTEGER)) {
- throw TiesPathException.grammarError("Invalid data type provided for scopeFilter");
+ throw TeivPathException.invalidDataType();
} else if (so.getResolverDataType().equals(ResolverDataType.STRING)) {
so.setDataType(DataType.PRIMITIVE);
}
private void validateSourceIdsParameter(final ScopeObject so) {
if (so.getResolverDataType().equals(ResolverDataType.INTEGER)) {
- throw TiesPathException.grammarError("Invalid data type provided for scopeFilter");
+ throw TeivPathException.invalidDataType();
}
so.setDataType(DataType.PRIMITIVE);
}
private void validateMetadataParameter(final ScopeObject so) {
- if (so.getLeaf() != null && so.getLeaf().equals("reliabilityIndicator")) {
+ final List<String> validMetadataParameters = List.of("lastModified", "firstDiscovered", "reliabilityIndicator");
+ if (so.getLeaf() != null && validMetadataParameters.contains(so.getLeaf())) {
if (so.getResolverDataType().equals(ResolverDataType.STRING)) {
- validateReliabilityIndicator(so.getParameter());
+ if (so.getLeaf().equals("reliabilityIndicator")) {
+ validateReliabilityIndicator(so.getParameter());
+ }
} else {
- throw TiesPathException.grammarError("Invalid data type provided for scopeFilter");
+ throw TeivPathException.grammarError("Invalid data type provided for scopeFilter");
}
} else {
- throw TiesPathException.invalidMetadaFilter(so.getLeaf());
+ throw TeivPathException.invalidMetadaFilter(so.getLeaf());
+ }
+ if (so.getLeaf().equals("lastModified") || so.getLeaf().equals("firstDiscovered")) {
+ so.setDataType(DataType.TIMESTAMPTZ);
+ } else {
+ so.setDataType(DataType.PRIMITIVE);
}
- so.setDataType(DataType.PRIMITIVE);
}
private void validateClassifiersParameter(final ScopeObject so) {
if (so.getResolverDataType().equals(ResolverDataType.INTEGER)) {
- throw TiesPathException.grammarError("Invalid data type provided for scopeFilter");
+ throw TeivPathException.grammarError("Invalid data type provided for scopeFilter");
}
so.setDataType(DataType.PRIMITIVE);
Classifiers classifier = Classifiers.builder().data(List.of(so.getParameter())).build();
if ((scopeObject.getResolverDataType().equals(ResolverDataType.INTEGER) && !numericDataTypes.contains(scopeObject
.getDataType())) || (scopeObject.getResolverDataType().equals(ResolverDataType.STRING) && numericDataTypes
.contains(scopeObject.getDataType()))) {
- throw TiesPathException.grammarError("Data is given in invalid datatype in scopeFilter");
+ throw TeivPathException.grammarError("Data is given in invalid datatype in scopeFilter");
}
}
if (filterCriteria.getScope() instanceof EmptyLogicalBlock || filterCriteria.getTargets().isEmpty()) {
return;
}
-
Set<String> scopeTopologyObjects = new HashSet<>();
runOnTree(filterCriteria.getScope(), domain, (ScopeLogicalBlock lb, String dom) -> scopeTopologyObjects.add(lb
- .getScopeObject().getTopologyObject()));
-
+ .getScopeObject().getTopologyObject().split("/")[0]));
Set<String> targetTopologyObjects = filterCriteria.getTargets().stream().map(TargetObject::getTopologyObject)
.collect(Collectors.toSet());
-
if (targetTopologyObjects.size() == scopeTopologyObjects.size()) {
scopeTopologyObjects.removeAll(targetTopologyObjects);
if (!scopeTopologyObjects.isEmpty()) {
- throw TiesPathException.notMatchingScopeAndTargetFilter();
+ throw TeivPathException.notMatchingScopeAndTargetFilter();
}
} else {
- throw TiesPathException.notMatchingScopeAndTargetFilter();
+ throw TeivPathException.notMatchingScopeAndTargetFilter();
}
}
*/
public void splitFilterCriteria(FilterCriteria filterCriteria) {
Map<String, InnerFilterCriteria> innerFilterCriteriaMap = new HashMap<>();
-
for (InnerFilterCriteria base : filterCriteria.getFilterCriteriaList()) {
for (TargetObject targetObject : base.getTargets()) {
if (!innerFilterCriteriaMap.containsKey(targetObject.getTopologyObject())) {
innerFilterCriteriaMap.get(targetObject.getTopologyObject()).getTargets().add(targetObject);
}
}
-
for (InnerFilterCriteria base : filterCriteria.getFilterCriteriaList()) {
List<String> types = base.getTargets().stream().map(TargetObject::getTopologyObject).toList();
for (String type : types) {
innerFilterCriteriaMap.get(type).setScope(generateCutTree(base.getScope(), type));
}
}
-
filterCriteria.setFilterCriteriaList(new ArrayList<>(innerFilterCriteriaMap.values()));
}
/**
- * Validates the binary tree of LogicalBlocks (LB) in FilterCriteria based on isValid boolean of the objects.Â
+ * Validates the binary tree of LogicalBlocks (LB) in FilterCriteria based on isValid boolean of the objects.
* Remove invalid LB, when an AND block has an invalid LB set the AND block to invalid
* When an OR has an invalid block, replace the OR block with the valid child element.
* Throw an error when the last LB became invalid.
filterCriteria.getFilterCriteriaList().forEach(innerFilterCriteria -> {
innerFilterCriteria.setScope(traverseTree(innerFilterCriteria.getScope()));
if (!innerFilterCriteria.getScope().isValid()) {
- throw TiesPathException.invalidQueryError();
+ throw TeivPathException.invalidQueryError();
}
});
}
+ private void matchTopologyObjectTypeWithResolvingTopologyObjectType(FilterCriteria filterCriteria) {
+ if (filterCriteria.getResolvingTopologyObjectType().equals(
+ FilterCriteria.ResolvingTopologyObjectType.RELATIONSHIP)) {
+ for (InnerFilterCriteria innerCriteria : filterCriteria.getFilterCriteriaList()) {
+ for (TargetObject target : innerCriteria.getTargets()) {
+ if (target.getTopologyObjectType() != TopologyObjectType.RELATION) {
+ throw TeivPathException.invalidTargetFilter(target.getTopologyObject());
+ }
+ }
+ }
+ }
+ }
+
private LogicalBlock traverseTree(LogicalBlock logicalBlock) {
if (logicalBlock instanceof AndOrLogicalBlock andOrLogicalBlock && andOrLogicalBlock.getChildren().size() == 2) {
andOrLogicalBlock.getChildren().set(0, traverseTree(andOrLogicalBlock.getChildren().get(0)));
return getAndOrLogicalBlock(type, orLogicalBlock, OrLogicalBlock::new);
}
if (logicalBlock instanceof ScopeLogicalBlock scopeLogicalBlock) {
- if (!scopeLogicalBlock.getScopeObject().getTopologyObject().equals(type)) {
+ if ((!scopeLogicalBlock.getScopeObject().getTopologyObject().equals(type) && !scopeLogicalBlock.getScopeObject()
+ .getTopologyObjectType().equals(ASSOCIATION)) || (!scopeLogicalBlock.getScopeObject()
+ .getTopologyObject().split("/")[0].equals(type) && scopeLogicalBlock.getScopeObject()
+ .getTopologyObjectType().equals(ASSOCIATION))) {
return EmptyLogicalBlock.getInstance();
}
ScopeObject response = ScopeObject.builder(type).topologyObjectType(scopeLogicalBlock.getScopeObject()
.parameter(scopeLogicalBlock.getScopeObject().getParameter()).dataType(scopeLogicalBlock
.getScopeObject().getDataType()).resolverDataType(scopeLogicalBlock.getScopeObject()
.getResolverDataType()).build();
-
+ if (scopeLogicalBlock.getScopeObject().getTopologyObjectType().equals(ASSOCIATION)) {
+ response.setTopologyObject(scopeLogicalBlock.getScopeObject().getTopologyObject());
+ }
return new ScopeLogicalBlock(response);
}
return EmptyLogicalBlock.getInstance();
Supplier<AndOrLogicalBlock> constructor) {
LogicalBlock left = generateCutTree(andLogicalBlock.getChildren().get(0), type);
LogicalBlock right = generateCutTree(andLogicalBlock.getChildren().get(1), type);
-
if (!left.isValid() || left instanceof EmptyLogicalBlock) {
return right;
}
if (!right.isValid() || right instanceof EmptyLogicalBlock || left.equals(right)) {
return left;
}
-
AndOrLogicalBlock response = constructor.get();
response.getChildren().add(left);
response.getChildren().add(right);
private ScopeLogicalBlock buildScopeLogicalBlockForRelationship(InnerFilterCriteria criteria) {
return new ScopeLogicalBlock(ScopeObject.builder(criteria.getTargets().get(0).getTopologyObject())
- .topologyObjectType(TopologyObjectType.RELATION).queryFunction(QueryFunction.NOT_NULL).container(
- ContainerType.ID).resolverDataType(ResolverDataType.STRING).dataType(PRIMITIVE).build());
+ .topologyObjectType(TopologyObjectType.RELATION).queryFunction(QueryFunction.NOT_NULL).container(ID)
+ .resolverDataType(ResolverDataType.STRING).dataType(PRIMITIVE).build());
}
private boolean validateReliabilityIndicator(String param) {
try {
return Reliability.valueOf(param) != null;
} catch (IllegalArgumentException e) {
- throw TiesPathException.grammarError("Invalid parameter type provided for scopeFilter");
+ throw TeivPathException.grammarError("Invalid parameter type provided for scopeFilter");
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.refiner;
+package org.oran.smo.teiv.exposure.teivpath.refiner;
import org.apache.commons.lang3.tuple.Pair;
import org.jooq.Field;
import org.jooq.SelectConditionStep;
import org.jooq.SelectField;
import org.jooq.SelectOrderByStep;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.FilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.FilterCriteria;
import lombok.experimental.UtilityClass;
import org.jooq.SelectJoinStep;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.InnerFilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.InnerFilterCriteria;
import org.oran.smo.teiv.schema.DataType;
import java.util.ArrayList;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.select;
import static org.jooq.impl.DSL.selectCount;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@UtilityClass
@SuppressWarnings({ "rawtypes", "unchecked" })
resolvedFields.add(field("null::bigint").as(field.getKey().getName()));
} else if (field.getValue() == DataType.DECIMAL) {
resolvedFields.add(field("null::numeric").as(field.getKey().getName()));
- } else if (field.getValue() == DataType.TIMESTAMPTZ) {
- resolvedFields.add(field("null::timestamptz").as(field.getKey().getName()));
} else if (field.getValue() == DataType.BYTEA) {
resolvedFields.add(field("null::bytea").as(field.getKey().getName()));
} else {
nulledFields.add(field("null::bigint").as(field.getName()));
} else if (selectList.get(i).getValue().get(field) == DataType.DECIMAL) {
nulledFields.add(field("null::numeric").as(field.getName()));
- } else if (selectList.get(i).getValue().get(field) == DataType.TIMESTAMPTZ) {
- nulledFields.add(field("null::timestamptz").as(field.getName()));
} else if (selectList.get(i).getValue().get(field) == DataType.BYTEA) {
nulledFields.add(field("null::bytea").as(field.getName()));
} else {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.resolver;
+package org.oran.smo.teiv.exposure.teivpath.resolver;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
-import org.oran.smo.teiv.antlr4.tiesPathParser;
+import org.oran.smo.teiv.antlr4.teivPathParser;
import org.oran.smo.teiv.utils.path.StrictErrorStrategy;
-import org.oran.smo.teiv.utils.path.TiesPathErrorListener;
-import org.oran.smo.teiv.utils.path.TiesPathLexer;
-import org.oran.smo.teiv.utils.path.TiesPathParser;
+import org.oran.smo.teiv.utils.path.TeivPathErrorListener;
+import org.oran.smo.teiv.utils.path.TeivPathLexer;
+import org.oran.smo.teiv.utils.path.TeivPathParser;
public interface PathResolver<T> {
T process(String rootObject, String filter);
- default tiesPathParser getTiesPathParser(String filter) {
+ default teivPathParser getTeivPathParser(String filter) {
final CharStream inputStream = CharStreams.fromString(filter);
- final TiesPathLexer tiesPathLexer = new TiesPathLexer(inputStream);
- final tiesPathParser tiesPathParser = new TiesPathParser(new CommonTokenStream(tiesPathLexer));
- tiesPathParser.removeErrorListeners();
- tiesPathParser.addErrorListener(new TiesPathErrorListener());
- tiesPathParser.setErrorHandler(new StrictErrorStrategy());
+ final TeivPathLexer teivPathLexer = new TeivPathLexer(inputStream);
+ final teivPathParser teivPathParser = new TeivPathParser(new CommonTokenStream(teivPathLexer));
+ teivPathParser.removeErrorListeners();
+ teivPathParser.addErrorListener(new TeivPathErrorListener());
+ teivPathParser.setErrorHandler(new StrictErrorStrategy());
- return tiesPathParser;
+ return teivPathParser;
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.resolver;
+package org.oran.smo.teiv.exposure.teivpath.resolver;
public enum ResolverDataType {
INTEGER,
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * Modifications Copyright (C) 2025 OpenInfra Foundation Europe
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.oran.smo.teiv.exposure.teivpath.resolver;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+import lombok.experimental.UtilityClass;
+
+import jakarta.annotation.Nullable;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
+
+import static org.oran.smo.teiv.utils.TeivConstants.ATTRIBUTES;
+import static org.oran.smo.teiv.utils.TeivConstants.WILDCARD;
+
+@UtilityClass
+public class ResolverUtil {
+ public static String getTopologyObject(final String rootObject, final List<String> containerNames) {
+ final int noOfContainers = containerNames.size();
+ final String firstContainer = containerNames.get(0);
+
+ if (noOfContainers > 2) {
+ throw TeivPathException.grammarError("More than two level deep path is not allowed");
+ } else if (noOfContainers == 2) {
+ return getTopologyObjectWhenTwoContainers(rootObject, firstContainer);
+ }
+ return Optional.ofNullable(rootObject).orElse(WILDCARD);
+ }
+
+ public static boolean isComplexAttribute(final List<String> containerNames) {
+ int index = containerNames.indexOf(ATTRIBUTES);
+ return index != -1 && containerNames.size() - 1 > index;
+ }
+
+ @Nullable
+ public static ContainerType getContainerType(final List<String> containerNames) {
+ List<String> validContainerNames = containerNames.stream().filter(container -> ContainerType.fromValue(
+ container) != null).toList();
+ if (validContainerNames.size() > 1) {
+ throw TeivPathException.grammarError(String.format("More than one valid containerType appeared in path: %s",
+ String.join(", ", validContainerNames)));
+ }
+ return ContainerType.fromValue(containerNames.get(containerNames.size() - 1));
+ }
+
+ private static String getTopologyObjectWhenTwoContainers(final String rootObject, final String firstContainer) {
+ if (null == rootObject || firstContainer.equals(rootObject)) {
+ return firstContainer;
+ } else {
+ throw TeivPathException.grammarError(
+ "Target/Scope filter can only contain Root Object types mentioned in the path parameter");
+ }
+ }
+
+ public static String getTopologyObjectForScope(String rootObject, List<String> containerNames) {
+ ContainerType containerType = identifyContainerType(containerNames);
+
+ List<String> containerNamesPositionedBeforeContainerType = collectContainerNamesPositionedBeforeContainerType(
+ containerNames, containerType);
+
+ if (containerNamesPositionedBeforeContainerType.size() > 2) {
+ throw TeivPathException.grammarError(containerType != null ?
+ String.format("Too many containers before %s", containerType.getValue()) :
+ String.format("Too many containers: %s", String.join(", ",
+ containerNamesPositionedBeforeContainerType)));
+ }
+
+ return assembleTopologyObject(rootObject, containerNamesPositionedBeforeContainerType);
+ }
+
+ private static String assembleTopologyObject(String rootObject,
+ List<String> containerNamesPositionedBeforeContainerType) {
+ if (rootObject == null) {
+ if (containerNamesPositionedBeforeContainerType.isEmpty()) {
+ return WILDCARD;
+ } else if (containerNamesPositionedBeforeContainerType.size() == 1) {
+ return WILDCARD + "/" + containerNamesPositionedBeforeContainerType.get(0);
+ }
+ return String.join("/", containerNamesPositionedBeforeContainerType);
+ } else {
+ if (containerNamesPositionedBeforeContainerType.size() == 2) {
+ if (containerNamesPositionedBeforeContainerType.get(0).equals(rootObject)) {
+ return String.join("/", containerNamesPositionedBeforeContainerType);
+ }
+ throw TeivPathException.grammarError(
+ "Target/Scope filter can only contain Root Object types mentioned in the path parameter");
+ } else if (containerNamesPositionedBeforeContainerType.size() == 1) {
+ if (containerNamesPositionedBeforeContainerType.get(0).equals(rootObject)) {
+ return rootObject;
+ } else {
+ return String.format("%s/%s", rootObject, containerNamesPositionedBeforeContainerType.get(0));
+ }
+ }
+ return rootObject;
+ }
+ }
+
+ private static List<String> collectContainerNamesPositionedBeforeContainerType(List<String> containerNames,
+ ContainerType containerType) {
+ List<String> containerNamesPositionedBeforeContainerType = new ArrayList<>();
+ if (containerType != null) {
+ containerNamesPositionedBeforeContainerType.addAll(containerNames.subList(0, containerNames.indexOf(
+ containerType.getValue())));
+ } else {
+ containerNamesPositionedBeforeContainerType.addAll(containerNames);
+ }
+ return containerNamesPositionedBeforeContainerType;
+ }
+
+ private static ContainerType identifyContainerType(List<String> containerNames) {
+ ContainerType containerType = null;
+ for (String containerName : containerNames) {
+ if (ContainerType.fromValue(containerName) != null) {
+ containerType = ContainerType.fromValue(containerName);
+ break;
+ }
+ }
+ return containerType;
+ }
+}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.resolver;
-
-import org.oran.smo.teiv.antlr4.tiesPathBaseListener;
-import org.oran.smo.teiv.antlr4.tiesPathParser;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndOrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ContainerType;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.LogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.OrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.QueryFunction;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeObject;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+package org.oran.smo.teiv.exposure.teivpath.resolver;
+
+import org.oran.smo.teiv.antlr4.teivPathBaseListener;
+import org.oran.smo.teiv.antlr4.teivPathParser;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndOrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.LogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.OrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeObject;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
-import static org.oran.smo.teiv.exposure.tiespath.resolver.ResolverUtil.getContainerType;
-import static org.oran.smo.teiv.exposure.tiespath.resolver.ResolverUtil.getTopologyObject;
-import static org.oran.smo.teiv.exposure.tiespath.resolver.ResolverUtil.isComplexAttribute;
-import static org.oran.smo.teiv.utils.TiesConstants.ATTRIBUTES;
-import static org.oran.smo.teiv.utils.TiesConstants.WILDCARD;
-
-public class ScopeFilterListener extends tiesPathBaseListener {
+import static org.oran.smo.teiv.exposure.teivpath.resolver.ResolverUtil.getContainerType;
+import static org.oran.smo.teiv.exposure.teivpath.resolver.ResolverUtil.getTopologyObjectForScope;
+import static org.oran.smo.teiv.exposure.teivpath.resolver.ResolverUtil.isComplexAttribute;
+import static org.oran.smo.teiv.utils.TeivConstants.ATTRIBUTES;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.METADATA;
+import static org.oran.smo.teiv.utils.TeivConstants.SOURCE_IDS;
+import static org.oran.smo.teiv.utils.TeivConstants.WILDCARD;
+
+public class ScopeFilterListener extends teivPathBaseListener {
private final String rootObject;
private final List<String> containerNames = new ArrayList<>();
}
private LogicalBlock generateLBWithContainers() {
- final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = ScopeObject.builder(getTopologyObject(this.rootObject,
- this.containerNames)).queryFunction(QueryFunction.NOT_NULL).innerContainer(new ArrayList<>(Arrays.asList(
- this.containerNames.get(containerNames.size() - 1)))).resolverDataType(ResolverDataType.NOT_NULL);
+ checkIfContainerIsCompatibleWithQueryFunction(QueryFunction.NOT_NULL);
+ final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = ScopeObject.builder(getTopologyObjectForScope(
+ this.rootObject, this.containerNames)).queryFunction(QueryFunction.NOT_NULL).resolverDataType(
+ ResolverDataType.NOT_NULL);
addScopeLogicalBlock(scopeObjectBuilder);
return this.logicalBlock;
}
+ private void checkIfContainerIsCompatibleWithQueryFunction(QueryFunction queryFunction) {
+ List<String> containerTypesThatShouldNotBePairedWithNullQueryFunction = List.of(ATTRIBUTES, CLASSIFIERS, DECORATORS,
+ SOURCE_IDS, METADATA);
+ if (queryFunction.equals(QueryFunction.NOT_NULL) && containerNames.stream().anyMatch(
+ containerTypesThatShouldNotBePairedWithNullQueryFunction::contains)) {
+ throw TeivPathException.grammarError("Invalid data in scopeFilter");
+ }
+ }
+
private LogicalBlock logicalBlock;
public ScopeFilterListener(String rootObject) {
}
@Override
- public void exitContainerName(final tiesPathParser.ContainerNameContext ctx) {
+ public void exitContainerName(final teivPathParser.ContainerNameContext ctx) {
final String containerName = ctx.getText();
containerNames.add(containerName);
}
@Override
- public void exitTextFunctionCondition(tiesPathParser.TextFunctionConditionContext ctx) {
+ public void exitTextFunctionCondition(teivPathParser.TextFunctionConditionContext ctx) {
if (getContainerType(this.containerNames) == ContainerType.ID) {
final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = getScopeObjectBuilder(null, QueryFunction.EQ);
scopeObjectBuilder.parameter(removeQuotes(ctx.StringLiteral().getText())).resolverDataType(
ResolverDataType.STRING);
addScopeLogicalBlock(scopeObjectBuilder);
} else {
- throw TiesPathException.grammarError("text() is supported for ID only");
+ throw TeivPathException.grammarError("text() is supported for ID only");
}
}
@Override
- public void exitContainsTextFunctionCondition(tiesPathParser.ContainsTextFunctionConditionContext ctx) {
+ public void exitContainsTextFunctionCondition(teivPathParser.ContainsTextFunctionConditionContext ctx) {
if (getContainerType(this.containerNames) == ContainerType.ID) {
final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = getScopeObjectBuilder(null, QueryFunction.CONTAINS);
scopeObjectBuilder.parameter(removeQuotes(ctx.StringLiteral().getText())).resolverDataType(
ResolverDataType.STRING);
addScopeLogicalBlock(scopeObjectBuilder);
} else {
- throw TiesPathException.grammarError("text() is supported for ID only");
+ throw TeivPathException.grammarError("text() is supported for ID only");
}
-
}
@Override
- public void exitContainsFunctionCondition(final tiesPathParser.ContainsFunctionConditionContext ctx) {
+ public void exitContainsFunctionCondition(final teivPathParser.ContainsFunctionConditionContext ctx) {
final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = getScopeObjectBuilder(ctx.leafName().getText(),
QueryFunction.CONTAINS);
scopeObjectBuilder.parameter(removeQuotes(ctx.StringLiteral().getText())).resolverDataType(ResolverDataType.STRING);
}
@Override
- public void exitWithinMetersFunctionCondition(final tiesPathParser.WithinMetersFunctionConditionContext ctx) {
+ public void exitWithinMetersFunctionCondition(final teivPathParser.WithinMetersFunctionConditionContext ctx) {
final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = getScopeObjectBuilder(ctx.leafName().getText(),
QueryFunction.WITHIN_METERS);
String parameter = ctx.StringLiteral().getText() + ", ";
-
if (ctx.IntegerLiteral() != null) {
parameter += ctx.IntegerLiteral().getText();
} else if (ctx.DoubleLiteral() != null) {
} else if (ctx.DecimalLiteral() != null) {
parameter += ctx.DecimalLiteral().getText();
} else {
- throw TiesPathException.grammarError("Integer, decimal or double meters parameter expected!");
+ throw TeivPathException.grammarError("Integer, decimal or double meters parameter expected!");
}
-
scopeObjectBuilder.parameter(parameter).resolverDataType(ResolverDataType.STRING);
-
addScopeLogicalBlock(scopeObjectBuilder);
}
@Override
- public void exitCoveredByFunctionCondition(final tiesPathParser.CoveredByFunctionConditionContext ctx) {
+ public void exitCoveredByFunctionCondition(final teivPathParser.CoveredByFunctionConditionContext ctx) {
final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = getScopeObjectBuilder(ctx.leafName().getText(),
QueryFunction.COVERED_BY);
scopeObjectBuilder.parameter(removeQuotes(ctx.StringLiteral().getText())).resolverDataType(ResolverDataType.STRING);
}
@Override
- public void exitLeafCondition(final tiesPathParser.LeafConditionContext ctx) {
+ public void exitLeafCondition(final teivPathParser.LeafConditionContext ctx) {
final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = getScopeObjectBuilder(ctx.leafName().getText(),
QueryFunction.fromValue(ctx.comparativeOperators().getText()));
-
if (ctx.IntegerLiteral() != null) {
scopeObjectBuilder.parameter(ctx.IntegerLiteral().getText()).resolverDataType(ResolverDataType.INTEGER);
} else if (ctx.StringLiteral() != null) {
scopeObjectBuilder.parameter(removeQuotes(ctx.StringLiteral().getText())).resolverDataType(
ResolverDataType.STRING);
} else {
- throw TiesPathException.grammarError("Unsupported comparison value encountered in expression" + ctx.getText());
+ throw TeivPathException.grammarError("Unsupported comparison value encountered in expression" + ctx.getText());
}
-
addScopeLogicalBlock(scopeObjectBuilder);
}
}
@Override
- public void exitBooleanOperators(final tiesPathParser.BooleanOperatorsContext ctx) {
+ public void exitBooleanOperators(final teivPathParser.BooleanOperatorsContext ctx) {
final AndOrLogicalBlock andOrLogicalBlock;
if (ctx.getText().equals("and")) {
andOrLogicalBlock = new AndLogicalBlock();
andOrLogicalBlock = new OrLogicalBlock();
andOrLogicalBlock.addChild(this.logicalBlock);
}
-
this.logicalBlock = andOrLogicalBlock;
}
@Override
- public void exitFieldLeaf(final tiesPathParser.FieldLeafContext ctx) {
- throw TiesPathException.grammarError("Parameter without any condition is not supported in scope filter");
+ public void exitFieldLeaf(final teivPathParser.FieldLeafContext ctx) {
+ throw TeivPathException.grammarError("Parameter without any condition is not supported in scope filter");
}
private ScopeObject.ScopeObjectBuilder getScopeObjectBuilder(final String leafName, final QueryFunction queryFunction) {
- final String topologyObject = getTopologyObject(this.rootObject, this.containerNames);
+ final String topologyObject = getTopologyObjectForScope(this.rootObject, this.containerNames);
final ScopeObject.ScopeObjectBuilder scopeObjectBuilder = ScopeObject.builder(topologyObject).leaf(leafName)
.queryFunction(queryFunction);
-
Optional.ofNullable(getContainerType(this.containerNames)).ifPresentOrElse(scopeObjectBuilder::container, () -> {
if (!isComplexAttribute(containerNames)) {
final String container = this.containerNames.get(containerNames.size() - 1);
if (topologyObject.equals(container)) {
Optional.ofNullable(getContainerType(List.of(leafName))).ifPresentOrElse(
containerType -> scopeObjectBuilder.container(containerType).leaf(null), () -> {
- throw TiesPathException.grammarError(String.format(
+ throw TeivPathException.grammarError(String.format(
"%s is not a valid leaf for topology object: %s", leafName, rootObject));
});
} else {
- scopeObjectBuilder.topologyObject(Objects.equals(topologyObject, WILDCARD) ? null : topologyObject)
- .innerContainer(new ArrayList<>(Arrays.asList(container)));
+ scopeObjectBuilder.topologyObject(Objects.equals(topologyObject, WILDCARD) ? null : topologyObject);
}
} else {
scopeObjectBuilder.topologyObject(topologyObject.equals(WILDCARD) ? null : topologyObject).container(
containerNames.indexOf(ATTRIBUTES) + 1, containerNames.size())));
}
});
+
return scopeObjectBuilder;
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.resolver;
+package org.oran.smo.teiv.exposure.teivpath.resolver;
import java.util.Optional;
import org.antlr.v4.runtime.misc.ParseCancellationException;
-import org.oran.smo.teiv.antlr4.tiesPathParser;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.EmptyLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.LogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.OrLogicalBlock;
+import org.oran.smo.teiv.antlr4.teivPathParser;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.EmptyLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.LogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.OrLogicalBlock;
import org.oran.smo.teiv.utils.path.exception.PathParsingException;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
private LogicalBlock getLogicalBlock(final String rootObject, final String filter) {
try {
- final tiesPathParser tiesPathParser = getTiesPathParser(filter);
+ final teivPathParser teivPathParser = getTeivPathParser(filter);
final ScopeFilterListener scopeFilterListener = new ScopeFilterListener(rootObject);
- tiesPathParser.addParseListener(scopeFilterListener);
- tiesPathParser.tiesPath();
+ teivPathParser.addParseListener(scopeFilterListener);
+ teivPathParser.teivPath();
LogicalBlock logicalBlock = scopeFilterListener.getLogicalBlock();
- return Optional.ofNullable(logicalBlock).orElseThrow(() -> TiesPathException.grammarError(String.format(
+ return Optional.ofNullable(logicalBlock).orElseThrow(() -> TeivPathException.grammarError(String.format(
"Unsupported filter token: %s", filter)));
} catch (ParseCancellationException | PathParsingException e) {
log.error("Parsing error on target {} :", filter, e);
- throw TiesPathException.grammarError(e.getMessage());
+ throw TeivPathException.grammarError(e.getMessage());
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.resolver;
+package org.oran.smo.teiv.exposure.teivpath.resolver;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.antlr.v4.runtime.RuleContext;
-import org.oran.smo.teiv.antlr4.tiesPathBaseListener;
-import org.oran.smo.teiv.antlr4.tiesPathParser;
-import org.oran.smo.teiv.exception.TiesException;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ContainerType;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TargetObject;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.antlr4.teivPathBaseListener;
+import org.oran.smo.teiv.antlr4.teivPathParser;
+import org.oran.smo.teiv.exception.TeivException;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TargetObject;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
-import static org.oran.smo.teiv.exposure.tiespath.resolver.ResolverUtil.getContainerType;
-import static org.oran.smo.teiv.exposure.tiespath.resolver.ResolverUtil.getTopologyObject;
+import static org.oran.smo.teiv.exposure.teivpath.resolver.ResolverUtil.getContainerType;
+import static org.oran.smo.teiv.exposure.teivpath.resolver.ResolverUtil.getTopologyObject;
-public class TargetFilterListener extends tiesPathBaseListener {
+public class TargetFilterListener extends teivPathBaseListener {
private final String rootObject;
private final List<String> containerNames = new ArrayList<>();
private List<String> attributeNames = new ArrayList<>();
public TargetObject getTargetObject() {
if (containerNames.isEmpty()) {
//invalid scenario
- throw TiesException.serverException("Server unknown exception", "Requested query could not be processed", null);
+ throw TeivException.serverException("Server unknown exception", "Requested query could not be processed", null);
}
return Optional.ofNullable(getContainerType(this.containerNames)).map(containerType -> {
validateIfParamsApplicable(containerType);
private void validateIfParamsApplicable(ContainerType containerType) {
if (!containerType.isParamAllowedInTargetFilter() && !this.attributeNames.isEmpty()) {
- throw TiesPathException.grammarError(String.format("Parameters are not supported for %s in target filter",
+ throw TeivPathException.grammarError(String.format("Parameters are not supported for %s in target filter",
containerType.getValue()));
}
}
@Override
- public void exitContainerName(final tiesPathParser.ContainerNameContext ctx) {
+ public void exitContainerName(final teivPathParser.ContainerNameContext ctx) {
final String containerName = ctx.getText();
containerNames.add(containerName);
}
@Override
- public void exitContainsFunctionCondition(final tiesPathParser.ContainsFunctionConditionContext ctx) {
- throw TiesPathException.grammarError("");
+ public void exitContainsFunctionCondition(final teivPathParser.ContainsFunctionConditionContext ctx) {
+ throw TeivPathException.grammarError("");
}
@Override
- public void exitLeafCondition(final tiesPathParser.LeafConditionContext ctx) {
- throw TiesPathException.grammarError("Parameter condition is not supported in target filter");
+ public void exitLeafCondition(final teivPathParser.LeafConditionContext ctx) {
+ throw TeivPathException.grammarError("Parameter condition is not supported in target filter");
}
@Override
- public void exitBooleanOperators(final tiesPathParser.BooleanOperatorsContext ctx) {
- throw TiesPathException.grammarError("");
+ public void exitBooleanOperators(final teivPathParser.BooleanOperatorsContext ctx) {
+ throw TeivPathException.grammarError("");
}
@Override
- public void exitFieldLeaf(final tiesPathParser.FieldLeafContext ctx) {
+ public void exitFieldLeaf(final teivPathParser.FieldLeafContext ctx) {
attributeNames = ctx.leafName().stream().map(RuleContext::getText).toList();
}
assertAttributesApplicableForContainer(attributeNames);
return TargetObject.builder(containerNames.get(0)).build();
}
- throw TiesPathException.grammarError(
+ throw TeivPathException.grammarError(
"Invalid Container name or Root Object name does not match to the path parameter");
}
private void assertAttributesApplicableForContainer(List<String> attrNames) {
if (!attrNames.isEmpty()) {
- throw TiesPathException.grammarError("Attributes cannot be associated at this level");
+ throw TeivPathException.grammarError("Attributes cannot be associated at this level");
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.resolver;
+package org.oran.smo.teiv.exposure.teivpath.resolver;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;
import org.antlr.v4.runtime.misc.ParseCancellationException;
-import org.oran.smo.teiv.antlr4.tiesPathParser;
+import org.oran.smo.teiv.antlr4.teivPathParser;
import org.springframework.stereotype.Component;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TargetObject;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TargetObject;
import org.oran.smo.teiv.utils.path.exception.PathParsingException;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
import lombok.extern.slf4j.Slf4j;
-import static org.oran.smo.teiv.utils.TiesConstants.WILDCARD;
+import static org.oran.smo.teiv.utils.TeivConstants.WILDCARD;
@Slf4j
@Component
@Override
public void preCheck(String rootObject, String filter) {
if (filter.contains("|")) {
- throw TiesPathException.grammarError("OR (|) is not supported for target filter");
+ throw TeivPathException.grammarError("OR (|) is not supported for target filter");
}
}
List<TargetObject> targetObjects = new ArrayList<>();
Arrays.stream(filter.split(";")).forEach(targetToken -> {
try {
- tiesPathParser pathParser = getTiesPathParser(targetToken);
+ teivPathParser pathParser = getTeivPathParser(targetToken);
final TargetFilterListener targetFilterListener = new TargetFilterListener(rootObject);
pathParser.addParseListener(targetFilterListener);
- pathParser.tiesPath();
+ pathParser.teivPath();
targetObjects.add(targetFilterListener.getTargetObject());
} catch (ParseCancellationException | PathParsingException e) {
log.error("Parsing error on target {} :", targetToken, e);
- throw TiesPathException.grammarError(e.getMessage());
+ throw TeivPathException.grammarError(e.getMessage());
}
});
return targetObjects;
+++ /dev/null
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
- * ================================================================================
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-package org.oran.smo.teiv.exposure.tiespath.resolver;
-
-import java.util.List;
-import java.util.Optional;
-
-import lombok.experimental.UtilityClass;
-
-import jakarta.annotation.Nullable;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ContainerType;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
-
-import static org.oran.smo.teiv.utils.TiesConstants.ATTRIBUTES;
-import static org.oran.smo.teiv.utils.TiesConstants.WILDCARD;
-
-@UtilityClass
-public class ResolverUtil {
-
- public static String getTopologyObject(final String rootObject, final List<String> containerNames) {
- final int noOfContainers = containerNames.size();
- final String firstContainer = containerNames.get(0);
- if (isComplexAttribute(containerNames)) {
- return getTopologyObjectOnComplexAttributeCondition(rootObject, firstContainer);
- } else if (noOfContainers > 2) {
- throw TiesPathException.grammarError("More than two level deep path is not allowed");
- } else if (noOfContainers == 2) {
- return getTopologyObjectWhenTwoContainers(rootObject, firstContainer);
- }
-
- return Optional.ofNullable(rootObject).orElse(WILDCARD);
- }
-
- public static boolean isComplexAttribute(final List<String> containerNames) {
- int index = containerNames.indexOf(ATTRIBUTES);
- return index != -1 && containerNames.size() - 1 > index;
- }
-
- @Nullable
- public static ContainerType getContainerType(final List<String> containerNames) {
- return ContainerType.fromValue(containerNames.get(containerNames.size() - 1));
- }
-
- private static String getTopologyObjectWhenTwoContainers(final String rootObject, final String firstContainer) {
- if (null == rootObject || firstContainer.equals(rootObject)) {
- return firstContainer;
- } else {
- throw TiesPathException.grammarError(
- "Target/Scope filter can only contain Root Object types mentioned in the path parameter");
- }
- }
-
- private static String getTopologyObjectOnComplexAttributeCondition(String rootObject, String firstContainer) {
- final ContainerType containerType = ContainerType.fromValue(firstContainer);
- if (rootObject == null) {
- if (containerType != null) {
- return WILDCARD;
- }
- return firstContainer;
- } else {
- if (rootObject.equals(firstContainer) || containerType != null) {
- return rootObject;
- }
- throw TiesPathException.grammarError(
- "Target/Scope filter can only contain Root Object types mentioned in the path parameter");
- }
- }
-}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.experimental.UtilityClass;
import org.oran.smo.teiv.api.model.OranTeivHref;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
/**
* Generates the pagination link as href.
*/
public static void validateOffset(int offset, int totalCount) {
if (totalCount > 0 && totalCount <= offset) {
- throw TiesException.invalidValueException("Offset", totalCount - 1, true);
+ throw TeivException.invalidValueException("Offset", totalCount - 1, true);
}
}
* - offset from the request
* @param totalCount
* - total count of the records
- * @throws TiesException
+ * @throws TeivException
* - if offset is greater than totalCount
*/
public static int getViableLimit(final int offset, final int limit, final int totalCount) {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.SchemaRegistry;
import lombok.RequiredArgsConstructor;
import org.springframework.web.multipart.MultipartFile;
import java.util.Objects;
+import static org.oran.smo.teiv.utils.TeivConstants.URN_PREFIX;
+
@Service
@RequiredArgsConstructor
@Slf4j
public void validateDomain(String domain) {
if (!SchemaRegistry.getDomains().contains(domain)) {
- throw TiesException.unknownDomain(domain, SchemaRegistry.getDomains());
+ throw TeivException.unknownDomain(domain, SchemaRegistry.getDomains());
}
}
public void validateEntityType(String entityType) {
if (!SchemaRegistry.getEntityNames().contains(entityType)) {
- throw TiesException.unknownEntityType(entityType, SchemaRegistry.getEntityNames());
+ throw TeivException.unknownEntityType(entityType, SchemaRegistry.getEntityNames());
}
}
public void validateEntityTypeInDomain(String entityType, String domain) {
if (!SchemaRegistry.getEntityNamesByDomain(domain).contains(entityType)) {
- throw TiesException.unknownEntityTypeInDomain(entityType, domain, SchemaRegistry.getEntityNamesByDomain(
+ throw TeivException.unknownEntityTypeInDomain(entityType, domain, SchemaRegistry.getEntityNamesByDomain(
domain));
}
}
public void validateRelationshipType(String relationShipType) {
if (!SchemaRegistry.getRelationNames().contains(relationShipType)) {
- throw TiesException.unknownRelationshipType(relationShipType, SchemaRegistry.getRelationNames());
+ throw TeivException.unknownRelationshipType(relationShipType, SchemaRegistry.getRelationNames());
}
}
public void validateRelationshipTypeInDomain(String relationshipType, String domain) {
if (!SchemaRegistry.getRelationNamesByDomain(domain).contains(relationshipType)) {
- throw TiesException.unknownRelationshipTypeInDomain(relationshipType, domain, SchemaRegistry
+ throw TeivException.unknownRelationshipTypeInDomain(relationshipType, domain, SchemaRegistry
.getRelationNamesByDomain(domain));
}
}
public void validateYangFile(MultipartFile file) {
if (!Objects.equals(file.getContentType(), "application/yang")) {
- throw TiesException.invalidFileInput("Invalid file");
+ throw TeivException.invalidFileInput("Invalid file");
}
}
+
+ public void validateTopologyID(String id) {
+ if (!id.startsWith(URN_PREFIX)) {
+ throw TeivException.invalidTopologyID(id);
+ }
+ }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
private final Counter httpUpdateProvidedMembersFailedCount;
public GroupsCustomMetrics(final MeterRegistry meterRegistry) {
- httpCreateGroupFailedCount = Counter.builder("ties_groups_http_create_group_fail_total").register(meterRegistry);
- this.httpGetAllGroupsFailedCount = Counter.builder("ties_groups_http_get_all_groups_fail_total").register(
+ httpCreateGroupFailedCount = Counter.builder("teiv_groups_http_create_group_fail_total").register(meterRegistry);
+ this.httpGetAllGroupsFailedCount = Counter.builder("teiv_groups_http_get_all_groups_fail_total").register(
meterRegistry);
- this.httpGetGroupByIdFailedCount = Counter.builder("ties_groups_http_get_group_by_id_fail_total").register(
+ this.httpGetGroupByIdFailedCount = Counter.builder("teiv_groups_http_get_group_by_id_fail_total").register(
meterRegistry);
- this.httpDeleteGroupFailedCount = Counter.builder("ties_groups_http_delete_group_fail_total").register(
+ this.httpDeleteGroupFailedCount = Counter.builder("teiv_groups_http_delete_group_fail_total").register(
meterRegistry);
- this.httpUpdateGroupNameFailedCount = Counter.builder("ties_groups_http_update_group_name_fail_total").register(
+ this.httpUpdateGroupNameFailedCount = Counter.builder("teiv_groups_http_update_group_name_fail_total").register(
meterRegistry);
- this.httpGetMembersFailedCount = Counter.builder("ties_groups_http_get_members_fail_total").register(meterRegistry);
- this.httpGetProvidedMembersFailedCount = Counter.builder("ties_groups_http_get_provided_members_fail_total")
+ this.httpGetMembersFailedCount = Counter.builder("teiv_groups_http_get_members_fail_total").register(meterRegistry);
+ this.httpGetProvidedMembersFailedCount = Counter.builder("teiv_groups_http_get_provided_members_fail_total")
.register(meterRegistry);
- this.httpUpdateProvidedMembersFailedCount = Counter.builder("ties_groups_http_update_provided_members_fail_total")
+ this.httpUpdateProvidedMembersFailedCount = Counter.builder("teiv_groups_http_update_provided_members_fail_total")
.register(meterRegistry);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.groups.api.impl.creator;
+import static org.oran.smo.teiv.groups.rest.controller.GroupsConstants.MEMBERS_HREF_TEMPLATE;
+import static org.oran.smo.teiv.groups.rest.controller.GroupsConstants.RESOURCE_NOT_FOUND;
import static org.oran.smo.teiv.groups.rest.controller.GroupsUtil.generateMembersHref;
+import org.oran.smo.teiv.exception.TeivException;
+import org.oran.smo.teiv.exposure.utils.RequestDetails;
+import org.oran.smo.teiv.groups.api.impl.resolver.CriteriaResolverRegistry;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
public class DynamicGroupCreator implements GroupCreator {
private final ObjectMapper objectMapper;
private final GroupsRepository groupsRepository;
+ private final CriteriaResolverRegistry criteriaResolverRegistry;
@Override
public OranTeivGroupByIdResponse create(final OranTeivCreateGroupPayload createGroupPayload) {
log.warn("Error while serializing the criteria for the dynamic group: {}", dynamicGroup, e);
throw GroupsException.criteriaSerializationException(e.getMessage());
}
-
+ validateGroup(dynamicGroup);
final String groupId = GroupCreator.generateGroupId();
final DynamicGroupRecord groupRecord = DynamicGroupRecord.builder().id(groupId).groupName(dynamicGroup.getName())
.groupType(dynamicGroup.getType()).criteria(JooqTypeConverter.toJsonb(criteriaString)).build();
OranTeivDynamicEnum.DYNAMIC).members(generateMembersHref(groupId)).criteria(dynamicGroup.getCriteria())
.build();
}
+
+ private void validateGroup(OranTeivDynamic dynamicGroup) {
+ try {
+ criteriaResolverRegistry.getResolver(dynamicGroup.getCriteria().getQueryType()).resolveByCriteria(dynamicGroup
+ .getCriteria(), RequestDetails.builder().basePath(String.format(MEMBERS_HREF_TEMPLATE, "tempGroup"))
+ .limit(1).build());
+ } catch (TeivException ex) {
+ if (!(dynamicGroup.getCriteria().getQueryType().equals("getRelationshipsForEntityId") && ex
+ .getLocalizedMessage().equals(RESOURCE_NOT_FOUND))) {
+ throw ex;
+ }
+ }
+ }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.groups.api.impl.resolver;
+import org.oran.smo.teiv.exposure.utils.RequestValidator;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
@Profile("groups")
public class RelationshipByEntityIdResolver implements CriteriaResolver {
private final DataService dataService;
+ private final RequestValidator requestValidator;
@Override
public OranTeivMembersResponse resolveByCriteria(final OranTeivCriteria criteria, final RequestDetails requestDetails) {
log.debug("Resolve group with getRelationshipsByEntityId criteria: {}", criteria);
OranTeivGetRelationshipsForEntityId relForEntityId = (OranTeivGetRelationshipsForEntityId) criteria;
+ requestValidator.validateTopologyID(relForEntityId.getEntityId());
final OranTeivRelationshipsResponseMessage relationshipsByEntityId = this.dataService
.getAllRelationshipsForObjectId(relForEntityId.getDomain(), relForEntityId.getEntityTypeName(),
relForEntityId.getEntityId(), relForEntityId.getTargetFilter(), relForEntityId.getScopeFilter(),
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
private final ExecutionStatus status;
private final GroupOperation operation;
private final OranTeivCreateGroupPayload createGroupPayload;
+ private final String createGroupPayloadString;
private final String groupId;
private final String groupName;
private final List<Object> providedMembers;
private String generateFailureMessage() {
return switch (operation) {
- case CREATE -> String.format("%s - Create %s, %s", status, generateCreateGroupMsg(), exceptionMessage);
+ case CREATE -> String.format("%s - Create group %s, %s", status,
+ createGroupPayloadString != null && !createGroupPayloadString.isEmpty() ?
+ createGroupPayloadString :
+ generateCreateGroupMsg(), exceptionMessage);
case DELETE -> String.format("%s - Delete group %s, %s", status, groupId, exceptionMessage);
case UPDATE_NAME -> String.format("%s - Update name %s for group %s, %s", status, groupName, groupId,
exceptionMessage);
private String generateSuccessMessage() {
StringBuilder str = new StringBuilder(String.format("%s - ", status));
switch (operation) {
- case CREATE -> str.append(generateCreateGroupMsg()).append(String.format(" with id %s", this.groupId));
+ case CREATE -> str.append(String.format("Create group %s with id %s", generateCreateGroupMsg(), this.groupId));
case DELETE -> str.append(String.format("Delete group %s", groupId));
case UPDATE_NAME -> str.append(String.format("Update name %s for group %s", groupName, groupId));
case MERGE_PROVIDED_MEMBERS -> str.append(String.format("Merge provided members %s for group %s",
private String generateCreateGroupMsg() {
if (createGroupPayload instanceof OranTeivDynamic payload) {
- return String.format("Create group type=dynamic, name=%s, criteria=%s", payload.getName(), payload
+ return String.format("type=%s, name=%s, criteria=%s", payload.getType(), payload.getName(), payload
.getCriteria());
} else if (createGroupPayload instanceof OranTeivStatic payload) {
- return String.format("Create group type=static, name=%s, providedMembers=%s", payload.getName(), payload
+ return String.format("type=%s, name=%s, providedMembers=%s", payload.getType(), payload.getName(), payload
.getProvidedMembers());
}
return null;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
public static final String MEMBERS_HREF_TEMPLATE = "/groups/%s/members";
public static final String PROVIDED_MEMBERS_HREF_TEMPLATE = "/groups/%s/provided-members";
public static final String GROUP_ID_PREFIX = "urn:o-ran:smo:teiv:group=";
+ public static final String RESOURCE_NOT_FOUND = "Resource Not Found";
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.exposure.audit.LoggerHandler;
import org.oran.smo.teiv.groups.audit.AuditInfo;
import org.oran.smo.teiv.groups.audit.ExecutionStatus;
+import org.oran.smo.teiv.groups.utils.GroupCreationRequestFilter;
+import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;
+import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.oran.smo.teiv.exposure.utils.RequestDetails;
import org.oran.smo.teiv.groups.GroupsCustomMetrics;
import org.oran.smo.teiv.groups.api.GroupsService;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
@Slf4j
@RestController
-@RequestMapping(TiesConstants.REQUEST_MAPPING)
+@RequestMapping(TeivConstants.REQUEST_MAPPING)
@RequiredArgsConstructor
@Profile("groups")
public class GroupsController implements GroupsApi {
private final HttpServletRequest context;
@Override
- @Timed("ties_groups_http_create_group_seconds")
+ @Timed("teiv_groups_http_create_group_seconds")
public ResponseEntity<OranTeivGroupByIdResponse> createGroup(final String accept, final String contentType,
final OranTeivCreateGroupPayload createGroupPayload) {
return runWithFailCheck(() -> {
}
@Override
- @Timed("ties_groups_http_get_all_groups_seconds")
+ @Timed("teiv_groups_http_get_all_groups_seconds")
public ResponseEntity<OranTeivGroupsResponse> getAllGroups(final String accept, final Integer offset,
final Integer limit, final String name) {
return runWithFailCheck(() -> {
}
@Override
- @Timed("ties_groups_http_delete_group_seconds")
+ @Timed("teiv_groups_http_delete_group_seconds")
public ResponseEntity<Void> deleteGroup(final String groupId) {
return runWithFailCheck(() -> {
runWithAuditLogs(() -> groupsService.deleteGroup(groupId), response -> loggerHandler.logAudit(log, AuditInfo
}
@Override
- @Timed("ties_groups_http_update_group_name_seconds")
+ @Timed("teiv_groups_http_update_group_name_seconds")
public ResponseEntity<Void> updateGroupName(final String contentType, final String groupId,
final OranTeivUpdateGroupNamePayload groupNameUpdatePayload) {
return runWithFailCheck(() -> {
}
@Override
- @Timed("ties_groups_http_get_members_seconds")
+ @Timed("teiv_groups_http_get_members_seconds")
public ResponseEntity<OranTeivMembersResponse> getMembers(final String accept, final String groupId,
final Integer offset, final Integer limit) {
return runWithFailCheck(() -> {
}
@Override
- @Timed("ties_groups_http_get_provided_members_seconds")
+ @Timed("teiv_groups_http_get_provided_members_seconds")
public ResponseEntity<OranTeivMembersResponse> getProvidedMembers(final String accept, final String groupId,
final String status, final Integer offset, final Integer limit) {
return runWithFailCheck(() -> {
}
@Override
- @Timed("ties_groups_http_get_group_by_id_seconds")
+ @Timed("teiv_groups_http_get_group_by_id_seconds")
public ResponseEntity<OranTeivGroupByIdResponse> getGroupById(final String accept, final String groupId) {
return runWithFailCheck(() -> ResponseEntity.ok(groupsService.getGroupById(groupId)),
customMetrics::incrementHttpGetGroupByIdFailedCount);
}
@Override
- @Timed("ties_groups_http_update_provided_members_seconds")
+ @Timed("teiv_groups_http_update_provided_members_seconds")
public ResponseEntity<Void> updateProvidedMembers(final String accept, final String contentType, final String groupId,
final OranTeivUpdateProvidedMembersPayload updateProvidedMembersPayload) {
return runWithFailCheck(() -> {
throw ex;
}
}
+
+ @Bean
+ public FilterRegistrationBean<GroupCreationRequestFilter> loggingFilter() {
+ FilterRegistrationBean<GroupCreationRequestFilter> registrationBean = new FilterRegistrationBean<>();
+ registrationBean.setFilter(new GroupCreationRequestFilter(loggerHandler));
+ registrationBean.addUrlPatterns("/groups");
+ registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
+ return registrationBean;
+ }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.oran.smo.teiv.groups.spi;
import static org.oran.smo.teiv.groups.rest.controller.GroupsConstants.GROUP_ID_PREFIX;
+import static org.oran.smo.teiv.utils.TeivConstants.URN_PREFIX;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.oran.smo.teiv.schema.SchemaRegistry;
+import org.oran.smo.teiv.schema.SchemaRegistryException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import lombok.RequiredArgsConstructor;
validateListItem(providedMember);
final Map.Entry<String, JsonNode> topologyEntry = providedMember.fields().next();
final String topologyType = topologyEntry.getKey();
+ validateTopologyType(topologyType);
for (JsonNode topologyIdObject : topologyEntry.getValue()) {
validateListItem(topologyIdObject);
final Map.Entry<String, JsonNode> topologyIdEntry = topologyIdObject.fields().next();
if (topologyIdEntry.getKey().equals("id") && topologyIdEntry.getValue().isTextual()) {
final String id = topologyIdEntry.getValue().asText();
- groupIdCheck(id);
+ validateTopologyId(id);
groupedProvidedMembers.computeIfAbsent(topologyType, v -> new ArrayList<>()).add(id);
} else {
throw GroupsException.invalidProvidedMembers(String.format("Invalid key/value present in %s.",
return groupedProvidedMembers;
}
+ private void validateTopologyType(String topologyType) {
+ final String[] parts = topologyType.split(":");
+ if (parts.length != 2) {
+ throw GroupsException.invalidProvidedMembers(
+ "Topology type must be in the format 'moduleName:topologyTypeName'. Provided: " + topologyType);
+ }
+ final String moduleName = parts[0];
+ final String topologyTypeName = parts[1];
+ try {
+ SchemaRegistry.getTopologyTypeByModuleAndTopologyName(moduleName, topologyTypeName);
+ } catch (SchemaRegistryException ex) {
+ String errorMessage = String.format("Invalid topology type '%s', not found in the model", topologyType);
+ log.warn(errorMessage, ex);
+ throw GroupsException.invalidProvidedMembers(String.format(errorMessage, topologyType));
+ }
+ }
+
private void validateListItem(final JsonNode jsonNode) {
if (!jsonNode.isObject()) {
throw GroupsException.invalidProvidedMembers("List elements are not of the type object.");
}
}
- private void groupIdCheck(final String id) {
+ private void validateTopologyId(final String id) {
if (id.startsWith(GROUP_ID_PREFIX)) {
throw GroupsException.invalidProvidedMembers(String.format(
"Nested topology groups is not supported. Provided members contain topology group id: %s", id));
+ } else if (!id.startsWith(URN_PREFIX)) {
+ throw GroupsException.invalidProvidedMembers(String.format(
+ "Topology id %s is not in supported format. Provided members id should start with %s", id, URN_PREFIX));
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
public class GroupsRepositoryImpl implements GroupsRepository {
@Value("${groups.static.provided-members-ids.max-limit}")
private int maxLimit;
- private static final String TIES_GROUPS = "ties_groups.%s";
- private static final Table<Record> GROUPS_TABLE = table(String.format(TIES_GROUPS, "groups"));
+ private static final String TEIV_GROUPS = "teiv_groups.%s";
+ private static final Table<Record> GROUPS_TABLE = table(String.format(TEIV_GROUPS, "groups"));
private static final Field<String> GROUP_ID = field(name("id"), String.class);
private static final Field<String> GROUP_NAME = field(name("name"), String.class);
private static final Field<String> GROUP_TYPE = field(name("type"), String.class);
- private static final Table<Record> DYNAMIC_GROUPS_TABLE = table(String.format(TIES_GROUPS, "dynamic_groups"));
+ private static final Table<Record> DYNAMIC_GROUPS_TABLE = table(String.format(TEIV_GROUPS, "dynamic_groups"));
private static final Field<JSONB> CRITERIA = field(name("criteria"), JSONB.class);
- private static final Table<Record> STATIC_GROUPS_TABLE = table(String.format(TIES_GROUPS, "static_groups"));
+ private static final Table<Record> STATIC_GROUPS_TABLE = table(String.format(TEIV_GROUPS, "static_groups"));
private static final Field<String> TOPOLOGY_TYPE = field(name("topology_type"), String.class);
private static final Field<String[]> PROVIDED_MEMBERS_IDS = field(name("provided_members_ids"), String[].class);
if (deletedRows == 0) {
log.warn("Group with ID: {} doesn't exist when trying to delete the group.", groupId);
throw new GroupNotFoundException(
- "Group with ID: " + groupId + "doesn't exist when tyring to delete the group.");
+ "Group with ID: " + groupId + "doesn't exist when trying to delete the group.");
}
}
if (result.isEmpty()) {
log.warn("Group with ID: {} doesn't exist when trying to get the provided members.", groupId);
throw new GroupNotFoundException(
- "Group with ID: " + groupId + "doesn't exist when tyring to get the provided members.");
+ "Group with ID: " + groupId + "doesn't exist when trying to get the provided members.");
}
final Map<String, List<String>> groupedProvidedMembers = new HashMap<>();
result.forEach(staticGroupRecord -> groupedProvidedMembers.put(staticGroupRecord.get(TOPOLOGY_TYPE), List.of(
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Ericsson
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.oran.smo.teiv.groups.utils;
+
+import java.io.BufferedReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+
+import org.springframework.util.StreamUtils;
+
+import jakarta.servlet.ServletInputStream;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+
+public class CachedBodyHttpServletRequest extends HttpServletRequestWrapper {
+
+ private final byte[] cachedBody;
+
+ public CachedBodyHttpServletRequest(HttpServletRequest request) throws IOException {
+ super(request);
+ InputStream requestInputStream = request.getInputStream();
+ this.cachedBody = StreamUtils.copyToByteArray(requestInputStream);
+ }
+
+ @Override
+ public ServletInputStream getInputStream() throws IOException {
+ return new CachedBodyServletInputStream(this.cachedBody);
+ }
+
+ @Override
+ public BufferedReader getReader() throws IOException {
+ ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(this.cachedBody);
+ return new BufferedReader(new InputStreamReader(byteArrayInputStream, StandardCharsets.UTF_8));
+ }
+}
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Ericsson
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.oran.smo.teiv.groups.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import jakarta.servlet.ReadListener;
+import jakarta.servlet.ServletInputStream;
+
+public class CachedBodyServletInputStream extends ServletInputStream {
+
+ private final InputStream cachedBodyInputStream;
+
+ public CachedBodyServletInputStream(byte[] cachedBody) {
+ this.cachedBodyInputStream = new ByteArrayInputStream(cachedBody);
+ }
+
+ @Override
+ public int read() throws IOException {
+ return cachedBodyInputStream.read();
+ }
+
+ @Override
+ public boolean isFinished() {
+ try {
+ return cachedBodyInputStream.available() == 0;
+ } catch (IOException e) {
+ throw new IllegalStateException("Error checking if input stream is finished", e);
+ }
+ }
+
+ @Override
+ public boolean isReady() {
+ return true;
+ }
+
+ @Override
+ public void setReadListener(ReadListener listener) {
+ throw new UnsupportedOperationException();
+ }
+}
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2024 Ericsson
+ * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.oran.smo.teiv.groups.utils;
+
+import static org.oran.smo.teiv.groups.audit.ExecutionStatus.FAILED;
+import static org.oran.smo.teiv.groups.audit.GroupOperation.CREATE;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.oran.smo.teiv.exposure.audit.LoggerHandler;
+import org.oran.smo.teiv.groups.audit.AuditInfo;
+import org.springframework.context.annotation.Profile;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Component;
+import org.springframework.web.util.ContentCachingRequestWrapper;
+import org.springframework.web.util.ContentCachingResponseWrapper;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+@Order(Ordered.HIGHEST_PRECEDENCE)
+@Profile("groups")
+public class GroupCreationRequestFilter implements jakarta.servlet.Filter {
+
+ private final LoggerHandler loggerHandler;
+ private final ObjectMapper objectMapper = new ObjectMapper();
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
+ ServletException {
+ ContentCachingRequestWrapper httpServletRequest = new ContentCachingRequestWrapper((HttpServletRequest) request);
+ CachedBodyHttpServletRequest cachedBodyHttpServletRequest = new CachedBodyHttpServletRequest(httpServletRequest);
+ ContentCachingResponseWrapper httpServletResponse = new ContentCachingResponseWrapper(
+ (HttpServletResponse) response);
+ String payloadString = readRequestBody(cachedBodyHttpServletRequest);
+ try {
+ if (cachedBodyHttpServletRequest.getMethod().equalsIgnoreCase("POST")) {
+ JsonNode createGroupPayload = objectMapper.readValue(payloadString, JsonNode.class);
+ String message = validateGroupType(createGroupPayload);
+ if (!message.isEmpty()) {
+ loggerHandler.logAudit(log, AuditInfo.builder().operation(CREATE).createGroupPayloadString(
+ payloadString).exceptionMessage(message).status(FAILED).build().toString(),
+ cachedBodyHttpServletRequest);
+ httpServletResponse.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ httpServletResponse.setContentType("application/json");
+ httpServletResponse.getWriter().write(generateResponse(message));
+ httpServletResponse.getWriter().flush();
+ return;
+ }
+ }
+ chain.doFilter(cachedBodyHttpServletRequest, httpServletResponse);
+ } catch (JsonProcessingException ex) {
+ String message = String.format("Unable to parse the given request body. %s", ex.getMessage());
+ loggerHandler.logAudit(log, AuditInfo.builder().operation(CREATE).createGroupPayloadString(payloadString)
+ .exceptionMessage(message).status(FAILED).build().toString(), cachedBodyHttpServletRequest);
+ chain.doFilter(cachedBodyHttpServletRequest, httpServletResponse);
+ } finally {
+ httpServletResponse.copyBodyToResponse();
+ }
+ }
+
+ private String validateGroupType(JsonNode createGroupPayload) {
+ String message = "";
+ if (createGroupPayload.has("type")) {
+ String groupType = createGroupPayload.get("type").asText();
+ if (createGroupPayload.has("providedMembers") && groupType.equals("dynamic")) {
+ message = "A static group cannot be created of type 'dynamic'";
+ } else if (createGroupPayload.has("criteria") && groupType.equals("static")) {
+ message = "A dynamic group cannot be created of type 'static'";
+ } else if (!"static".equals(groupType) && !groupType.equals("dynamic")) {
+ message = "Invalid group type. Only 'static' or 'dynamic' types are allowed";
+ } else if (createGroupPayload.has("criteria") && createGroupPayload.get("criteria").has("queryType")) {
+ String queryType = createGroupPayload.get("criteria").get("queryType").asText();
+ if (!List.of("getRelationshipsForEntityId", "getEntitiesByDomain", "getEntitiesByType",
+ "getRelationshipsByType").contains(queryType)) {
+ return "Invalid query type. Only 'getRelationshipsForEntityId', 'getEntitiesByDomain', 'getEntitiesByType' & 'getRelationshipsByType' are supported.";
+ }
+ }
+ }
+ return message;
+ }
+
+ private String generateResponse(String details) throws JsonProcessingException {
+ Map<String, Object> jsonResponse = new HashMap<>();
+ jsonResponse.put("details", details);
+ jsonResponse.put("message", "Invalid type specified");
+ jsonResponse.put("status", HttpStatus.BAD_REQUEST);
+ return objectMapper.writeValueAsString(jsonResponse);
+ }
+
+ private String readRequestBody(HttpServletRequest request) throws IOException {
+ StringBuilder body = new StringBuilder();
+ try (BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),
+ StandardCharsets.UTF_8))) {
+ String line;
+ while ((line = reader.readLine()) != null) {
+ body.append(line);
+ }
+ }
+ return body.toString();
+ }
+}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.ingestion.validation;
-import static org.oran.smo.teiv.utils.TiesConstants.INFINITE_MAXIMUM_CARDINALITY;
+import static org.oran.smo.teiv.utils.TeivConstants.INFINITE_MAXIMUM_CARDINALITY;
import java.util.List;
import org.oran.smo.teiv.schema.RelationType;
INFINITE_INFINITE
}
- private final TiesDbServiceForValidation tiesDbServiceForValidation;
+ private final TeivDbServiceForValidation teivDbServiceForValidation;
public void validate(ParsedCloudEventData parsedCloudEventData) throws MaximumCardinalityViolationException {
validateRelationshipMaximumCardinality(parsedCloudEventData.getRelationships());
private boolean executeValidationQuery(String tableName, String foreignKeyColumnName, String foreignKeyValue,
String tableReferencedFromForeignKeyColumn, long maxOccurrence) {
- tiesDbServiceForValidation.acquireEntityInstanceExclusiveLock(tableReferencedFromForeignKeyColumn, foreignKeyValue);
- return tiesDbServiceForValidation.executeValidationQuery(tableName, foreignKeyColumnName, foreignKeyValue,
+ teivDbServiceForValidation.acquireEntityInstanceExclusiveLock(tableReferencedFromForeignKeyColumn, foreignKeyValue);
+ return teivDbServiceForValidation.executeValidationQuery(tableName, foreignKeyColumnName, foreignKeyValue,
maxOccurrence);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@Component
public class IngestionOperationValidatorFactory {
public IngestionOperationValidator createValidator(DSLContext dslContext) {
- return new IngestionOperationValidator(new TiesDbServiceForValidation(dslContext));
+ return new IngestionOperationValidator(new TeivDbServiceForValidation(dslContext));
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.jooq.Field;
import org.jooq.Record1;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
@Slf4j
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
-public class TiesDbServiceForValidation {
+public class TeivDbServiceForValidation {
private final DSLContext dslContext;
* Unique id of the entity
*/
public void acquireEntityInstanceExclusiveLock(String tableName, String entityId) {
- Field<Object> idField = field(TiesConstants.ID_COLUMN_NAME);
+ Field<Object> idField = field(TeivConstants.ID_COLUMN_NAME);
dslContext.select(idField).from(tableName).where(idField.eq(entityId)).forUpdate().execute();
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.exception.InvalidFieldInYangDataException;
import org.oran.smo.teiv.listener.audit.ExecutionStatus;
import org.oran.smo.teiv.listener.audit.IngestionAuditLogger;
-import org.oran.smo.teiv.service.TiesDbOperations;
+import org.oran.smo.teiv.service.TeivDbOperations;
import org.oran.smo.teiv.service.cloudevent.CloudEventParser;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
+import org.oran.smo.teiv.service.models.OperationResult;
import org.oran.smo.teiv.utils.CloudEventUtil;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
-import static org.oran.smo.teiv.utils.TiesConstants.CLOUD_EVENT_WITH_TYPE_CREATE;
+import java.util.List;
+
+import static org.oran.smo.teiv.utils.TeivConstants.CLOUD_EVENT_WITH_TYPE_CREATE;
@Component
@Slf4j
private final CloudEventParser cloudEventParser;
private final CustomMetrics customMetrics;
- private final TiesDbOperations tiesDbOperations;
+ private final TeivDbOperations teivDbOperations;
private final IngestionAuditLogger auditLogger;
@Override
customMetrics.incrementNumSuccessfullyParsedCreateCloudEvents();
stopWatch.start();
+ List<OperationResult> operationResults;
final String sourceAdapter = String.valueOf(cloudEvent.getSource());
try {
- tiesDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, sourceAdapter);
+ operationResults = teivDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData,
+ sourceAdapter);
} catch (InvalidFieldInYangDataException e) {
log.error("Invalid field in yang data. Discarded CloudEvent: {}. Used kafka message key: {}. Reason: {}",
CloudEventUtil.cloudEventToPrettyString(cloudEvent), messageKey, e.getMessage());
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.schema.RelationType;
import org.oran.smo.teiv.schema.RelationshipDataLocation;
import org.oran.smo.teiv.schema.SchemaRegistry;
-import org.oran.smo.teiv.service.TiesDbOperations;
-import org.oran.smo.teiv.service.TiesDbService;
+import org.oran.smo.teiv.service.TeivDbOperations;
+import org.oran.smo.teiv.service.TeivDbService;
import org.oran.smo.teiv.service.cloudevent.CloudEventParser;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
import org.oran.smo.teiv.service.models.OperationResult;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
-import static org.oran.smo.teiv.utils.TiesConstants.CLOUD_EVENT_WITH_TYPE_DELETE;
+import static org.oran.smo.teiv.utils.TeivConstants.CLOUD_EVENT_WITH_TYPE_DELETE;
@Component
@Slf4j
public class DeleteTopologyProcessor implements TopologyProcessor {
private final CloudEventParser cloudEventParser;
- private final TiesDbService tiesDbService;
- private final TiesDbOperations tiesDbOperations;
+ private final TeivDbService teivDbService;
+ private final TeivDbOperations teivDbOperations;
private final CustomMetrics customMetrics;
private final IngestionAuditLogger auditLogger;
parsedCloudEventData.getEntities().forEach(entity -> {
EntityType entityType = SchemaRegistry.getEntityTypeByName(entity.getType());
dbOperations.add(dslContext -> operationResults
- .addAll(tiesDbOperations.deleteEntity(dslContext, entityType, entity.getId())));
+ .addAll(teivDbOperations.deleteEntity(dslContext, entityType, entity.getId())));
});
parsedCloudEventData.getRelationships().forEach(relationship -> {
RelationType relationType = SchemaRegistry.getRelationTypeByName(relationship.getType());
if (Objects.requireNonNull(relationType)
.getRelationshipStorageLocation() == RelationshipDataLocation.RELATION) {
- dbOperations.add(dslContext -> tiesDbOperations.deleteManyToManyRelationByRelationId(dslContext,
+ dbOperations.add(dslContext -> teivDbOperations.deleteManyToManyRelationByRelationId(dslContext,
relationType, relationship.getId()).ifPresent(operationResults::add));
} else {
dbOperations
- .add(dslContext -> tiesDbOperations.deleteRelationFromEntityTableByRelationId(dslContext,
+ .add(dslContext -> teivDbOperations.deleteRelationFromEntityTableByRelationId(dslContext,
relationship.getId(), relationType).ifPresent(operationResults::add));
}
});
try {
- tiesDbService.execute(dbOperations);
+ teivDbService.execute(dbOperations);
} catch (RuntimeException e) {
log.error("Failed to process a CloudEvent. Discarded CloudEvent: {}. Used kafka message key: {}. Reason: {}",
CloudEventUtil.cloudEventToPrettyString(cloudEvent), messageKey, e.getMessage());
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.listener.audit.ExecutionStatus;
import org.oran.smo.teiv.listener.audit.IngestionAuditLogger;
+import org.oran.smo.teiv.service.models.OperationResult;
import org.oran.smo.teiv.utils.CloudEventUtil;
import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import lombok.extern.slf4j.Slf4j;
import org.oran.smo.teiv.exception.InvalidFieldInYangDataException;
-import org.oran.smo.teiv.service.TiesDbOperations;
+import org.oran.smo.teiv.service.TeivDbOperations;
import org.oran.smo.teiv.service.cloudevent.CloudEventParser;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
import org.springframework.util.StopWatch;
-import static org.oran.smo.teiv.utils.TiesConstants.CLOUD_EVENT_WITH_TYPE_MERGE;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.oran.smo.teiv.utils.TeivConstants.CLOUD_EVENT_WITH_TYPE_MERGE;
@AllArgsConstructor
@Component
private final CloudEventParser cloudEventParser;
private final CustomMetrics customMetrics;
- private final TiesDbOperations tiesDbOperations;
+ private final TeivDbOperations teivDbOperations;
private final IngestionAuditLogger auditLogger;
//spotless:off
customMetrics.incrementNumSuccessfullyParsedMergeCloudEvents();
stopWatch.start();
+ List<OperationResult> operationResults = new ArrayList<>();
final String sourceAdapter = String.valueOf(cloudEvent.getSource());
try {
- tiesDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, sourceAdapter);
+ operationResults = teivDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, sourceAdapter);
} catch (InvalidFieldInYangDataException e) {
log.error("Invalid field in yang data. Discarded CloudEvent: {}. Used kafka message key: {}. Reason: {}",
CloudEventUtil.cloudEventToPrettyString(cloudEvent), messageKey, e.getMessage());
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import com.fasterxml.jackson.databind.ObjectMapper;
import org.oran.smo.teiv.CustomMetrics;
-import org.oran.smo.teiv.service.TiesDbOperations;
-import org.oran.smo.teiv.service.TiesDbService;
+import org.oran.smo.teiv.service.TeivDbOperations;
+import org.oran.smo.teiv.service.TeivDbService;
-import static org.oran.smo.teiv.utils.TiesConstants.CLOUD_EVENT_WITH_TYPE_SOURCE_ENTITY_DELETE;
+import static org.oran.smo.teiv.utils.TeivConstants.CLOUD_EVENT_WITH_TYPE_SOURCE_ENTITY_DELETE;
@Component
@Slf4j
@AllArgsConstructor
@Profile("ingestion")
public class SourceEntityDeleteTopologyProcessor implements TopologyProcessor {
- private final TiesDbService tiesDbService;
+ private final TeivDbService teivDbService;
private final ObjectMapper objectMapper;
private final CustomMetrics customMetrics;
- private final TiesDbOperations tiesDbOperations;
+ private final TeivDbOperations teivDbOperations;
private final IngestionAuditLogger auditLogger;
@Override
try {
List<Consumer<DSLContext>> dbOperations = new ArrayList<>();
SchemaRegistry.getEntityTypes().forEach(entityType -> dbOperations.add(dslContext -> {
- List<String> results = tiesDbOperations.selectByCmHandleFormSourceIds(dslContext, entityType.getTableName(),
+ List<String> results = teivDbOperations.selectByCmHandleFormSourceIds(dslContext, entityType.getTableName(),
sourceEntityDelete.value);
if (!results.isEmpty()) {
for (String result : results) {
- operationResults.addAll(tiesDbOperations.deleteEntity(dslContext, entityType, result));
+ operationResults.addAll(teivDbOperations.deleteEntity(dslContext, entityType, result));
}
}
}));
- tiesDbService.execute(dbOperations);
+ teivDbService.execute(dbOperations);
} catch (RuntimeException e) {
log.error("Failed to process a CloudEvent. Discarded CloudEvent: {}. Used kafka message key: {}. Reason: {}",
CloudEventUtil.cloudEventToPrettyString(cloudEvent), messageKey, e.getMessage());
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.Optional;
import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.apache.kafka.common.errors.RecordTooLargeException;
import org.springframework.context.annotation.Profile;
import org.springframework.core.log.LogAccessor;
import org.springframework.kafka.annotation.KafkaListener;
public void processEvents(List<ConsumerRecord<String, CloudEvent>> events) {
log.info("Processing events: {}", events.size());
for (ConsumerRecord<String, CloudEvent> rec : events) {
- if (rec.value() == null) {
- metrics.incrementNumReceivedCloudEventNotSupported();
- Optional<DeserializationException> deserializationException = Optional.ofNullable(SerializationUtils
- .getExceptionFromHeader(rec, SerializationUtils.VALUE_DESERIALIZER_EXCEPTION_HEADER, this.logger));
- deserializationException.ifPresent(exception -> {
- logger.error(exception.getCause().getLocalizedMessage());
- logger.error(exception, "Record at offset " + rec.offset() + " could not be deserialized");
- });
- } else {
- String messageKey = rec.key();
- topologyProcessorRegistry.getProcessor(rec.value()).process(rec.value(), messageKey);
+ try {
+ if (rec.value() == null) {
+ metrics.incrementNumReceivedCloudEventNotSupported();
+ Optional<DeserializationException> deserializationException = Optional.ofNullable(SerializationUtils
+ .getExceptionFromHeader(rec, SerializationUtils.VALUE_DESERIALIZER_EXCEPTION_HEADER,
+ this.logger));
+ deserializationException.ifPresent(exception -> {
+ logger.error(exception.getCause().getLocalizedMessage());
+ logger.error(exception, "Record at offset " + rec.offset() + " could not be deserialized");
+ });
+ } else {
+ String messageKey = rec.key();
+ topologyProcessorRegistry.getProcessor(rec.value()).process(rec.value(), messageKey);
+ }
+ } catch (RecordTooLargeException exception) {
+ logger.warn("Ingestion message is too large to be processed:" + exception.getMessage());
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.extern.slf4j.Slf4j;
import org.oran.smo.teiv.CustomMetrics;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
@Component
@Slf4j
public TopologyProcessor getProcessor(CloudEvent event) {
String cloudEventType = getCloudEventType(event);
switch (cloudEventType) {
- case TiesConstants.CLOUD_EVENT_WITH_TYPE_CREATE -> {
+ case TeivConstants.CLOUD_EVENT_WITH_TYPE_CREATE -> {
log.debug("Create CloudEvent received with id: {}", event.getId());
metrics.incrementNumReceivedCloudEventCreate();
return createTopologyProcessor;
}
- case TiesConstants.CLOUD_EVENT_WITH_TYPE_MERGE -> {
+ case TeivConstants.CLOUD_EVENT_WITH_TYPE_MERGE -> {
log.debug("Merge CloudEvent received with id: {}", event.getId());
metrics.incrementNumReceivedCloudEventMerge();
return mergeTopologyProcessor;
}
- case TiesConstants.CLOUD_EVENT_WITH_TYPE_DELETE -> {
+ case TeivConstants.CLOUD_EVENT_WITH_TYPE_DELETE -> {
log.debug("Delete CloudEvent received with id: {}", event.getId());
metrics.incrementNumReceivedCloudEventDelete();
return deleteTopologyProcessor;
}
- case TiesConstants.CLOUD_EVENT_WITH_TYPE_SOURCE_ENTITY_DELETE -> {
+ case TeivConstants.CLOUD_EVENT_WITH_TYPE_SOURCE_ENTITY_DELETE -> {
log.debug("Source Entity Delete CloudEvent received with id: {}", event.getId());
metrics.incrementNumReceivedCloudEventSourceEntityDelete();
return sourceEntityDeleteTopologyProcessor;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* @return the mapped DB name
*/
public static String getDbName(String name) {
- if (!nameMap.containsKey(name)) {
+ if (nameMap == null || !nameMap.containsKey(name)) {
return name;
}
return nameMap.get(name);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
BIGINT,
CONTAINER,
GEOGRAPHIC,
- TIMESTAMPTZ,
BYTEA,
- RELIABILITY;
+ RELIABILITY,
+ TIMESTAMPTZ;
public static DataType fromDbDataType(final String dbDatatype) {
return switch (dbDatatype.toUpperCase(Locale.US)) {
case "BIGINT", "INT8" -> BIGINT;
case "JSONB" -> CONTAINER;
case "GEOGRAPHY" -> GEOGRAPHIC;
- case "TIMESTAMPTZ" -> TIMESTAMPTZ;
case "BYTEA" -> BYTEA;
case "RELIABILITY" -> RELIABILITY;
+ case "TIMESTAMPTZ" -> TIMESTAMPTZ;
default -> throw new IllegalStateException("Unexpected value: " + dbDatatype.toUpperCase(Locale.US));
};
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.oran.smo.teiv.schema;
import static org.jooq.impl.DSL.field;
-import static org.oran.smo.teiv.exposure.tiespath.refiner.AliasMapper.hashAlias;
+import static org.oran.smo.teiv.exposure.teivpath.refiner.AliasMapper.hashAlias;
import static org.oran.smo.teiv.schema.BidiDbNameMapper.getDbName;
import static org.oran.smo.teiv.schema.DataType.CONTAINER;
import static org.oran.smo.teiv.schema.DataType.GEOGRAPHIC;
-import static org.oran.smo.teiv.utils.TiesConstants.ATTRIBUTES_ABBREVIATION;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.CONSUMER_DATA_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.DECORATORS;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.METADATA;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.REL_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.RESP_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.RI_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.ST_TO_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA;
-import static org.oran.smo.teiv.utils.TiesConstants.SOURCE_IDS;
+import static org.oran.smo.teiv.utils.TeivConstants.ATTRIBUTES_ABBREVIATION;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.CONSUMER_DATA_PREFIX;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.METADATA;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.ST_TO_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.SOURCE_IDS;
import java.util.HashMap;
import java.util.List;
@Value
@Builder
public class EntityType implements Persistable {
- private static final String RELIABILITY_INDICATOR_COL = RI_PREFIX + "%s";
- private static final String RESPONSIBLE_ADAPTER_ID_COL = RESP_PREFIX + ID_COLUMN_NAME;
- private static final String RESPONSIBLE_ADAPTER_COL = RESP_PREFIX + "%s";
@EqualsAndHashCode.Include
String name;
Map<String, DataType> fields;
@Override
public String getTableName() {
- return String.format(TIES_DATA, getDbName(this.tableName));
+ return String.format(TEIV_DATA, getDbName(this.tableName));
}
@Override
@SuppressWarnings("java:S5738")
public Map<Field, DataType> getSpecificAttributeColumns(List<String> attributes) {
final Map<Field, DataType> fieldList = new HashMap<>();
- this.fields.forEach((fieldName, dataType) -> {
- if (!attributes.contains(fieldName) && !attributes.isEmpty()) {
- return;
- }
- if (fieldName.startsWith(REL_PREFIX) || fieldName.startsWith(CONSUMER_DATA_PREFIX) || fieldName.equals(
- ID_COLUMN_NAME)) {
- return;
- }
+ if (attributeNames.isEmpty()) {
+ return fieldList;
+ }
+ attributes.stream().filter(attributeNames::contains).forEach(attribute -> {
+ final DataType dataType = this.fields.get(attribute);
if (GEOGRAPHIC.equals(dataType)) {
fieldList.put(field(String.format(ST_TO_STRING, getTableName() + "." + String.format(QUOTED_STRING,
- getDbName(fieldName)))).as(hashAlias(
- getFullyQualifiedName() + ATTRIBUTES_ABBREVIATION + fieldName)), dataType);
+ getDbName(attribute)))).as(hashAlias(
+ getFullyQualifiedName() + ATTRIBUTES_ABBREVIATION + attribute)), dataType);
} else if (CONTAINER.equals(dataType)) {
- fieldList.put(field(getTableName() + "." + String.format(QUOTED_STRING, getDbName(fieldName)), JSONB.class)
- .as(hashAlias(getFullyQualifiedName() + ATTRIBUTES_ABBREVIATION + fieldName)), dataType);
+ fieldList.put(field(getTableName() + "." + String.format(QUOTED_STRING, getDbName(attribute)), JSONB.class)
+ .as(hashAlias(getFullyQualifiedName() + ATTRIBUTES_ABBREVIATION + attribute)), dataType);
} else {
- fieldList.put(field(getTableName() + "." + String.format(QUOTED_STRING, getDbName(fieldName))).as(hashAlias(
- getFullyQualifiedName() + ATTRIBUTES_ABBREVIATION + fieldName)), dataType);
+ fieldList.put(field(getTableName() + "." + String.format(QUOTED_STRING, getDbName(attribute))).as(hashAlias(
+ getFullyQualifiedName() + ATTRIBUTES_ABBREVIATION + attribute)), dataType);
}
});
return fieldList;
return getDbName(CONSUMER_DATA_PREFIX + DECORATORS);
}
- /**
- * Gets the reliability indicator column name as String, for the given DB name of an attribute.
- *
- * @return the reliability indicator column as String
- */
- public String getReliabilityColumnName(String attributeName) {
- return getDbName(String.format(RELIABILITY_INDICATOR_COL, attributeName));
- }
-
- /**
- * Gets the responsible adapter ID column name as String, for the given DB name.
- *
- * @return the responsible adapter column as String
- */
- public String getResponsibleAdapterIdColumnName() {
- return getDbName(RESPONSIBLE_ADAPTER_ID_COL);
- }
-
- /**
- * Gets the responsible adapter column name as String, for the given DB name of an attribute.
- *
- * @return the responsible adapter column as String
- */
- public String getResponsibleAdapterAttributeColumnName(String attributeName) {
- return getDbName(String.format(RESPONSIBLE_ADAPTER_COL, attributeName));
- }
-
@Override
public String getMetadataColumnName() {
return getDbName(METADATA);
public String getCategory() {
return "entity";
}
-
- @Override
- public String getUpdatedTimeColumnName() {
- return getDbName(UPDATED_TIME);
- }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.jooq.JSONB;
import static org.jooq.impl.DSL.field;
-import static org.oran.smo.teiv.exposure.tiespath.refiner.AliasMapper.hashAlias;
+import static org.oran.smo.teiv.exposure.teivpath.refiner.AliasMapper.hashAlias;
import static org.oran.smo.teiv.utils.PersistableUtil.getFullyQualifiedNameWithColumnName;
-import static org.oran.smo.teiv.utils.TiesConstants.*;
+import static org.oran.smo.teiv.utils.TeivConstants.*;
public interface Persistable {
hashAlias(getFullyQualifiedNameWithColumnName(fullyQuelifiedName, CLASSIFIERS))));
result.add(field(getTableName() + "." + String.format(QUOTED_STRING, getDecoratorsColumnName()), JSONB.class).as(
hashAlias(getFullyQualifiedNameWithColumnName(fullyQuelifiedName, DECORATORS))));
+ result.add(field(getTableName() + "." + String.format(QUOTED_STRING, getMetadataColumnName()), JSONB.class).as(
+ hashAlias(getFullyQualifiedNameWithColumnName(fullyQuelifiedName, METADATA))));
return result;
}
* @return category as a String
*/
String getCategory();
-
- /**
- * Gets updatedTime column Name as String
- *
- * @return the String value of updated_time column
- */
- String getUpdatedTimeColumnName();
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.oran.smo.teiv.schema;
import static org.oran.smo.teiv.schema.BidiDbNameMapper.getModelledName;
-import static org.oran.smo.teiv.utils.TiesConstants.TEIV_DOMAIN;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_MODEL;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DOMAIN;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_MODEL;
import static org.jooq.impl.DSL.field;
import java.io.IOException;
import lombok.extern.slf4j.Slf4j;
import com.fasterxml.jackson.databind.ObjectMapper;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.spi.Module;
@Slf4j
@Override
protected void loadBidiDbNameMapper() {
log.debug("Start loading bidirectional DB name mapper");
- SelectJoinStep<Record> records = readWriteDataDslContext.select().from(String.format(TIES_MODEL, "hash_info"));
+ SelectJoinStep<Record> records = readWriteDataDslContext.select().from(String.format(TEIV_MODEL, "hash_info"));
Map<String, String> hash = new HashMap<>();
Map<String, String> reverseHash = new HashMap<>();
records.forEach(entry -> {
public void loadModules() throws SchemaLoaderException {
log.debug("Start loading modules");
SelectConditionStep<Record> moduleRecords = runMethodSafe(() -> readWriteDataDslContext.select().from(String.format(
- TIES_MODEL, "module_reference")).where(field("name").isNotNull()));
+ TEIV_MODEL, "module_reference")).where(field("name").isNotNull()));
Map<String, Module> moduleMap = new HashMap<>();
for (Record moduleRecord : moduleRecords) {
JSONB includedModules = (JSONB) moduleRecord.get("includedModules");
final String columnName = "column_name";
SelectConditionStep<Record3<Object, Object, Object>> tableDetails = runMethodSafe(() -> readWriteDataDslContext
.select(field(tableName), field(columnName), field("udt_name")).from("information_schema.columns").where(
- field("table_schema").equal(TIES_DATA_SCHEMA)));
+ field("table_schema").equal(TEIV_DATA_SCHEMA)));
SelectJoinStep<Record> entityInfoRecords = runMethodSafe(() -> readWriteDataDslContext.select().from(String.format(
- TIES_MODEL, "entity_info")));
+ TEIV_MODEL, "entity_info")));
for (Record entityInfoRecord : entityInfoRecords) {
String name = (String) entityInfoRecord.get("name");
log.debug("Start loading relations");
List<RelationType> relationTypes = new ArrayList<>();
SelectJoinStep<Record> relationInfoResult = runMethodSafe(() -> readWriteDataDslContext.select().from(String.format(
- TIES_MODEL, "relationship_info")));
+ TEIV_MODEL, "relationship_info")));
for (Record entry : relationInfoResult) {
//build associations
Association aSideAssociation = Association.builder().name(((String) entry.get("aSideAssociationName")))
private <T> T runMethodSafe(Supplier<T> supp) {
try {
return supp.get();
- } catch (TiesException ex) {
+ } catch (TeivException ex) {
throw ex;
} catch (Exception ex) {
log.error("Sql exception during query execution", ex);
- throw TiesException.serverSQLException();
+ throw TeivException.serverSQLException();
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.schema;
-import static org.oran.smo.teiv.exposure.tiespath.refiner.AliasMapper.hashAlias;
+import static org.oran.smo.teiv.exposure.teivpath.refiner.AliasMapper.hashAlias;
import static org.oran.smo.teiv.schema.BidiDbNameMapper.getDbName;
import static org.oran.smo.teiv.schema.RelationshipDataLocation.RELATION;
import static org.jooq.impl.DSL.field;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.CONSUMER_DATA_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.DECORATORS;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.METADATA;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.REL_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.RESP_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.SOURCE_IDS;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.CONSUMER_DATA_PREFIX;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.METADATA;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.SOURCE_IDS;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA;
import org.oran.smo.teiv.exposure.spi.Module;
import java.util.List;
private static final String REL_CLASSIFIERS_COL_PREFIX = "REL_CD_classifiers_%s";
private static final String REL_DECORATORS_COL_PREFIX = "REL_CD_decorators_%s";
private static final String REL_METADATA_COL_PREFIX = "REL_metadata_%s";
- private static final String REL_UPDATETIME_COL_PREFIX = "REL_updated_time_%s";
- private static final String RESPONSIBLE_ADAPTER_ID_COL = RESP_PREFIX + ID_COLUMN_NAME;
- private static final String REL_RESPONSIBLE_ADAPTER_ID_COL_PREFIX = REL_PREFIX + RESP_PREFIX + ID_COLUMN_NAME + "_%s";
- public static final String UPDATED_TIME = "updated_time";
String name;
Association aSideAssociation;
@Override
public String getTableName() {
- return String.format(TIES_DATA, getDbName(this.tableName));
+ return String.format(TEIV_DATA, getDbName(this.tableName));
}
@Override
return result;
}
- /**
- * Gets the responsible adapter ID column name as String, for the given DB name.
- *
- * @return the responsible adapter column as String
- */
- public String getResponsibleAdapterIdColumnName() {
- if (relationshipStorageLocation.equals(RELATION)) {
- return getDbName(RESPONSIBLE_ADAPTER_ID_COL);
- } else {
- return getDbName(String.format(REL_RESPONSIBLE_ADAPTER_ID_COL_PREFIX, name));
- }
- }
-
/**
* Gets id, aSide and bSide column name of the relation.
*
public String getCategory() {
return "relationship";
}
-
- @Override
- public String getUpdatedTimeColumnName() {
- if (relationshipStorageLocation.equals(RELATION)) {
- return getDbName(UPDATED_TIME);
- } else {
- return getDbName(String.format(REL_UPDATETIME_COL_PREFIX, name));
- }
- }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.schema;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
import org.jooq.EnumType;
import org.jooq.Schema;
@Override
public Schema getSchema() {
- return new SchemaImpl(TIES_DATA_SCHEMA);
+ return new SchemaImpl(TEIV_DATA_SCHEMA);
}
@Override
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.schema;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import lombok.Value;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import static org.oran.smo.teiv.schema.BidiDbNameMapper.getDbName;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.RESPONSIBLE_ADAPTER;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.RESPONSIBLE_ADAPTER;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA;
@Value
public class ResponsibleAdapter {
- private static final String RESPONSIBLE_ADAPTER_TABLE_NAME = String.format(TIES_DATA, getDbName(RESPONSIBLE_ADAPTER));
+ private static final String RESPONSIBLE_ADAPTER_TABLE_NAME = String.format(TEIV_DATA, getDbName(RESPONSIBLE_ADAPTER));
String id;
byte[] hashedId;
try {
return MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException exception) {
- throw TiesException.serverException("Invalid Hashing algorithm", "Error while hashing alias", exception);
+ throw TeivException.serverException("Invalid Hashing algorithm", "Error while hashing alias", exception);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.oran.smo.teiv.schema.SchemaRegistryErrorCode.RELATIONSHIP_NOT_FOUND_IN_DOMAIN;
import static org.oran.smo.teiv.schema.SchemaRegistryErrorCode.RELATIONSHIP_NOT_FOUND_IN_MODULE;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import jakarta.annotation.Nullable;
-import org.oran.smo.teiv.utils.TiesConstants;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.utils.TeivConstants;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.spi.Module;
@Slf4j
* @return the {@link Module}
*/
public static Module getModuleByName(String name) {
- return Optional.ofNullable(moduleRegistry.get(name)).orElseThrow(() -> TiesException.unknownModule(name));
+ return Optional.ofNullable(moduleRegistry.get(name)).orElseThrow(() -> TeivException.unknownModule(name));
}
/**
*/
public static Module getModuleByDomain(String domain) {
return moduleRegistry.values().stream().filter(module -> module.getDomain() != null && module.getDomain().equals(
- domain)).findFirst().orElseThrow(() -> TiesException.unknownDomain(domain, getDomains()));
+ domain)).findFirst().orElseThrow(() -> TeivException.unknownDomain(domain, getDomains()));
}
/**
/**
* Gets the {@link EntityType} by the given module name and the entity type name.
- * Since TIES supports TEIV as top level domain on the exposure side, there is possibility to return more than one
+ * Since TEIV supports TEIV as top level domain on the exposure side, there is possibility to return more than one
* EntityType for a given name
* with domain as TIEV.
*
}
public static List<String> getAssociationNamesByEntityName(final String entityName) {
- return getRelationTypesByEntityName(entityName).stream().map(relationType -> {
+ List<String> associations = new ArrayList<>();
+ getRelationTypesByEntityName(entityName).stream().forEach(relationType -> {
if (relationType.getASide().getName().equals(entityName)) {
- return relationType.getASideAssociation().getName();
- } else {
- return relationType.getBSideAssociation().getName();
+ associations.add(relationType.getASideAssociation().getName());
}
- }).toList();
+ if (relationType.getBSide().getName().equals(entityName)) {
+ associations.add(relationType.getBSideAssociation().getName());
+ }
+ });
+ return associations;
}
/**
public static String getReferenceColumnName(RelationType relationType) {
if (relationType.getRelationshipStorageLocation().equals(RelationshipDataLocation.A_SIDE)) {
- return Objects.requireNonNull(relationType).getTableName() + "." + String.format(TiesConstants.QUOTED_STRING,
+ return Objects.requireNonNull(relationType).getTableName() + "." + String.format(TeivConstants.QUOTED_STRING,
relationType.bSideColumnName());
} else if (relationType.getRelationshipStorageLocation().equals(RelationshipDataLocation.B_SIDE)) {
- return Objects.requireNonNull(relationType).getTableName() + "." + String.format(TiesConstants.QUOTED_STRING,
+ return Objects.requireNonNull(relationType).getTableName() + "." + String.format(TeivConstants.QUOTED_STRING,
relationType.aSideColumnName());
}
return Objects.requireNonNull(relationType).getTableName() + "." + relationType.getIdColumnName();
}
return relationType.getBSide();
}
+
+ public static EntityType getAssociationSideEntity(String associationName) {
+ RelationType relationType = getRelationTypes().stream().filter(relation -> (relation.getASideAssociation().getName()
+ .equals(associationName) || relation.getBSideAssociation().getName().equals(associationName))).findFirst()
+ .orElseGet(() -> {
+ log.warn("Unknown association name {}", associationName);
+ return null;
+ });
+ return relationType.getASideAssociation().getName().equals(associationName) ?
+ relationType.getBSide() :
+ relationType.getASide();
+ }
+
+ public static Set<EntityType> getAllEntityForAssociation(String associationName) {
+ Set<EntityType> entities = new HashSet<>();
+
+ getRelationTypes().stream().forEach(relation -> {
+ if (relation.getASideAssociation().getName().equals(associationName) || relation.getBSideAssociation().getName()
+ .equals(associationName)) {
+ entities.add(relation.getASide());
+ entities.add(relation.getBSide());
+ }
+ });
+ entities.remove(getAssociationSideEntity(associationName));
+ return entities;
+ }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
ENTITY_NOT_FOUND_IN_DOMAIN,
ENTITY_NOT_FOUND_IN_MODULE,
RELATIONSHIP_NOT_FOUND_IN_DOMAIN,
- RELATIONSHIP_NOT_FOUND_IN_MODULE,
+ RELATIONSHIP_NOT_FOUND_IN_MODULE
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.schema.RelationType;
import org.oran.smo.teiv.service.cloudevent.data.Relationship;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
import org.springframework.stereotype.Component;
import org.jooq.Record;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.service;
+import static org.jooq.impl.DSL.jsonbExists;
import static org.oran.smo.teiv.schema.BidiDbNameMapper.getDbName;
import static org.oran.smo.teiv.schema.RelationshipDataLocation.B_SIDE;
import static org.oran.smo.teiv.schema.RelationshipDataLocation.RELATION;
+import static org.oran.smo.teiv.service.TeivMetadataResolver.APPEND_QUERY;
+import static org.oran.smo.teiv.service.TeivMetadataResolver.getMetadataForInferredEntity;
import static org.oran.smo.teiv.service.models.OperationResult.ENTITY_CATEGORY;
import static org.oran.smo.teiv.service.models.OperationResult.RELATIONSHIP_CATEGORY;
import static org.oran.smo.teiv.utils.JooqTypeConverter.toJsonb;
-import static org.oran.smo.teiv.utils.TiesConstants.FOREIGN_KEY_VIOLATION_ERROR_CODE;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.RELIABILITY_INDICATOR;
-import static org.oran.smo.teiv.utils.TiesConstants.UNIQUE_CONSTRAINT_VIOLATION_CODE;
+import static org.oran.smo.teiv.utils.TeivConstants.FOREIGN_KEY_VIOLATION_ERROR_CODE;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.UNIQUE_CONSTRAINT_VIOLATION_CODE;
import static org.jooq.impl.DSL.field;
-import static org.jooq.impl.DSL.jsonExists;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.table;
import static org.jooq.impl.SQLDataType.OTHER;
-import java.sql.Timestamp;
-import java.time.Instant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.jooq.Configuration;
import org.jooq.Condition;
import org.jooq.DSLContext;
-import org.jooq.JSON;
import org.jooq.exception.DataAccessException;
-import org.oran.smo.teiv.exception.TiesException;
-import org.oran.smo.teiv.schema.Reliability;
+import org.oran.smo.teiv.exception.TeivException;
+import org.oran.smo.teiv.schema.Persistable;
import org.oran.smo.teiv.schema.ResponsibleAdapter;
import org.oran.smo.teiv.utils.JooqTypeConverter;
import org.springframework.stereotype.Component;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
import org.oran.smo.teiv.service.cloudevent.data.Relationship;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import org.oran.smo.teiv.utils.schema.Geography;
@Component
@RequiredArgsConstructor
-public class TiesDbOperations {
+public class TeivDbOperations {
- private static final Map<String, Object> RELIABILITY_INDICATOR_OK_MAP = Map.of(RELIABILITY_INDICATOR, Reliability.OK
- .name());
-
- private final TiesDbService tiesDbService;
+ private final TeivDbService teivDbService;
private final IngestionOperationValidatorFactory ingestionOperationValidatorFactory;
private final RelationshipMergeValidator relationshipMergeValidator;
+ private final TeivMetadataResolver teivMetadataResolver;
+
/**
* Insert or update a row in the given table.
* <p>
*
* @param context
* The context where the database operation should be executed
- * @param tableName
- * Name of the database table to use.
+ * @param objectType
+ * The type of object being ingested.
* @param values
* A map of column name and value pairs. The value is converted to the corresponding Postgres type based on the
* dynamic type of the value. For
* example: <"column1", 5L> means that the value 5 should be inserted to the column1 as a BIGINT.
- * @param updatedTimeColumnName
- * Name of the database column for entity update time.
- * A boolean to indicate if the reliabilityIndicator of the entity to be set to OK?
* @return Xmax value, if 0 it was a insert, if greater than 0 it was an update, if -1 that means we didn't get the xmax
* value back after the operation.
*/
- public int merge(DSLContext context, String tableName, Map<String, Object> values, String updatedTimeColumnName) {
+ public int merge(DSLContext context, Persistable objectType, Map<String, Object> values) {
+ final String tableName = objectType.getTableName();
Map<String, Object> valuesToInsert = new HashMap<>(values.size());
values.forEach((key, value) -> {
if ((value instanceof Geography)) {
Map<String, Object> valuesToUpdate = new HashMap<>(valuesToInsert);
valuesToUpdate.remove(ID_COLUMN_NAME);
- if (valuesToUpdate.isEmpty()) {
+ if (valuesToUpdate.isEmpty()) {//If there is no data in this event then only do a DB insert, no DB update.
return context.insertInto(table(tableName)).set(valuesToInsert).onConflict(field(ID_COLUMN_NAME)).doNothing()
.execute() > 0 ? 0 : -1;
}
+ if (values.containsKey(objectType.getMetadataColumnName())) {
+ final String sqlConcatJsonb = String.format(APPEND_QUERY, tableName, objectType.getMetadataColumnName(),
+ toJsonb(values.get(objectType.getMetadataColumnName())));
+ valuesToUpdate.put(objectType.getMetadataColumnName(), field(sqlConcatJsonb, JSONB.class));
+ }
+ //Do an insert or update depending on conflict
Record fetch = context.insertInto(table(tableName)).set(valuesToInsert).onConflict(field(ID_COLUMN_NAME)).doUpdate()
.set(valuesToUpdate).returning(field("xmax", int.class)).fetchOne();
if (fetch != null) {
int updateResult = context.update(table(relationType.getTableName())).setNull(field(String.format(QUOTED_STRING,
relationType.getIdColumnName()))).setNull(field(String.format(QUOTED_STRING, oneSideEntityIdColumn)))
.set(field(String.format(QUOTED_STRING, relationType.getSourceIdsColumnName())), toJsonb(List.of()))
- .where(field(String.format(QUOTED_STRING, manySideEntityIdColumn)).eq(manySideEntityId)).execute();
+ .setNull(field(String.format(QUOTED_STRING, relationType.getMetadataColumnName()))).where(field(String
+ .format(QUOTED_STRING, manySideEntityIdColumn)).eq(manySideEntityId)).execute();
return updateResult > 0 ? relationshipList : List.of();
}
String oneSideEntityIdColumn = relationType.getRelationshipStorageLocation().equals(B_SIDE) ?
relationType.aSideColumnName() :
relationType.bSideColumnName();
-
int affectedRows = context.update(table(relationType.getTableName())).setNull(field(String.format(QUOTED_STRING,
relationType.getIdColumnName()))).setNull(field(String.format(QUOTED_STRING, oneSideEntityIdColumn))).set(
field(String.format(QUOTED_STRING, relationType.getSourceIdsColumnName())), toJsonb(List.of()))
- .where(field(String.format(QUOTED_STRING, relationType.getIdColumnName())).eq(relationshipId)).execute();
+ .setNull(field(String.format(QUOTED_STRING, relationType.getMetadataColumnName()))).where(field(String
+ .format(QUOTED_STRING, relationType.getIdColumnName())).eq(relationshipId)).execute();
return affectedRows > 0 ?
Optional.of(OperationResult.builder().id(relationshipId).type(relationType.getName()).category(
RELATIONSHIP_CATEGORY).build()) :
String entityId, String aSideColumnName, String bSideColumnName) {
List<String> deletedIds = context.delete(table((relationType.getTableName()))).where(field(String.format(
QUOTED_STRING, aSideColumnName)).eq(entityId).or(field(String.format(QUOTED_STRING, bSideColumnName)).eq(
- entityId))).returning(field(TiesConstants.ID_COLUMN_NAME)).fetch().getValues(field(
- TiesConstants.ID_COLUMN_NAME), String.class);
+ entityId))).returning(field(TeivConstants.ID_COLUMN_NAME)).fetch().getValues(field(
+ TeivConstants.ID_COLUMN_NAME), String.class);
return deletedIds.stream().map(id -> OperationResult.builder().id(id).type(relationType.getName()).category(
RELATIONSHIP_CATEGORY).build()).collect(Collectors.toList());
String sourceAdapter) throws InvalidFieldInYangDataException, MaximumCardinalityViolationException {
List<Consumer<DSLContext>> dbOperations = new ArrayList<>();
List<OperationResult> results = new ArrayList<>();
- Timestamp updateTime = Timestamp.from(Instant.now());
ResponsibleAdapter responsibleAdapter = new ResponsibleAdapter(sourceAdapter);
byte[] respAdapterHash = responsibleAdapter.getHashedId();
+ dbOperations.add(getResponsibleAdapterOperation(responsibleAdapter));
for (Entity entity : parsedCloudEventData.getEntities()) {
- dbOperations.add(getEntityOperation(entity, results, updateTime, respAdapterHash));
+ dbOperations.add(getEntityOperation(entity, results, respAdapterHash));
}
for (Relationship relationship : parsedCloudEventData.getRelationships()) {
- dbOperations.addAll(getRelationshipOperations(relationship, results, updateTime, respAdapterHash));
+ dbOperations.addAll(getRelationshipOperations(relationship, results, respAdapterHash));
}
dbOperations.add(dslContext -> ingestionOperationValidatorFactory.createValidator(dslContext).validate(
parsedCloudEventData));
- tiesDbService.execute(dbOperations);
+ teivDbService.execute(dbOperations);
return results;
}
- public Consumer<DSLContext> getResponsibleAdapterOperation(ResponsibleAdapter responsibleAdapter) throws TiesException {
+ public Consumer<DSLContext> getResponsibleAdapterOperation(ResponsibleAdapter responsibleAdapter) throws TeivException {
Map<String, Object> dbMap = new HashMap<>();
dbMap.put(responsibleAdapter.getIdColumnName(), responsibleAdapter.getId());
public List<String> selectByCmHandleFormSourceIds(DSLContext context, String tableName, String cmHandle) {
String path = String.format("$[*] ? (@ == \"urn:cmHandle:%s\")", cmHandle);
- return context.select(field(String.format(QUOTED_STRING, "id"), String.class)).from(tableName).where(jsonExists(
- field(String.format(QUOTED_STRING, "CD_sourceIds"), JSON.class), path)).orderBy(field(String.format(
+ return context.select(field(String.format(QUOTED_STRING, "id"), String.class)).from(tableName).where(jsonbExists(
+ field(String.format(QUOTED_STRING, "CD_sourceIds"), JSONB.class), path)).orderBy(field(String.format(
QUOTED_STRING, "id"))).fetch().getValues(field(String.format(QUOTED_STRING, "id"), String.class));
}
- private Consumer<DSLContext> getEntityOperation(Entity entity, List<OperationResult> results, Timestamp updateTime,
- byte[] respAdapterHash) throws InvalidFieldInYangDataException {
+ private Consumer<DSLContext> getEntityOperation(Entity entity, List<OperationResult> results, byte[] respAdapterHash)
+ throws InvalidFieldInYangDataException {
EntityType entityType = SchemaRegistry.getEntityTypeByName(entity.getType());
Map<String, DataType> fieldsFromModel = entityType.getFields();
- HashMap<String, Object> metadata = new HashMap<>();
Map<String, Object> dbMap = new HashMap<>();
List<String> resultExclusion = new ArrayList<>();
for (Map.Entry<String, Object> entry : entity.getAttributes().entrySet()) {
switch (dataType) {
case GEOGRAPHIC -> dbMap.put(dbName, JooqTypeConverter.toGeography(entry.getValue()));
case CONTAINER -> dbMap.put(dbName, toJsonb(entry.getValue()));
- case PRIMITIVE, DECIMAL, INTEGER, BIGINT, TIMESTAMPTZ, BYTEA -> dbMap.put(dbName, entry.getValue());
+ case PRIMITIVE, DECIMAL, INTEGER, BIGINT, BYTEA -> dbMap.put(dbName, entry.getValue());
}
}
dbMap.put(ID_COLUMN_NAME, entity.getId());
if (entity.getSourceIds() != null) {
dbMap.put(entityType.getSourceIdsColumnName(), toJsonb(entity.getSourceIds()));
}
-
return dslContext -> {
- int xmax = merge(dslContext, entityType.getTableName(), dbMap, entityType.getUpdatedTimeColumnName());
+ final Map<String, Object> metadata = teivMetadataResolver.setEntityMetadataChangeInDbMap(dslContext, entityType,
+ entity, dbMap);
+ int xmax = merge(dslContext, entityType, dbMap);
if (xmax >= 0) {
boolean isUpdatedInDb = xmax != 0;
dbMap.remove(ID_COLUMN_NAME);
dbMap.remove(entityType.getSourceIdsColumnName());
- dbMap.remove(entityType.getUpdatedTimeColumnName());
- dbMap.remove(entityType.getResponsibleAdapterIdColumnName());
dbMap.remove(entityType.getMetadataColumnName());
resultExclusion.forEach(dbMap::remove);
results.add(OperationResult.builder().id(entity.getId()).type(entity.getType()).category(ENTITY_CATEGORY)
}
private List<Consumer<DSLContext>> getRelationshipOperations(Relationship relationship, List<OperationResult> results,
- Timestamp updateTime, byte[] respAdapterByteArray) {
+ byte[] respAdapterByteArray) {
List<Consumer<DSLContext>> relationshipOperations = new ArrayList<>();
RelationType relationType = SchemaRegistry.getRelationTypeByName(relationship.getType());
RelationshipDataLocation relationshipDataLocation = relationType.getRelationshipStorageLocation();
relationship, results, relationType, dbMap));
} catch (DataAccessException e) {
if (e.sqlState().equals(FOREIGN_KEY_VIOLATION_ERROR_CODE)) {
- createMissingEntities(outer, relationship, relationType, results, updateTime, respAdapterByteArray);
+ createMissingEntities(outer, relationship, relationType, results, respAdapterByteArray);
mergeManyToManyRelationship(outer, relationship, results, relationType, dbMap);
} else {
throw e;
});
} else {
relationshipOperations.add(dslContext -> mergeOneToManyOrOneToOneRelationship(dslContext, relationship, results,
- relationType, dbMap, updateTime, respAdapterByteArray));
+ relationType, dbMap, respAdapterByteArray));
}
return relationshipOperations;
}
private void mergeOneToManyOrOneToOneRelationship(DSLContext dslContext, Relationship relationship,
- List<OperationResult> results, RelationType relationType, Map<String, Object> dbMap, Timestamp updateTime,
+ List<OperationResult> results, RelationType relationType, Map<String, Object> dbMap,
byte[] respAdapterByteArray) {
AtomicBoolean isManySideEntityMissingAtTheBeginning = new AtomicBoolean(false);
+ final Map<String, Object> metadataMissingEntity = getMetadataForInferredEntity();
try {
dslContext.dsl().transaction((Configuration nested) -> updateRelationshipInEntityTable(nested.dsl(),
relationship, relationType, dbMap).ifPresentOrElse(results::add, () -> {
ID_COLUMN_NAME, relationship.getStoringSideEntityId(), dslContext);
if (manySideRow == null) {
isManySideEntityMissingAtTheBeginning.set(true);
- createMissingStoringSideEntity(dslContext, relationship, relationType, updateTime,
- respAdapterByteArray);
+ createMissingStoringSideEntity(dslContext, relationship, relationType, respAdapterByteArray,
+ metadataMissingEntity);
addEntityToOperationResults(results, relationship.getStoringSideEntityId(),
- RELIABILITY_INDICATOR_OK_MAP, relationType.getStoringSideEntityType().getName());
+ metadataMissingEntity, relationType.getStoringSideEntityType().getName());
updateRelationshipInEntityTable(dslContext, relationship, relationType, dbMap).ifPresentOrElse(
results::add, () -> {
throw new IllegalOneToManyRelationshipUpdateException(relationship, true);
throw new UniqueRelationshipIdConstraintException(relationship);
} else if (e.sqlState().equals(FOREIGN_KEY_VIOLATION_ERROR_CODE)) {
if (isManySideEntityMissingAtTheBeginning.get()) {
- createMissingStoringSideEntity(dslContext, relationship, relationType, updateTime,
- respAdapterByteArray);
- addEntityToOperationResults(results, relationship.getStoringSideEntityId(),
- RELIABILITY_INDICATOR_OK_MAP, relationType.getStoringSideEntityType().getName());
+ createMissingStoringSideEntity(dslContext, relationship, relationType, respAdapterByteArray,
+ metadataMissingEntity);
+ addEntityToOperationResults(results, relationship.getStoringSideEntityId(), metadataMissingEntity,
+ relationType.getStoringSideEntityType().getName());
}
- createMissingNotStoringSideEntity(dslContext, relationship, relationType, updateTime, respAdapterByteArray);
- addEntityToOperationResults(results, relationship.getNotStoringSideEntityId(), RELIABILITY_INDICATOR_OK_MAP,
+ createMissingNotStoringSideEntity(dslContext, relationship, relationType, respAdapterByteArray,
+ metadataMissingEntity);
+ addEntityToOperationResults(results, relationship.getNotStoringSideEntityId(), metadataMissingEntity,
relationType.getNotStoringSideEntityType().getName());
updateRelationshipInEntityTable(dslContext, relationship, relationType, dbMap).ifPresentOrElse(results::add,
() -> {
private Optional<OperationResult> updateRelationshipInEntityTable(DSLContext dslContext, Relationship relationship,
RelationType relationType, Map<String, Object> values) {
+ final Map<String, Object> metadata = teivMetadataResolver.setRelationMetadataChangeInDbMap(dslContext, relationType,
+ relationship, values);
Condition condition = field(ID_COLUMN_NAME).eq(relationship.getStoringSideEntityId()).and(field(name(relationType
.getIdColumnName())).isNull().or(field(name(relationType.getIdColumnName())).eq(relationship.getId()).and(
field(name(relationType.getNotStoringSideEntityIdColumnNameInStoringSideTable())).eq(relationship
boolean isUpdatedInDb = fetch.getValue("xmax", int.class) != 0;
return Optional.of(OperationResult.builder().id(relationship.getId()).type(relationship.getType()).category(
RELATIONSHIP_CATEGORY).aSide(relationship.getASide()).bSide(relationship.getBSide()).sourceIds(
- relationship.getSourceIds()).isUpdatedInDb(isUpdatedInDb).metadata(RELIABILITY_INDICATOR_OK_MAP)
- .build());
+ relationship.getSourceIds()).isUpdatedInDb(isUpdatedInDb).metadata(metadata).build());
}
return Optional.empty();
}
private void mergeManyToManyRelationship(DSLContext dslContext, Relationship relationship,
List<OperationResult> results, RelationType relationType, Map<String, Object> valuesToInsert) {
+ final Map<String, Object> valuesToUpdate = new HashMap<>(valuesToInsert);
+ final Map<String, Object> metadata = teivMetadataResolver.setRelationMetadataChangeInDbMap(dslContext, relationType,
+ relationship, valuesToUpdate);
+ valuesToInsert.put(relationType.getMetadataColumnName(), toJsonb(metadata));
String primaryKeyColumn = relationType.getIdColumnName();
- Map<String, Object> valuesToUpdate = new HashMap<>(valuesToInsert);
valuesToUpdate.remove(primaryKeyColumn);
Record fetch = dslContext.insertInto(table(relationType.getTableName())).set(valuesToInsert).onConflict(field(
primaryKeyColumn)).doUpdate().set(valuesToUpdate).where(field(relationType.getTableName() + "." + name(
boolean isUpdatedInDb = fetch.getValue("xmax", int.class) != 0;
results.add(OperationResult.builder().id(relationship.getId()).type(relationship.getType()).category(
RELATIONSHIP_CATEGORY).aSide(relationship.getASide()).bSide(relationship.getBSide()).sourceIds(
- relationship.getSourceIds()).isUpdatedInDb(isUpdatedInDb).metadata(RELIABILITY_INDICATOR_OK_MAP)
- .build());
+ relationship.getSourceIds()).isUpdatedInDb(isUpdatedInDb).metadata(metadata).build());
} else {
throw new IllegalManyToManyRelationshipUpdateException(relationship);
}
}
private void createMissingEntities(DSLContext dslContext, Relationship relationship, RelationType relationType,
- List<OperationResult> results, Timestamp updateTime, byte[] respAdapterByteArray) {
+ List<OperationResult> results, byte[] respAdapterByteArray) {
String aSideTableName = relationType.getASide().getTableName();
String aSideId = relationship.getASide();
String bSideTableName = relationType.getBSide().getTableName();
String bSideId = relationship.getBSide();
String relationshipId = relationship.getId();
+ final Map<String, Object> metadata = TeivMetadataResolver.getMetadataForInferredEntity();
- if (createMissingEntity(aSideTableName, aSideId, relationshipId, dslContext, relationType.getASide(), updateTime,
- respAdapterByteArray) == 1) {
+ if (createMissingEntity(aSideTableName, aSideId, relationshipId, dslContext, relationType.getASide(),
+ respAdapterByteArray, metadata) == 1) {
results.add(OperationResult.builder().id(aSideId).type(relationType.getASide().getName()).category(
- ENTITY_CATEGORY).sourceIds(List.of(relationshipId)).build());
+ ENTITY_CATEGORY).sourceIds(List.of(relationshipId)).metadata(metadata).build());
}
- if (createMissingEntity(bSideTableName, bSideId, relationshipId, dslContext, relationType.getBSide(), updateTime,
- respAdapterByteArray) == 1) {
+ if (createMissingEntity(bSideTableName, bSideId, relationshipId, dslContext, relationType.getBSide(),
+ respAdapterByteArray, metadata) == 1) {
results.add(OperationResult.builder().id(bSideId).type(relationType.getBSide().getName()).category(
- ENTITY_CATEGORY).sourceIds(List.of(relationshipId)).build());
+ ENTITY_CATEGORY).sourceIds(List.of(relationshipId)).metadata(metadata).build());
}
}
}
private int createMissingEntity(String entityTableName, String entityId, String relationshipId, DSLContext dslContext,
- EntityType entityType, Timestamp updateTime, byte[] respAdapterByteArray) {
+ EntityType entityType, byte[] respAdapterByteArray, Map<String, Object> metadata) {
final JSONB sourceIds = toJsonb(relationshipId);
return dslContext.insertInto(table(entityTableName)).set(field(name(ID_COLUMN_NAME)), entityId).set(field(name(
- entityType.getSourceIdsColumnName())), sourceIds).onConflictDoNothing().execute();
+ entityType.getSourceIdsColumnName())), sourceIds).set(field(name(entityType.getMetadataColumnName())),
+ toJsonb(metadata)).onConflictDoNothing().execute();
}
private void createMissingNotStoringSideEntity(DSLContext dslContext, Relationship relationship,
- RelationType relationType, Timestamp updateTime, byte[] respAdapterByteArray) {
+ RelationType relationType, byte[] respAdapterByteArray, Map<String, Object> metadata) {
createMissingEntity(relationType.getNotStoringSideTableName(), relationship.getNotStoringSideEntityId(),
- relationship.getId(), dslContext, relationType.getNotStoringSideEntityType(), updateTime,
- respAdapterByteArray);
+ relationship.getId(), dslContext, relationType.getNotStoringSideEntityType(), respAdapterByteArray,
+ metadata);
}
private void createMissingStoringSideEntity(DSLContext dslContext, Relationship relationship, RelationType relationType,
- Timestamp updateTime, byte[] respAdapterByteArray) {
+ byte[] respAdapterByteArray, Map<String, Object> metadata) {
createMissingEntity(relationType.getTableName(), relationship.getStoringSideEntityId(), relationship.getId(),
- dslContext, relationType.getStoringSideEntityType(), updateTime, respAdapterByteArray);
+ dslContext, relationType.getStoringSideEntityType(), respAdapterByteArray, metadata);
}
private Record selectColumnsByIdForUpdate(List<String> columnNames, String tableName, String idFieldName,
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.springframework.retry.support.RetryTemplate;
import org.springframework.stereotype.Service;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.ingestion.DeadlockRetryPolicy;
import org.oran.smo.teiv.ingestion.validation.MaximumCardinalityViolationException;
import org.oran.smo.teiv.utils.RetryOperationUtils;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@RequiredArgsConstructor
-public class TiesDbService {
+public class TeivDbService {
private final DSLContext readDataDslContext;
private final DSLContext writeDataDslContext;
private final DeadlockRetryPolicy deadlockRetryPolicy;
private <T> T runMethodSafe(Supplier<T> supp) {
try {
return supp.get();
- } catch (TiesException | MaximumCardinalityViolationException ex) {
+ } catch (TeivException | MaximumCardinalityViolationException ex) {
throw ex;
- } catch (TiesPathException ex) {
+ } catch (TeivPathException ex) {
log.error("Exception during query construction", ex);
throw ex;
} catch (Exception ex) {
log.error("Sql exception during query execution", ex);
- throw TiesException.serverSQLException();
+ throw TeivException.serverSQLException();
}
}
}
--- /dev/null
+/*
+ * ============LICENSE_START=======================================================
+ * Modifications Copyright (C) 2025 OpenInfra Foundation Europe
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.oran.smo.teiv.service;
+
+import static org.jooq.impl.DSL.field;
+import static org.jooq.impl.DSL.jsonbGetAttributeAsText;
+import static org.jooq.impl.DSL.quotedName;
+import static org.jooq.impl.DSL.name;
+import static org.jooq.impl.DSL.table;
+import static org.oran.smo.teiv.utils.JooqTypeConverter.toJsonb;
+import static org.oran.smo.teiv.utils.TeivConstants.RELIABILITY_INDICATOR;
+
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.jooq.DSLContext;
+import org.jooq.Field;
+import org.jooq.JSONB;
+import org.jooq.Record;
+import org.oran.smo.teiv.schema.EntityType;
+import org.oran.smo.teiv.schema.RelationType;
+import org.oran.smo.teiv.schema.RelationshipDataLocation;
+import org.oran.smo.teiv.schema.Reliability;
+import org.oran.smo.teiv.service.cloudevent.data.Entity;
+import org.oran.smo.teiv.service.cloudevent.data.Relationship;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TeivMetadataResolver {
+ static final String FIRST_DISCOVERED = "firstDiscovered";
+ static final String LAST_MODIFIED = "lastModified";
+ public static final String APPEND_QUERY = "%s.\"%s\" || '%s'";
+
+ /**
+ * Determines what changes are needed to metadata of provided entity with respect to reliabilityIndicator,
+ * firstDiscovered and lastModified. These changes are put in a metadata map, and this metadata map is put in the
+ * provided
+ * DB map with the metadata column name as its key.
+ * In other words, the following entry will be put in the provided DB map:
+ * metadata -> [reliabilityIndicator -> OK,
+ * firstDiscovered -> <timestamp String value>, lastModified -> <timestamp String value>]
+ * In addition, this metadata change map will be returned by this method.
+ * Note: reliabilityIndicator and firstDiscovered will only be included in the metadata map IF NEEDED. The map will
+ * always include lastModified at least.
+ *
+ * @param dslContext
+ * The DSL context
+ * @param entityType
+ * The type of entity being ingested
+ * @param entity
+ * The entity being ingested
+ * @param dbMap
+ * The map of DB column names to values to be merged
+ * @return The metadata change.
+ */
+ public Map<String, Object> setEntityMetadataChangeInDbMap(DSLContext dslContext, EntityType entityType, Entity entity,
+ Map<String, Object> dbMap) {
+ final List<String> attribReliabilityColumnsToGet = new ArrayList<>();
+ final List<String> attributesNotIngested = new ArrayList<>(entityType.getAttributeNames());
+ attributesNotIngested.removeIf(attribute -> entity.getAttributes().containsKey(attribute));
+ final Record record = selectEntityDataForMetadataResolution(entityType, entity, attribReliabilityColumnsToGet,
+ dslContext);
+ final HashMap<String, Object> metadataChange = new HashMap<>();
+ final String utcTime = getUtcTimeNow();
+ final boolean isNewEntity = isNewDbObject(record);
+ if (isNewEntity) {
+ metadataChange.put(RELIABILITY_INDICATOR, Reliability.OK);
+ metadataChange.put(FIRST_DISCOVERED, utcTime);
+ metadataChange.put(LAST_MODIFIED, utcTime);
+ } else {
+ if (isEntityReliabilityToBeSetOk(record, attribReliabilityColumnsToGet)) {
+ metadataChange.put(RELIABILITY_INDICATOR, Reliability.OK);
+ }
+ metadataChange.put(LAST_MODIFIED, utcTime);
+ }
+ dbMap.put(entityType.getMetadataColumnName(), metadataChange);
+ return metadataChange;
+ }
+
+ /**
+ * Determines what changes are needed to metadata of provided relationship with respect to reliabilityIndicator,
+ * firstDiscovered and lastModified. These changes are put in a metadata map, and this metadata map is put in the
+ * provided
+ * DB map with the metadata column name as its key.
+ * In other words, the following entry will be put in the provided DB map:
+ * metadata -> [reliabilityIndicator -> OK,
+ * firstDiscovered -> <timestamp String value>, lastModified -> <timestamp String value>]
+ * In addition, this metadata change map will be returned by this method.
+ * Note: reliabilityIndicator and firstDiscovered will only be included in the metadata map IF NEEDED. The map will
+ * always include lastModified at least.
+ *
+ * @param dslContext
+ * The DSL context
+ * @param relationType
+ * The type of relationship being ingested
+ * @param relationship
+ * The relationship being ingested
+ * @param dbMap
+ * The map of DB column names to values to be merged
+ * @return The metadata change.
+ */
+ public Map<String, Object> setRelationMetadataChangeInDbMap(DSLContext dslContext, RelationType relationType,
+ Relationship relationship, Map<String, Object> dbMap) {
+ final HashMap<String, Object> metadataChange = new HashMap<>();
+ final String tableName = relationType.getTableName();
+ final String metadataColumnName = relationType.getMetadataColumnName();
+ Record record;
+ if (relationType.getRelationshipStorageLocation() == RelationshipDataLocation.RELATION) {
+ record = selectRelationshipDataForMetadataResolution(tableName, relationType.getIdColumnName(), relationship
+ .getId(), metadataColumnName, dslContext);
+ } else {
+ record = selectRelationshipDataForMetadataResolution(tableName, relationType.getStoringSideEntityType()
+ .getIdColumnName(), relationship.getStoringSideEntityId(), metadataColumnName, dslContext);
+ }
+ final boolean isNewRelationship = isNewDbObject(record);
+ if (isNewRelationship) {
+ metadataChange.put(RELIABILITY_INDICATOR, Reliability.OK);
+ metadataChange.put(FIRST_DISCOVERED, getUtcTimeNow());
+ metadataChange.put(LAST_MODIFIED, getUtcTimeNow());
+ } else {
+ if (isRelationReliabilityToBeSetOk(record)) {
+ metadataChange.put(RELIABILITY_INDICATOR, Reliability.OK);
+ }
+ metadataChange.put(LAST_MODIFIED, getUtcTimeNow());
+ }
+ dbMap.put(metadataColumnName, isNewRelationship ?
+ toJsonb(metadataChange) :
+ toSqlConcatinationJsonbField(toJsonb(metadataChange), tableName, metadataColumnName));
+ return metadataChange;
+ }
+
+ /**
+ * Get metadata for an inferred entity. It will include all the keys required for an inferred entity - when a
+ * relationship
+ * is ingested and an entity that has not been ingested.
+ *
+ * @return map for metadata of an inferred entity
+ */
+ public static Map<String, Object> getMetadataForInferredEntity() {
+ return Map.of(RELIABILITY_INDICATOR, Reliability.ADVISED, FIRST_DISCOVERED, getUtcTimeNow(), LAST_MODIFIED,
+ getUtcTimeNow());
+ }
+
+ private Record selectEntityDataForMetadataResolution(EntityType entityType, Entity entity, List<String> columnsToGet,
+ DSLContext dslContext) {
+ return selectColumnsAndMetadataKeysByIdForUpdate(columnsToGet, entityType.getTableName(), entityType
+ .getIdColumnName(), entity.getId(), entityType.getMetadataColumnName(), dslContext);
+ }
+
+ private Record selectRelationshipDataForMetadataResolution(String tableName, String relIdFieldName, String relId,
+ String metadataColumnName, DSLContext dslContext) {
+ return dslContext.select(jsonbGetAttributeAsText(field(quotedName(metadataColumnName), JSONB.class),
+ RELIABILITY_INDICATOR).as(RELIABILITY_INDICATOR)).select(jsonbGetAttributeAsText(field(quotedName(
+ metadataColumnName), JSONB.class), FIRST_DISCOVERED).as(FIRST_DISCOVERED)).from(table(tableName))
+ .where(field(relIdFieldName).eq(relId)).fetchOne();
+ }
+
+ private static boolean isNewDbObject(Record record) {
+ return record == null || record.get(FIRST_DISCOVERED) == null;
+ }
+
+ private Object toSqlConcatinationJsonbField(JSONB jsonb, String tableName, String metadataColumnName) {
+ final String sqlConcatJsonb = String.format(APPEND_QUERY, tableName, metadataColumnName, jsonb);
+ return field(sqlConcatJsonb, JSONB.class);
+ }
+
+ private boolean isEntityReliabilityToBeSetOk(Record record, List<String> attribReliabilityColumnsToGet) {
+ if (record == null) {
+ return true;//Entity not found in DB
+ } else if (isReliabilityOkInDb(record)) {
+ return false;
+ } else {
+ return isAllAttribReliabilitiesOkOrNull(record, attribReliabilityColumnsToGet);
+ }
+ }
+
+ private boolean isRelationReliabilityToBeSetOk(Record record) {
+ if (record == null) {
+ return true;//Relationship not found in DB
+ } else {
+ return !isReliabilityOkInDb(record);
+ }
+ }
+
+ private static String getUtcTimeNow() {
+ return OffsetDateTime.now(ZoneOffset.UTC).toString();
+ }
+
+ private Record selectColumnsAndMetadataKeysByIdForUpdate(List<String> columnNames, String tableName, String idFieldName,
+ String id, String metadataColumnName, DSLContext dslContext) {
+ List<Field<Object>> fields = columnNames.stream().map(n -> field(name(n))).toList();
+ return dslContext.select(fields).select(jsonbGetAttributeAsText(field(quotedName(metadataColumnName), JSONB.class),
+ RELIABILITY_INDICATOR).as(RELIABILITY_INDICATOR)).select(jsonbGetAttributeAsText(field(quotedName(
+ metadataColumnName), JSONB.class), FIRST_DISCOVERED).as(FIRST_DISCOVERED)).from(table(tableName))
+ .where(field(idFieldName).eq(id)).forUpdate().fetchOne();
+ }
+
+ private boolean isReliabilityOkInDb(Record currentReliabilitiesInDb) {
+ if (currentReliabilitiesInDb.get(RELIABILITY_INDICATOR) == null) {
+ return false;//Can happen when entity is being created and merged to in very close succession
+ } else {
+ return currentReliabilitiesInDb.get(RELIABILITY_INDICATOR).equals(Reliability.OK.name());
+ }
+ }
+
+ private boolean isAllAttribReliabilitiesOkOrNull(Record record, List<String> attribReliabilitiesToCheck) {
+ return attribReliabilitiesToCheck.stream().allMatch(ri -> record.get(ri) == null || record.get(ri).equals(
+ Reliability.OK.name()));
+ }
+}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.exception.YangValidationException;
import org.oran.smo.teiv.schema.SchemaRegistryException;
import org.oran.smo.teiv.utils.CloudEventUtil;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import org.oran.smo.teiv.utils.yangparser.IngestionYangParser;
import org.oran.smo.yangtools.parser.data.dom.YangDataDomNode;
import org.oran.smo.yangtools.parser.data.instance.AbstractStructureInstance;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
import org.oran.smo.teiv.service.cloudevent.data.Relationship;
-import static org.oran.smo.teiv.utils.TiesConstants.ENTITIES;
-import static org.oran.smo.teiv.utils.TiesConstants.RELATIONSHIPS;
+import static org.oran.smo.teiv.utils.TeivConstants.ENTITIES;
+import static org.oran.smo.teiv.utils.TeivConstants.RELATIONSHIPS;
@Slf4j
@Component
try {
JsonNode eventPayload = processEventPayload(cloudEvent);
boolean areSidesMandatory = !cloudEvent.getType().split("\\.")[1].equals(
- TiesConstants.CLOUD_EVENT_WITH_TYPE_DELETE);
+ TeivConstants.CLOUD_EVENT_WITH_TYPE_DELETE);
List<Entity> entities = processEntities(eventPayload, areSidesMandatory);
List<Relationship> relationships = processRelationships(eventPayload, areSidesMandatory);
if (entities.isEmpty() && relationships.isEmpty()) {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.yangtools.parser.util.NamespaceModuleIdentifier;
import static org.oran.smo.teiv.utils.CloudEventUtil.hasInvalidCharacter;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
@Slf4j
public class Entity extends ModuleObject {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.ArrayList;
import java.util.List;
-import static org.oran.smo.teiv.utils.TiesConstants.SOURCE_IDS;
+import static org.oran.smo.teiv.utils.TeivConstants.SOURCE_IDS;
@NoArgsConstructor
@AllArgsConstructor
+++ /dev/null
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
- * ================================================================================
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-package org.oran.smo.teiv.utils;
-
-import java.io.IOException;
-import java.util.List;
-
-import org.jooq.JSONB;
-import org.jooq.tools.json.JSONArray;
-
-import org.oran.smo.teiv.exception.InvalidFieldInYangDataException;
-import org.oran.smo.teiv.utils.schema.Geography;
-
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public class ConvertToJooqTypeUtil {
-
- /**
- * Creates a jooq.JSONB object from a json formatted String.
- *
- * The Yang Parser library parses the single element arrays as a JSON primitive.
- * The use of yang models will solve this problem. As a temporary workaround,
- * if one of the following is true, then the @param value is transformed into
- * a single element json array before creating the JSONB object:
- * - @param value is not a String, or
- * - @param value is a String, but does not contain a JSON.
- *
- * @param value
- * @return The jooq.JSONB object created from the value.
- */
- public static JSONB toJsonb(Object value) {
- if (value instanceof String str && isJsonObjectOrArray(str)) {
- return JSONB.jsonb(str);
- } else {
- return JSONB.jsonb(makeSingleElementJsonArray(value));
- }
- }
-
- /**
- * Creates a jooq.JSONB object from a List of strings.
- *
- * @param stringList
- * @return The jooq.JSONB object created from the value.
- */
- public static JSONB toJsonb(List<String> stringList) {
- return JSONB.jsonb(JSONArray.toJSONString(stringList));
- }
-
- private static boolean isJsonObjectOrArray(String str) {
- String trimmedStr = str.stripLeading();
- return trimmedStr.startsWith("{") || trimmedStr.startsWith("[");
- }
-
- private static String makeSingleElementJsonArray(Object obj) {
- return JSONArray.toJSONString(List.of(obj));
- }
-
- public static Geography toGeography(Object value) throws InvalidFieldInYangDataException {
- try {
- return new Geography((String) value);
- } catch (ClassCastException | IOException e) {
- throw new InvalidFieldInYangDataException(String.format("Can't create a Geography object from: %s", value), e);
- }
- }
-}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.extern.slf4j.Slf4j;
import org.oran.smo.teiv.exception.InvalidFieldInYangDataException;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.utils.schema.Geography;
@UtilityClass
} catch (JsonProcessingException e) {
String message = "Exception during converting jsonb to list";
log.error(message, e);
- throw TiesException.serverException(message, null, e);
+ throw TeivException.serverException(message, null, e);
}
}
} catch (JsonProcessingException e) {
String message = "Exception during converting jsonb to map";
log.error(message, e);
- throw TiesException.serverException(message, null, e);
+ throw TeivException.serverException(message, null, e);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import lombok.experimental.UtilityClass;
@UtilityClass
-public class TiesConstants {
+public class TeivConstants {
public static final String ENTITIES = "entities";
public static final String RELATIONSHIPS = "relationships";
public static final String API_VERSION = "v1alpha11";
public static final String REQUEST_MAPPING_AUDIT = "topology-inventory-audit/" + API_VERSION;
public static final String TEIV_DOMAIN = "TEIV";
- public static final String TIES_DATA_SCHEMA = "ties_data";
- public static final String TIES_MODEL_SCHEMA = "ties_model";
- public static final String TIES_CONSUMER_DATA_SCHEMA = "ties_consumer_data";
- public static final String TIES_DATA = TIES_DATA_SCHEMA + ".\"%s\"";
- public static final String TIES_MODEL = "ties_model.%s";
- public static final String TIES_CONSUMER_DATA = "ties_consumer_data.%s";
+ public static final String TEIV_DATA_SCHEMA = "teiv_data";
+ public static final String TEIV_MODEL_SCHEMA = "teiv_model";
+ public static final String TEIV_CONSUMER_DATA_SCHEMA = "teiv_consumer_data";
+ public static final String TEIV_DATA = TEIV_DATA_SCHEMA + ".\"%s\"";
+ public static final String TEIV_MODEL = "teiv_model.%s";
+ public static final String TEIV_CONSUMER_DATA = "teiv_consumer_data.%s";
public static final String ST_TO_STRING = "ST_AsText(%s)";
public static final String ST_TO_STRING_COLUMN_WITH_TABLE_NAME = "ST_AsText(%s)";
public static final String QUOTED_STRING = "\"%s\"";
public static final String DECORATORS = "decorators";
public static final String METADATA = "metadata";
public static final String RESPONSIBLE_ADAPTER = "responsible_adapter";
- public static final String RI_PREFIX = "RI_";
public static final String REL_PREFIX = "REL_";
- public static final String RESP_PREFIX = "RESP_";
public static final String PROPERTY_A_SIDE = "aSide";
public static final String PROPERTY_B_SIDE = "bSide";
public static final String ITEM = "item";
public static final String TOPOLOGY_INVENTORY_AUDIT_SCHEMA = "topology-inventory:audit:1.0.0";
public static final String TOPOLOGY_INVENTORY_AUDIT_SOURCE = "topology-inventory:audit";
public static final String TOPOLOGY_INVENTORY_AUDIT_TYPE = "topology-inventory-audit.initiate";
+
+ public static final String URN_PREFIX = "urn:";
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.nio.charset.StandardCharsets;
import java.util.*;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exception.YangModelException;
import org.oran.smo.yangtools.parser.data.YangData;
import org.oran.smo.yangtools.parser.findings.FindingSeverity;
import org.oran.smo.teiv.api.model.OranTeivHref;
import org.springframework.web.multipart.MultipartFile;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.INVALID_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.SEMICOLON_SEPARATION;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.INVALID_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.SEMICOLON_SEPARATION;
@Service
@Slf4j
*
* @return OranTeivSchemasMetaData
*/
- public static List<OranTeivSchema> returnAllTiesSchemas(YangDeviceModel yangDeviceModel) {
+ public static List<OranTeivSchema> returnAllTeivSchemas(YangDeviceModel yangDeviceModel) {
List<OranTeivSchema> OranTeivSchemasMetaData = new ArrayList<>();
for (final YangModel yangModel : yangDeviceModel.getModuleRegistry().getAllYangModels()) {
OranTeivSchema schemasMetaData = new OranTeivSchema();
.getChildren().get(0).getValue().equals(formattedName)).toList();
if (domElement.isEmpty()) {
- throw TiesException.invalidSchema("Invalid classifier " + element.getValue());
+ throw TeivException.invalidSchema("Invalid classifier " + element.getValue());
} else {
result.add(element.getValue());
}
case "string" -> "TEXT";
case "boolean" -> "BOOLEAN";
case "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64" -> "INT";
- default -> throw TiesException.invalidFileInput("Invalid data type");
+ default -> throw TeivException.invalidFileInput("Invalid data type");
}));
}
});
for (Finding finding : findingsManager.getAllFindings()) {
if (severityCalculator.calculateSeverity(finding.getFindingType()).equals(FindingSeverity.ERROR)) {
if (finding.getMessage().contains("exception") || finding.getFindingType().contains("UNSPECIFIED_ERROR")) {
- throw TiesException.invalidFileInput(INVALID_SCHEMA);
+ throw TeivException.invalidFileInput(INVALID_SCHEMA);
} else {
- throw TiesException.invalidFileInput(finding.getMessage());
+ throw TeivException.invalidFileInput(finding.getMessage());
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.utils.path;
-import org.oran.smo.teiv.antlr4.tiesPathBaseListener;
-import org.oran.smo.teiv.antlr4.tiesPathParser;
+import org.oran.smo.teiv.antlr4.teivPathBaseListener;
+import org.oran.smo.teiv.antlr4.teivPathParser;
import org.oran.smo.teiv.utils.path.exception.PathParsingException;
import lombok.SneakyThrows;
import org.antlr.v4.runtime.RuleContext;
import java.util.List;
import java.util.stream.Collectors;
-public class TiesPathBuilder extends tiesPathBaseListener {
+public class TeivPathBuilder extends teivPathBaseListener {
private static final String OPEN_BRACKET = "[";
private static final String CLOSE_BRACKET = "]";
- private final TiesPathQuery tiesPathQuery = new TiesPathQuery();
+ private final TeivPathQuery teivPathQuery = new TeivPathQuery();
- private final List<TiesPathQuery.DataLeaf> leavesData = new ArrayList<>();
+ private final List<TeivPathQuery.DataLeaf> leavesData = new ArrayList<>();
- private final StringBuilder normalizedTiesPathBuilder = new StringBuilder();
+ private final StringBuilder normalizedTeivPathBuilder = new StringBuilder();
private final List<String> containerNames = new ArrayList<>();
private List<String> attributeNames = new ArrayList<>();
- TiesPathQuery build() {
- tiesPathQuery.setNormalizedXpath(normalizedTiesPathBuilder.toString());
- tiesPathQuery.setContainerNames(containerNames);
- tiesPathQuery.setBooleanOperators(booleanOperators);
- tiesPathQuery.setComparativeOperators(comparativeOperators);
- tiesPathQuery.setAttributeNames(attributeNames);
- return tiesPathQuery;
+ TeivPathQuery build() {
+ teivPathQuery.setNormalizedXpath(normalizedTeivPathBuilder.toString());
+ teivPathQuery.setContainerNames(containerNames);
+ teivPathQuery.setBooleanOperators(booleanOperators);
+ teivPathQuery.setComparativeOperators(comparativeOperators);
+ teivPathQuery.setAttributeNames(attributeNames);
+ return teivPathQuery;
}
@SneakyThrows
@Override
- public void exitInvalidPostFix(final tiesPathParser.InvalidPostFixContext ctx) {
+ public void exitInvalidPostFix(final teivPathParser.InvalidPostFixContext ctx) {
throw new PathParsingException(ctx.getText());
}
@Override
- public void exitParent(final tiesPathParser.ParentContext ctx) {
- tiesPathQuery.setNormalizedParentPath(normalizedTiesPathBuilder.toString());
+ public void exitParent(final teivPathParser.ParentContext ctx) {
+ teivPathQuery.setNormalizedParentPath(normalizedTeivPathBuilder.toString());
}
@SneakyThrows
@Override
- public void exitIncorrectPrefix(final tiesPathParser.IncorrectPrefixContext ctx) {
+ public void exitIncorrectPrefix(final teivPathParser.IncorrectPrefixContext ctx) {
throw new PathParsingException("Path can only start with one slash (/)");
}
@SneakyThrows
@Override
- public void exitLeafCondition(final tiesPathParser.LeafConditionContext ctx) {
+ public void exitLeafCondition(final teivPathParser.LeafConditionContext ctx) {
final Object comparisonValue;
if (ctx.IntegerLiteral() != null) {
comparisonValue = Integer.valueOf(ctx.IntegerLiteral().getText());
}
@Override
- public void exitBooleanOperators(final tiesPathParser.BooleanOperatorsContext ctx) {
+ public void exitBooleanOperators(final teivPathParser.BooleanOperatorsContext ctx) {
if (ctx.getText().equals("or"))
throw new PathParsingException("Boolean operator 'or' is not supported, at " + ctx.getStart()
.getCharPositionInLine());
}
@Override
- public void exitComparativeOperators(final tiesPathParser.ComparativeOperatorsContext ctx) {
+ public void exitComparativeOperators(final teivPathParser.ComparativeOperatorsContext ctx) {
if (!ctx.getText().equals("="))
throw new PathParsingException(String.format("Comparative operator '%s' is not supported, at %d", ctx.getText(),
ctx.getStart().getCharPositionInLine()));
}
@Override
- public void enterMultipleLeafConditions(final tiesPathParser.MultipleLeafConditionsContext ctx) {
- normalizedTiesPathBuilder.append(OPEN_BRACKET);
+ public void enterMultipleLeafConditions(final teivPathParser.MultipleLeafConditionsContext ctx) {
+ normalizedTeivPathBuilder.append(OPEN_BRACKET);
leavesData.clear();
booleanOperators.clear();
comparativeOperators.clear();
}
@Override
- public void exitMultipleLeafConditions(final tiesPathParser.MultipleLeafConditionsContext ctx) {
- normalizedTiesPathBuilder.append(CLOSE_BRACKET);
- tiesPathQuery.setLeavesData(leavesData);
+ public void exitMultipleLeafConditions(final teivPathParser.MultipleLeafConditionsContext ctx) {
+ normalizedTeivPathBuilder.append(CLOSE_BRACKET);
+ teivPathQuery.setLeavesData(leavesData);
}
@Override
- public void exitContainsFunctionCondition(final tiesPathParser.ContainsFunctionConditionContext ctx) {
- tiesPathQuery.setContainsFunctionConditionLeafName(ctx.leafName().getText());
- tiesPathQuery.setContainsFunctionConditionValue(unwrapQuotedString(ctx.StringLiteral().getText()));
+ public void exitContainsFunctionCondition(final teivPathParser.ContainsFunctionConditionContext ctx) {
+ teivPathQuery.setContainsFunctionConditionLeafName(ctx.leafName().getText());
+ teivPathQuery.setContainsFunctionConditionValue(unwrapQuotedString(ctx.StringLiteral().getText()));
}
@Override
- public void enterListElementRef(final tiesPathParser.ListElementRefContext ctx) {
- normalizedTiesPathBuilder.append(OPEN_BRACKET);
+ public void enterListElementRef(final teivPathParser.ListElementRefContext ctx) {
+ normalizedTeivPathBuilder.append(OPEN_BRACKET);
}
@Override
- public void exitListElementRef(final tiesPathParser.ListElementRefContext ctx) {
- normalizedTiesPathBuilder.append(CLOSE_BRACKET);
+ public void exitListElementRef(final teivPathParser.ListElementRefContext ctx) {
+ normalizedTeivPathBuilder.append(CLOSE_BRACKET);
}
@Override
- public void exitContainerName(final tiesPathParser.ContainerNameContext ctx) {
+ public void exitContainerName(final teivPathParser.ContainerNameContext ctx) {
final String containerName = ctx.getText();
- normalizedTiesPathBuilder.append("/").append(containerName);
+ normalizedTeivPathBuilder.append("/").append(containerName);
containerNames.add(containerName);
}
@Override
- public void exitFieldLeaf(final tiesPathParser.FieldLeafContext ctx) {
+ public void exitFieldLeaf(final teivPathParser.FieldLeafContext ctx) {
attributeNames = ctx.leafName().stream().map(RuleContext::getText).collect(Collectors.toList());
}
- private void leafContext(final tiesPathParser.LeafNameContext ctx, final Object comparisonValue) {
- leavesData.add(new TiesPathQuery.DataLeaf(ctx.getText(), comparisonValue));
- appendCondition(normalizedTiesPathBuilder, ctx.getText(), comparisonValue);
+ private void leafContext(final teivPathParser.LeafNameContext ctx, final Object comparisonValue) {
+ leavesData.add(new TeivPathQuery.DataLeaf(ctx.getText(), comparisonValue));
+ appendCondition(normalizedTeivPathBuilder, ctx.getText(), comparisonValue);
}
private void appendCondition(final StringBuilder currentNormalizedPathBuilder, final String name, final Object value) {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.antlr.v4.runtime.Recognizer;
import org.antlr.v4.runtime.misc.ParseCancellationException;
-public class TiesPathErrorListener extends BaseErrorListener {
+public class TeivPathErrorListener extends BaseErrorListener {
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object o, int i, int i1, String s, RecognitionException e)
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.utils.path;
-import org.oran.smo.teiv.antlr4.tiesPathLexer;
+import org.oran.smo.teiv.antlr4.teivPathLexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.LexerNoViableAltException;
import org.antlr.v4.runtime.misc.ParseCancellationException;
-public class TiesPathLexer extends tiesPathLexer {
+public class TeivPathLexer extends teivPathLexer {
- public TiesPathLexer(CharStream input) {
+ public TeivPathLexer(CharStream input) {
super(input);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.utils.path;
-import org.oran.smo.teiv.antlr4.tiesPathParser;
+import org.oran.smo.teiv.antlr4.teivPathParser;
import lombok.SneakyThrows;
import org.antlr.v4.runtime.TokenStream;
-public class TiesPathParser extends tiesPathParser {
- public TiesPathParser(TokenStream input) {
+public class TeivPathParser extends teivPathParser {
+ public TeivPathParser(TokenStream input) {
super(input);
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@Getter
@Setter(AccessLevel.PACKAGE)
-public class TiesPathQuery {
- private String tiesPathPrefix;
+public class TeivPathQuery {
+ private String teivPathPrefix;
private String normalizedParentPath;
private String normalizedXpath;
private List<String> containerNames;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.utils.path;
-import org.oran.smo.teiv.antlr4.tiesPathParser;
+import org.oran.smo.teiv.antlr4.teivPathParser;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CommonTokenStream;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class TiesPathUtil {
+public class TeivPathUtil {
/**
* @deprecated (this method is deprecated)
*/
@Deprecated
- public static TiesPathQuery getTiesPathQuery(final String TiesPathSource) {
- final CharStream inputStream = CharStreams.fromString(TiesPathSource);
- final TiesPathLexer tiesPathLexer = new TiesPathLexer(inputStream);
- final tiesPathParser tiesPathParser = new TiesPathParser(new CommonTokenStream(tiesPathLexer));
- tiesPathParser.removeErrorListeners();
- tiesPathParser.addErrorListener(new TiesPathErrorListener());
- tiesPathParser.setErrorHandler(new StrictErrorStrategy());
- final TiesPathBuilder tiesPathBuilder = new TiesPathBuilder();
- tiesPathParser.addParseListener(tiesPathBuilder);
- tiesPathParser.tiesPath();
+ public static TeivPathQuery getTeivPathQuery(final String TeivPathSource) {
+ final CharStream inputStream = CharStreams.fromString(TeivPathSource);
+ final TeivPathLexer teivPathLexer = new TeivPathLexer(inputStream);
+ final teivPathParser teivPathParser = new TeivPathParser(new CommonTokenStream(teivPathLexer));
+ teivPathParser.removeErrorListeners();
+ teivPathParser.addErrorListener(new TeivPathErrorListener());
+ teivPathParser.setErrorHandler(new StrictErrorStrategy());
+ final TeivPathBuilder teivPathBuilder = new TeivPathBuilder();
+ teivPathParser.addParseListener(teivPathBuilder);
+ teivPathParser.teivPath();
- return tiesPathBuilder.build();
+ return teivPathBuilder.build();
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.Set;
@Getter
-public class TiesPathException extends RuntimeException {
+public class TeivPathException extends RuntimeException {
private final String message;
private final String details;
private final transient List<Object> response;
private static final List<Object> defaultResponse = Collections.emptyList();
- public static TiesPathException invalidRelationshipName(final String relationship) {
+ public static TeivPathException invalidRelationshipName(final String relationship) {
return clientException("Invalid relationship name", String.format("%s is not a known relationship", relationship));
}
- public static TiesPathException noConnectionFound(final String object) {
+ public static TeivPathException noConnectionFound(final String object) {
return clientException("Objects are not related", String.format(
"No relationship can be found between %s and scopeFilter elements", object));
}
- public static TiesPathException noConnectionFoundWhenRootIsNull() {
+ public static TeivPathException noConnectionFoundWhenRootIsNull() {
return clientException("Objects are not related",
"None of the elements in the targetFilter is part of connection provided in relationships filter");
}
- public static TiesPathException grammarError(final String message) {
+ public static TeivPathException grammarError(final String message) {
return clientException("Grammar error", message);
}
- public static TiesPathException columnNameError(String entity, String column) {
+ public static TeivPathException columnNameError(String entity, String column) {
return clientException("Grammar Error", String.format("%s is not a valid attribute of %s", column, entity));
}
- public static TiesPathException columnNamesError(String entity, List<String> columns) {
+ public static TeivPathException columnNamesError(String entity, List<String> columns) {
if (columns.size() == 1) {
return columnNameError(entity, columns.get(0));
} else {
}
}
- public static TiesPathException sourceIdNameError(String entity) {
+ public static TeivPathException sourceIdNameError(String entity) {
return clientException("Invalid parameter error", String.format("Invalid source id parameter provided for %s",
entity));
}
- private static TiesPathException clientException(final String message, final String details) {
- return new TiesPathException(message, details, HttpStatus.BAD_REQUEST, null);
+ private static TeivPathException clientException(final String message, final String details) {
+ return new TeivPathException(message, details, HttpStatus.BAD_REQUEST, null);
}
- public static TiesPathException idAmongAttributesError() {
+ public static TeivPathException idAmongAttributesError() {
return clientException("Grammar Error", "ID is not considered to be an attribute");
}
- public static TiesPathException invalidQueryError() {
+ public static TeivPathException invalidQueryError() {
return clientException("Invalid query", "The provided query in scopeFilter is invalid");
}
- public static TiesPathException entityNameError(String entity) {
+ public static TeivPathException invalidTargetFilter(String topologyObject) {
+ return clientException("Invalid target filter, only relationship conditions can be provided", String.format(
+ "%s is not a valid relation", topologyObject));
+ }
+
+ public static TeivPathException entityNameError(String entity) {
return clientException("Grammar Error", String.format("%s is not a valid entity", entity));
}
- public static TiesPathException invalidTopologyObject(String topologyObject) {
+ public static TeivPathException invalidTopologyObject(String topologyObject) {
return clientException("Invalid topology object", String.format(
"%s did not match any topology objects in the given domain", topologyObject));
}
- public static TiesPathException invalidInnerContainer(String innerContainer) {
- return clientException("Invalid data in scopeFilter", String.format("Unable to resolve %s", innerContainer));
+ public static TeivPathException invalidDataInScopeFilter(String data) {
+ return clientException("Invalid data in scopeFilter", String.format("Unable to resolve %s", data));
}
- public static TiesPathException invalidTargetFilter(Set<String> params) {
+ public static TeivPathException invalidTargetFilter(Set<String> params) {
return clientException("Invalid targetFilter content", String.format(
"%s did not match any topology objects in the given domain", String.join(", ", params)));
}
- public static TiesPathException invalidTargetFilter() {
+ public static TeivPathException invalidTargetFilter() {
return clientException("Invalid targetFilter content", "Given targetFilters could not be resolved");
}
- public static TiesPathException invalidTargetFilterScopeFilterCombination() {
+ public static TeivPathException invalidTargetFilterScopeFilterCombination() {
return clientException("Invalid targetFilter and scopeFilter content",
"Given targetFilter and scopeFilter can not be combined");
}
- public static TiesPathException invalidScopeFilter(String leaf) {
+ public static TeivPathException invalidScopeFilter(String leaf) {
return clientException("Invalid scopeFilter content", String.format(
"%s did not match any topology objects in the given domain", leaf));
}
- public static TiesPathException invalidMetadaFilter(String leaf) {
+ public static TeivPathException invalidMetadaFilter(String leaf) {
return clientException("Invalid metadata content", String.format("%s is not a valid metadata", leaf));
}
- public static TiesPathException ambiguousTopologyObject(String topologyObject) {
+ public static TeivPathException ambiguousTopologyObject(String topologyObject) {
return clientException("Invalid topology object", String.format(
"%s is ambiguous, %s matches multiple topology object types", topologyObject, topologyObject));
}
- public static TiesPathException invalidAssociation(String topologyObject, String associationName) {
+ public static TeivPathException invalidAssociation(String topologyObject, String associationName) {
return clientException("Invalid association name", String.format(
"%s is not a valid association name for topology object %s", associationName, topologyObject));
}
- public static TiesPathException invalidParamsForAssociation(String associationName) {
+ public static TeivPathException invalidParamsForAssociation(String associationName) {
return clientException("Invalid parameters for association", String.format(
"Invalid parameters provided for association %s", associationName));
}
- public static TiesPathException containerValidationWithUndefinedTopologyObjectType(String topologyObject) {
+ public static TeivPathException containerValidationWithUndefinedTopologyObjectType(String topologyObject) {
return clientException("Container validation error", String.format(
"Container validation is not possible for undefined %s", topologyObject));
}
- public static TiesPathException notMatchingScopeAndTargetFilter() {
+ public static TeivPathException notMatchingScopeAndTargetFilter() {
return clientException("Filter Error", "TopologyObjects given in scopeFilter and targetFilter are not matching");
}
- public static TiesPathException invalidQueryCondition(String details) {
+ public static TeivPathException invalidQueryCondition(String details) {
return clientException("Invalid query condition", details);
}
- private TiesPathException(final String message, final String details, final HttpStatus httpStatus,
+ public static TeivPathException invalidDataType() {
+ return clientException("Invalid data type", "Invalid data type provided for scopeFilter");
+ }
+
+ private TeivPathException(final String message, final String details, final HttpStatus httpStatus,
final List<Object> response) {
this.message = message;
this.details = details;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* A json that conforms to the "RFC 9179: A YANG Grouping for
* Geographic Location" standard.
* @throws IOException
- * when the json doesn't contain both "latitude" and
- * "longitude" fields.
+ * when the json doesn't contain both "latitude" and "longitude" fields
+ * or the range of latitude is not [-90,90] or the range of longitude is not [-180,180].
*/
public Geography(final String json) throws IOException {
JsonNode rootNode = objectMapper.readTree(json);
JsonNode latitudeNode = findNode(rootNode, "latitude");
JsonNode longitudeNode = findNode(rootNode, "longitude");
- if (isValidNumber(latitudeNode) && isValidNumber(longitudeNode)) {
+ if (isValidLatitude(latitudeNode) && isValidLongitude(longitudeNode)) {
latitude = latitudeNode.asDouble();
longitude = longitudeNode.asDouble();
JsonNode heightNode = findNode(rootNode, "height");
height = heightNode.asDouble();
}
} else {
- throw new IOException("Cannot find latitude, longitude fields in json: " + json);
+ throw new IOException(
+ "The range of latitude should be [-90,90] and the range of longitude should be [-180,180]: " + json);
}
}
return node != null && node.isNumber();
}
+ private boolean isValidLatitude(JsonNode node) {
+ return isValidNumber(node) && node.asDouble() >= -90 && node.asDouble() <= 90;
+ }
+
+ private boolean isValidLongitude(JsonNode node) {
+ return isValidNumber(node) && node.asDouble() >= -180 && node.asDouble() <= 180;
+ }
+
private JsonNode findNode(final JsonNode node, final String fieldName) {
if (node.has(fieldName)) {
return node.get(fieldName);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.utils.yangparser;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.SEMICOLON_SEPARATION;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.SEMICOLON_SEPARATION;
import java.util.ArrayList;
import java.util.HashMap;
import org.oran.smo.yangtools.parser.model.ConformanceType;
import org.oran.smo.yangtools.parser.model.YangModel;
import org.oran.smo.yangtools.parser.model.yangdom.YangDomElement;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exception.YangParsingException;
import org.oran.smo.teiv.exception.YangSchemaException;
.getChildren().get(0).getValue().equals(formattedName)).toList();
if (domElement.isEmpty()) {
- throw TiesException.invalidSchema("Invalid classifier " + element.getValue());
+ throw TeivException.invalidSchema("Invalid classifier " + element.getValue());
} else {
classifier = element.getValue();
}
classifier = element.getValue();
}
if (result.contains(classifier)) {
- throw TiesException.duplicateEntryForClassifiers(classifier);
+ throw TeivException.duplicateEntryForClassifiers(classifier);
} else {
result.add(classifier);
}
case "string" -> "TEXT";
case "boolean" -> "BOOLEAN";
case "int8", "int16", "int32", "int64", "uint8", "uint16", "uint32", "uint64" -> "INT";
- default -> throw TiesException.invalidFileInput("Invalid data type");
+ default -> throw TeivException.invalidFileInput("Invalid data type");
};
if (resultMap.putIfAbsent(key, value) != null) {
- throw TiesException.duplicateEntryForDecorators(key);
+ throw TeivException.duplicateEntryForDecorators(key);
}
});
return resultMap;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.utils.yangparser;
-import static org.oran.smo.teiv.utils.TiesConstants.INVALID_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.SCHEMA_ALREADY_EXISTS;
+import static org.oran.smo.teiv.utils.TeivConstants.INVALID_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.SCHEMA_ALREADY_EXISTS;
import java.util.HashSet;
import java.util.Set;
import org.oran.smo.yangtools.parser.findings.FindingSeverityCalculator;
import org.oran.smo.yangtools.parser.findings.FindingsManager;
import org.oran.smo.teiv.CustomMetrics;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exception.YangValidationException;
@Slf4j
for (Finding finding : findingsManager.getAllFindings()) {
if (isErrorFinding(severityCalculator, finding)) {
if (isInvalidSchemaFinding(finding)) {
- throw TiesException.invalidFileInput(INVALID_SCHEMA);
+ throw TeivException.invalidFileInput(INVALID_SCHEMA);
} else if (finding.getFindingType().contains("P044_SAME_MODULE_IMPLEMENTS_AND_IMPORTS")) {
- throw TiesException.invalidFileInput(SCHEMA_ALREADY_EXISTS);
+ throw TeivException.invalidFileInput(SCHEMA_ALREADY_EXISTS);
} else {
- throw TiesException.invalidFileInput(finding.getMessage());
+ throw TeivException.invalidFileInput(finding.getMessage());
}
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
validate-group-membership: "false"
group:
readiness:
- include: "readinessState,${HEALTH_CHECK_INDICATOR:tiesExposure}"
+ include: "readinessState,${HEALTH_CHECK_INDICATOR:teivExposure}"
endpoints:
web:
exposure:
namespace "urn:o-ran:smo-teiv-common-yang-types";
prefix or-teiv-types;
+ import ietf-yang-types { prefix yang; }
+
import o-ran-smo-teiv-common-yang-extensions { prefix or-teiv-yext; }
import _3gpp-common-yang-types { prefix types3gpp; }
SPDX-License-Identifier: Apache-2.0";
+ revision "2025-01-17" {
+ description "Added firstDiscovered and lastModified to metadata container";
+ or-teiv-yext:label 0.5.0;
+ }
+
revision "2024-10-04" {
description "Added Origin_Entity_Mapping_Grp and Origin_Relationship_Mapping_Grp
for sourceIds and reliabilityIndicator to metadata.";
This must be attached to the Topology Entity or Topology Relation instance,
outside of the declared Topology Entity or Topology Relationship's
attributes. This is exposed to the consumers and can only be set by
- the responsible adapter. This cannot be instantiated, and it MUST NOT be
- augmented or deviated in any way, unless stated otherwise.";
+ Topology and Inventory Exposure Handling and Discovery and Reconciliation Adapter.
+ This cannot be instantiated, and it MUST NOT be augmented or deviated in any way,
+ unless stated otherwise.";
leaf reliabilityIndicator {
type enumeration {
enum OK {
description "The data is in alignment with the source of truth,
- as far as Topology Exposure Handling is aware.";
+ as far as Topology and Inventory Exposure Handling is aware.";
value 0;
}
enum RESTORED {
value 1;
}
enum ADVISED {
- description "Entity implicitly created by Topology Exposure Handling and
- potentially not aligned with the source of truth.";
+ description "Entity implicitly created by Topology and Inventory Exposure
+ Handling and potentially not aligned with the source of truth.";
value 2;
}
}
}
+ leaf firstDiscovered {
+ type yang:date-and-time;
+ description "Timestamp indicating when an instance of Topology Entity or Relation
+ was first represented in Topology and Inventory Exposure Handling via discovery.";
+ }
+
+ leaf lastModified {
+ type yang:date-and-time;
+ description "Timestamp indicating when an instance of Topology Entity or Relation
+ was last updated (excluding classifiers and decorators).";
+ }
}
identity classifier {
Decorators are user-defined attributes (key-value pairs) which can
be applied to topology entities and relationships.
+ Metadata provides additional information about entities and relationships within the database.
+ The reliabilityIndicator is used to indicate the reliability status of the topology data within the network.
+ The firstDiscovered timestamp is set for an entity and relationship instance when the instances are created for
+ the first time in Topology & Inventory.
+ The lastModified timestamp is set for updates to entities or relationships in Topology & Inventory,
+ excluding updates to classifiers or decorators.
+ reliabilityIndicator, firstDiscovered, and lastModified are implemented as name-value pairs within the metadata.
+ They apply to every entity and relationship.
+
Topology groups provide the capability to create user-defined collections of
topology entities and/or relationships of any type. Groups can be either
static or dynamic based on how they are created.
object(s), the query is not constructed. The RootObject still can be
retrieved and filtered using the */attributes*.
- | Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
- |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:---------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------|
- | To return the ids for all instances of the entityTypeName used in the query. | RAN | GNBDUFunction | | | All ids of every GNBDUFunction |
- | To return all attributes of every instance of the entityTypeName used in the query. | RAN | GNBDUFunction | /attributes | | All GNBDUFunctions with every attribute |
- | To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the *targetFilter* parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | GNBDUFunction | /attributes(gNBId) | | All gNBIds of every GNBDUFunction |
- | To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the *targetFilter* parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()". | RAN | GNBDUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every GNBDUFunction |
- | To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the *scopeFilter* parameter. | RAN | GNBDUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where sourceIds contains *SubNetwork=Ireland* |
- | To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the *scopeFilter* parameter. <br/> Note: The attributes must be separated by a *AND* or *OR*". | RAN | GNBDUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |
- | To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the *scopeFilter* parameter. A condition is a complete unit of *scopeFilter* parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "|" to represent OR. | RAN | GNBDUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of GNBDUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |
+ | Use case | domainName | entityTypeName | targetFilter | scopeFilter | Query result |
+ |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:---------------|:--------------------------------|:----------------------------------------------------------------------------------------------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+ | To return the ids for all instances of the entityTypeName used in the query. | RAN | ODUFunction | | | All ids of every ODUFunction |
+ | To return all attributes of every instance of the entityTypeName used in the query. | RAN | ODUFunction | /attributes | | All ODUFunctions with every attribute |
+ | To return every instance of the entityTypeName used in the query, but only the attribute that was defined in the *targetFilter* parameter. <br/> Note: The attribute must be a valid field of the object. | RAN | ODUFunction | /attributes(gNBId) | | All gNBIds of every ODUFunction |
+ | To return every instance of the entityTypeName used in the query, but only the attributes that were defined in the *targetFilter* parameter. <br/> Note: The attributes must be separated by a comma "," when using parenthesis "()". | RAN | ODUFunction | /attributes(gNBId, gNBIdLength) | | All gNBIds and gNBIdLengths of every ODUFunction |
+ | To return the ids for all instances of the entityTypeName used in the query, that partially matches the given property in the *scopeFilter* parameter. | RAN | ODUFunction | | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where sourceIds contains *SubNetwork=Ireland* |
+ | To return the ids for all instances of the entityTypeName used in the query, that matches the given attributes in the *scopeFilter* parameter. <br/> Note: The attributes must be separated by a *AND* or *OR*. | RAN | ODUFunction | | /attributes [@gNBIdLength=1 and @gNBId=9] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 1 and the gNBId equals 9 |
+ | To return the ids for all instances of the entityTypeName used in the query, that satisfies one of the conditions in the *scopeFilter* parameter. A condition is a complete unit of *scopeFilter* parameter surrounded by square brackets. <br/> Note: Multiple conditions can be given in the scopeFilter separated by a semicolon ";" to represent AND, or a pipe symbol "|" to represent OR. | RAN | ODUFunction | | /attributes [@gNBIdLength=2] | /sourceIds[contains (@item, 'SubNetwork=Europe')] | Unique set of ids of ODUFunctions, where the gNBIdLength equals 2 or the sourceIds contains an item with "SubNetwork=Europe" |
+ | To return the metadata for all instances of the entityTypeName used in the query, that is *firstDiscovered* within the given timeframe in the *scopeFilter* parameter. <br/> Note: The timestamps can be queried in any timezone. | RAN | ODUFunction | | /metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30'] | Unique set of ids of ODUFunctions, where metadata contains *firstDiscovered* timestamp within the range '2025-01-06T12:34:56.789+05:30' and '2025-01-09T16:10:36.461565+05:30' |
## Querying connected entities
The *entityTypeName* is used as the root of the queries.
|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------|:---------------|:-------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| To return the ids for all instances of an entityTypeName related by an association. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement | All ENodeBFunction entities that are managed by any Managed Element. |
| To return the ids for all instances of an entityTypeName related by an association to another entity specified by its *id*. | REL_OAM_RAN | ENodeBFunction | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All ENodeBFunction entities that are managed by the Managed Element *urn:3gpp:dn: ManagedElement=1*. |
- | To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their *id*. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All EnodeBFunction entities with enbId as *1*, managed by the Managed Element *urn:3gpp:dn: ManagedElement=1* or *urn:3gpp:dn: ManagedElement=2*, and provides EuTranCell *urn:3gpp:dn: ManagedElement=1, EUtranCell=2*. |
- | To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given *scopeFilter* parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All EnodeBFunction entities that provide an EuTranCell whose tac equals 1 |
+ | To return the attributes for all instances of an entityTypeName related by one or more associations to other entities specified by their *id*. | REL_OAM_RAN | ENodeBFunction | /attributes | /attributes [@enbId=1] ; /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=1'] | /managed-by-managedElement [@id='urn:3gpp:dn: ManagedElement=2'] ; /provided-euTranCell [@id='urn:3gpp:dn: ManagedElement=1, EUtranCell=2'] | All ENodeBFunction entities with enbId as *1*, managed by the Managed Element *urn:3gpp:dn: ManagedElement=1* or *urn:3gpp:dn: ManagedElement=2*, and provides EuTranCell *urn:3gpp:dn: ManagedElement=1, EUtranCell=2*. |
+ | To return the ids for all instances of an entityTypeName related by one or more associations to other entities whose attribute matches the given *scopeFilter* parameter. | RAN | ENodeBFunction | | /provided-euTranCell/attributes[@tac=1] | All ENodeBFunction entities that provide an EUTranCell whose tac equals 1 |
## Querying based on geographical location
The *entityTypeName* is used as the root of the queries. Use the "Well-known text" (WKT) representation of geometry to specify geometry objects.
| Use case | domainName | entityTypeName | entityId | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------|-------------|:---------------|------------------------------------------------|:----------------------------------------|:-------------------------------------------------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
- | To return the relationships for a given entity specified by its id. | RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | | All relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1*. |
- | To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | /MANAGEDELEMENT _MANAGES _GNBDUFUNCTION | | All *MANAGEDELEMENT _MANAGES _GNBDUFUNCTION* relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1*. |
- | To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | GNBDUFunction | urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All *MANAGEDELEMENT _MANAGES _GNBDUFUNCTION* relations for the GNBDUFunction with id *urn:3gpp:dn: ManagedElement=1, GNBDUFunction=1* where the managed element is *urn:3gpp:dn: ManagedElement=1*. |
+ | To return the relationships for a given entity specified by its id. | RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | | All relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1*. |
+ | To return specific relationships for a given entity specified by its id. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | /MANAGEDELEMENT _MANAGES _ODUFUNCTION | | All *MANAGEDELEMENT _MANAGES _ODUFUNCTION* relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1*. |
+ | To return specific relationships for an entity specified by its id to another entity using its id and association. | REL_OAM_RAN | ODUFunction | urn:3gpp:dn: ManagedElement=1, ODUFunction=1 | | /managed-by-managedElement [@id = 'urn:3gpp:dn: ManagedElement=1'] | All *MANAGEDELEMENT _MANAGES _ODUFUNCTION* relations for the ODUFunction with id *urn:3gpp:dn: ManagedElement=1, ODUFunction=1* where the managed element is *urn:3gpp:dn: ManagedElement=1*. |
## Querying on relationships
Here, the *relationshipTypeName* is used as the root of the queries.
| Use case | domainName | targetFilter | scopeFilter | Query result |
|:--------------------------------------------------------------------------------------------------------------------------------------------------|------------|--------------|:----------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------|
- | Return all related entity IDs that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'gnbdu-function-model:Indoor'] | All the entity IDs that are classified with "gnbdu-function-model:Indoor" in RAN domain. |
- | Return all related entity IDs that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity IDs that are partially matched with "Ind" in RAN domain. |
- | Return all related entity IDs that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@gnbdu-function-model:textdata = 'Stockholm'] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata = 'Stockholm'" in RAN domain. |
- | Return all related entity IDs that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@gnbdu-function-model:textdata, '')] | All the entity IDs that are exactly matched with "gnbdu-function-model:textdata as key of the decorator in RAN domain. |
+ | Return all related entity ids that are exactly matched with the specified classifier with given domain name. | RAN | | /classifiers[@item = 'odu-function-model:Indoor'] | All the entity ids that are classified with "odu-function-model:Indoor" in RAN domain. |
+ | Return all related entity ids that are partially matched for the given classifier with given domain name. | RAN | | /classifiers[contains(@item, 'Ind')] | All the entity ids that are partially matched with "Ind" in RAN domain. |
+ | Return all related entity ids that are exactly matched with the key-value pair that specified decorators with given domain name. | RAN | | /decorators[@odu-function-model:textdata = 'Stockholm'] | All the entity ids that are exactly matched with "odu-function-model:textdata = 'Stockholm'" in RAN domain. |
+ | Return all related entity ids that are exactly matched with key parameter where the value of the decorator is unknown with given domain name. | RAN | | /decorators[contains(@odu-function-model:textdata, '')] | All the entity ids that are exactly matched with "odu-function-model:textdata as key of the decorator in RAN domain. |
The *entityName* is used as the root of the queries.
| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------|:---------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
- | Return all related entity IDs and classifiers. | NRCellDU | | /classifiers | | All NRCellDU IDs and classifiers. |
- | Return all related entity IDs and decorators. | NRCellDU | | /decorators | | All NRCellDU IDs and decorators. |
- | Return all related entity IDs that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All NRCellDU IDs where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "gnbdu-function-model:Indoor". |
- | Return all related entity IDs and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU IDs and classifiers partially contains the text "Ind". |
- | Return all related entity IDs and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc'. |
- | Return all related entity IDs, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stoc')] | All NRCellDU IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind". |
-
+ | Return all related entity ids and classifiers. | NRCellDU | | /classifiers | | All NRCellDU ids and classifiers. |
+ | Return all related entity ids and decorators. | NRCellDU | | /decorators | | All NRCellDU ids and decorators. |
+ | Return all related entity ids that are exact match for the given classifiers and decorators. | NRCellDU | | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All NRCellDU ids where key of the decorator is "odu-function-model:textdata" and the value of the decorator is 'Stockholm'" and where classifier exactly contains "odu-function-model:Indoor". |
+ | Return all related entity ids and classifiers that are partially matched for the given classifier. | NRCellDU | | /classifiers | /classifiers[contains(@item, 'Ind')] | All NRCellDU ids and classifiers partially contains the text "Ind". |
+ | Return all related entity ids and decorators where key is a exact match and value is partially match. | NRCellDU | | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stoc'. |
+ | Return all related entity ids, decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | NRCellDU | | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stoc')] | All NRCellDU ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stoc' and classifiers partially contains the text "Ind". |
+
The *relationshipTypeName* is used as the root of the queries.
-
+
| Use case | entityName | relationshipTypeName | targetFilter | scopeFilter | Query result |
|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------|:----------------------------------------|:--------------------------|:----------------------------------------------------------------------------------------------------------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
- | Return all related relationships IDs and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and classifiers. |
- | Return all related relationships IDs and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators. |
- | Return all related relationship IDs that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'gnbdu-function-model:Indoor']; /decorators [@gnbdu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "gnbdu-function-model:Indoor". |
- | Return all related relationships IDs and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind". |
- | Return all related relationships IDs and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock'. |
- | Return all related relationships IDs,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@gnbdu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION IDs and decorators where key of the decorator is "gnbdu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind". |
+ | Return all related relationship ids and classifiers. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and classifiers. |
+ | Return all related relationship ids and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators. |
+ | Return all related relationship ids that are exact match for the given classifier and decorators. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | | /classifiers[@item = 'odu-function-model:Indoor']; /decorators [@odu-function-model:textdata = 'Stockholm'] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator is 'Stockholm'" and classifiers exactly contains "odu-function-model:Indoor". |
+ | Return all related relationship ids and classifiers that are partially matched for the given classifier. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers | /classifiers[contains(@item, 'Ind')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and classifiers partially contains the text "Ind". |
+ | Return all related relationship ids and decorators where key is a exact match and value is partially match. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /decorators | /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION and where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stock'. |
+ | Return all related relationship ids,decorators and classifiers where key of the decorator is a exact match and value partially matches, and classifiers partially contains from the given parameters. | | MANAGEDELEMENT _MANAGES _ENODEBFUNCTION | /classifiers; /decorators | /classifiers[contains(@item, 'Ind')]; /decorators[contains(@odu-function-model:textdata, 'Stock')] | All MANAGEDELEMENT _MANAGES _ENODEBFUNCTION ids and decorators where key of the decorator is "odu-function-model:textdata" and the value of the decorator partially contains 'Stock' and classifiers partially contains the text "Ind". |
version: 0.11.0
title: Topology Exposure and Inventory API
- module-y:Rural
- module-z:Weekend
entityIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
ClassifierDeleteExample:
- module-x:Outdoor
- module-z:Weekend
entityIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
module-x:location: Stockholm
module-y:vendor: Ericsson
entityIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
DecoratorDeleteExample:
decorators:
module-x:location: Stockholm
entityIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
relationshipIds:
- "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
EntityResponseExample:
value:
o-ran-smo-teiv-ran:NRCellDU:
- - id: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ - id: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
attributes:
cellLocalId: 91
nCI: 91
classifiers:
- Rural
sourceIds:
- - "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
- "urn:cmHandle:395221E080CCF0FD1924103B15873814"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
EntitiesResponseExample:
value:
sourceIds:
- "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,GNBCUUPFunction=10"
- "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
- o-ran-smo-teiv-ran:GNBCUUPFunction:
- id: "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,GNBCUUPFunction=13"
attributes:
sourceIds:
- "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,GNBCUUPFunction=13"
- "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
- o-ran-smo-teiv-ran:GNBCUUPFunction:
- id: "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,GNBCUUPFunction=14"
attributes:
sourceIds:
- "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,GNBCUUPFunction=14"
- "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
self:
href: "/domains/RAN/entities?offset=0&limit=3&targetFilter=/sourceIds;/attributes"
first:
value:
o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
- aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1"
- sourceIds: []
+ aSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ bSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1"
+ sourceIds:
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
RelationshipsResponseExample:
value:
items:
- o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=CA576F4716C36A1BD1C506DCB58418FC731858D3D3F856F536813A8C4D3F1CC21292E506815410E04496D709D96066EBC0E4890DEFC3789EDC4BD9C28DA1D52B"
- aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1"
- bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=1"
- sourceIds: []
+ aSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ bSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1"
+ sourceIds:
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=1"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
- o-ran-smo-teiv-ran:NRCELLDU_USES_NRSECTORCARRIER:
- id: "urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=11AB21444F9D7C6DAC7453879AB5586D294B495E43AC6F94750767DD624014DB7317E9A5EE73239876649D801037D6347355B19C5D97222B3C25000CF8A97C78"
- aSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=2"
- bSide: "urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRSectorCarrier=2"
- sourceIds: []
+ aSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
+ bSide: "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=2"
+ sourceIds:
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
+ - "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRSectorCarrier=2"
+ metadata:
+ reliabilityIndicator: "OK"
+ firstDiscovered: "2025-01-07T12:20:12.24523200Z"
+ lastModified: "2025-01-08T10:40:36.46156500Z"
self:
href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships?offset=0&limit=500"
first:
RelationshipTypesResponseExample:
value:
items:
- - name: "MANAGEDELEMENT_MANAGES_GNBDUFUNCTION"
+ - name: "MANAGEDELEMENT_MANAGES_ODUFUNCTION"
relationships:
- href: "/domains/RAN/relationship-types/MANAGEDELEMENT_MANAGES_GNBDUFUNCTION/relationships"
- - name: "GNBDUFUNCTION_PROVIDES_NRCELLDU"
+ href: "/domains/RAN/relationship-types/MANAGEDELEMENT_MANAGES_ODUFUNCTION/relationships"
+ - name: "ODUFUNCTION_PROVIDES_NRCELLDU"
relationships:
- href: "/domains/RAN/relationship-types/GNBDUFUNCTION_PROVIDES_NRCELLDU/relationships"
+ href: "/domains/RAN/relationship-types/ODUFUNCTION_PROVIDES_NRCELLDU/relationships"
- name: "NRCELLDU_USES_NRSECTORCARRIER"
relationships:
href: "/domains/RAN/relationship-types/NRCELLDU_USES_NRSECTORCARRIER/relationships"
or-teiv-yext:label 0.1.0;
}
or-teiv-yext:domain RAN;
- list GNBDUFunction {
+ list ODUFunction {
uses or-teiv-types:Top_Grp_Type;
key id;
container attributes {
type: static
providedMembers:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
- - o-ran-smo-teiv-ran:GNBDUFunction:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
+ - o-ran-smo-teiv-ran:ODUFunction:
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1
- o-ran-smo-teiv-oam:ManagedElement:
- id: urn:3gpp:dn:ManagedElement=1
- - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
- - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
- - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
- - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56
+ - o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU:
+ - id: urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624
+ - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION:
+ - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8
CreateDynamicGroupGetEntitiesByDomainPayloadExample:
value:
value:
items:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
- - o-ran-smo-teiv-ran:GNBDUFunction:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
+ - o-ran-smo-teiv-ran:ODUFunction:
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1
- o-ran-smo-teiv-oam:ManagedElement:
- id: urn:3gpp:dn:ManagedElement=1
- - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
- - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
- - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
- - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56
+ - o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU:
+ - id: urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624
+ - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION:
+ - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8
self:
href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/members?offset=0&limit=500"
first:
value:
items:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
- - o-ran-smo-teiv-ran:GNBDUFunction:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
+ - o-ran-smo-teiv-ran:ODUFunction:
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1
- o-ran-smo-teiv-oam:ManagedElement:
- id: urn:3gpp:dn:ManagedElement=1
- - o-ran-smo-teiv-ran:GNBDUFUNCTION_PROVIDES_NRCELLDU:
- - id: urn:o-ran:smo:teiv:sha512:GNBDUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418
- - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION:
- - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_GNBDUFUNCTION=9243B48F7D6A6C56
+ - o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU:
+ - id: urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624
+ - o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION:
+ - id: urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8
self:
href: "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000/provided-members?offset=0&limit=500"
first:
operation: "merge"
providedMembers:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
RemoveProvidedMembersPayloadExample:
value:
operation: "remove"
providedMembers:
- o-ran-smo-teiv-ran:NRCellDU:
- - id: urn:3gpp:dn:ManagedElement=1,GNBDUFunction=1,NRCellDU=1
+ - id: urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1
StaticGroupResponseExample:
value:
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-import static org.oran.smo.teiv.utils.TiesTestConstants.APPLICATION_JSON;
+import static org.oran.smo.teiv.utils.TeivTestConstants.APPLICATION_JSON;
import java.util.Objects;
import org.springframework.test.web.servlet.MvcResult;
import org.oran.smo.teiv.startup.SchemaHandler;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import jakarta.validation.ConstraintViolationException;
@ExtendWith(SpringExtension.class)
.andExpect(status().isOk())
.andReturn();
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_create_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_merge_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_delete_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_not_supported_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_create_parse_success_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_create_parse_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_merge_parse_success_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_merge_parse_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_delete_parse_success_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_delete_parse_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_create_persist_success_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_create_persist_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_merge_persist_success_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_merge_persist_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_delete_persist_success_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_delete_persist_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_create_parse_seconds"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_merge_parse_seconds"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_delete_parse_seconds"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_create_persist_seconds"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_merge_persist_seconds"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_ingestion_event_topology_delete_persist_seconds"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_create_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_merge_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_delete_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_not_supported_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_create_parse_success_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_create_parse_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_merge_parse_success_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_merge_parse_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_delete_parse_success_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_delete_parse_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_create_persist_success_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_create_persist_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_merge_persist_success_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_merge_persist_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_delete_persist_success_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_delete_persist_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_create_parse_seconds"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_merge_parse_seconds"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_delete_parse_seconds"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_create_persist_seconds"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_merge_persist_seconds"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_ingestion_event_topology_delete_persist_seconds"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_domain_types_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_entity_types_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_relationship_types_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_entity_by_id_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_entities_by_type_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_entities_by_domain_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_relationship_by_id_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_relationships_by_type_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_get_relationships_by_entity_id_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_domain_types_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_entity_types_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_relationship_types_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_entity_by_id_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_entities_by_type_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_entities_by_domain_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_relationship_by_id_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_relationships_by_type_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_get_relationships_by_entity_id_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_update_classifiers_fail_total"));
- Assertions.assertTrue(result.getResponse().getContentAsString().contains("ties_exposure_http_update_decorators_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_update_classifiers_fail_total"));
+ Assertions.assertTrue(result.getResponse().getContentAsString().contains("teiv_exposure_http_update_decorators_fail_total"));
// spotless:on
}
"getTopologyEntityTypes:/domains/RAN_LOGICAL/entity-types",
"getTopologyRelationshipTypes:/domains/RAN_LOGICAL/relationship-types" }, delimiter = ':')
public void testPaginationRelatedEndpoints(String method, String url) throws Exception {
- mvc.perform(get(TiesConstants.REQUEST_MAPPING + url).param("offset", "-1").accept(APPLICATION_JSON)).andExpect(
+ mvc.perform(get(TeivConstants.REQUEST_MAPPING + url).param("offset", "-1").accept(APPLICATION_JSON)).andExpect(
status().isBadRequest()).andExpect(result -> assertEquals(Objects.requireNonNull(result
.getResolvedException()).getMessage(), method + ".offset: must be greater than or equal to 0"));
- mvc.perform(get(TiesConstants.REQUEST_MAPPING + url).param("limit", "0").accept(APPLICATION_JSON)).andExpect(
+ mvc.perform(get(TeivConstants.REQUEST_MAPPING + url).param("limit", "0").accept(APPLICATION_JSON)).andExpect(
status().isBadRequest()).andExpect(result -> assertEquals(Objects.requireNonNull(result
.getResolvedException()).getMessage(), method + ".limit: must be greater than or equal to 1"));
- mvc.perform(get(TiesConstants.REQUEST_MAPPING + url).param("limit", "501").accept(APPLICATION_JSON)).andExpect(
+ mvc.perform(get(TeivConstants.REQUEST_MAPPING + url).param("limit", "501").accept(APPLICATION_JSON)).andExpect(
status().isBadRequest()).andExpect(result -> assertEquals(Objects.requireNonNull(result
.getResolvedException()).getMessage(), method + ".limit: must be less than or equal to 500"));
- mvc.perform(get(TiesConstants.REQUEST_MAPPING + url).param("offset", "0").accept(APPLICATION_JSON)).andExpect(
+ mvc.perform(get(TeivConstants.REQUEST_MAPPING + url).param("offset", "0").accept(APPLICATION_JSON)).andExpect(
result -> {
if (result.getResponse().getStatus() != HttpStatus.OK.value())
assertNotEquals(ConstraintViolationException.class, Objects.requireNonNull(result
.getResolvedException()).getClass());
});
- mvc.perform(get(TiesConstants.REQUEST_MAPPING + url).param("limit", "1").accept(APPLICATION_JSON)).andExpect(
+ mvc.perform(get(TeivConstants.REQUEST_MAPPING + url).param("limit", "1").accept(APPLICATION_JSON)).andExpect(
result -> {
if (result.getResponse().getStatus() != HttpStatus.OK.value())
assertNotEquals(ConstraintViolationException.class, Objects.requireNonNull(result
.getResolvedException()).getClass());
});
- mvc.perform(get(TiesConstants.REQUEST_MAPPING + url).param("limit", "500").accept(APPLICATION_JSON)).andExpect(
+ mvc.perform(get(TeivConstants.REQUEST_MAPPING + url).param("limit", "500").accept(APPLICATION_JSON)).andExpect(
result -> {
if (result.getResponse().getStatus() != HttpStatus.OK.value())
assertNotEquals(ConstraintViolationException.class, Objects.requireNonNull(result
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.mockito.ArgumentMatchers;
import org.mockito.MockedStatic;
import org.mockito.Mockito;
-import org.oran.smo.teiv.utils.KafkaTestExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.boot.test.system.CapturedOutput;
import org.springframework.boot.test.system.OutputCaptureExtension;
import org.springframework.kafka.test.EmbeddedKafkaBroker;
import org.oran.smo.teiv.service.kafka.KafkaFactory;
import org.oran.smo.teiv.startup.SchemaHandler;
import lombok.Getter;
-import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.bean.override.mockito.MockitoBean;
@ActiveProfiles({ "test", "ingestion" })
@SpringBootTest
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
-@TestExecutionListeners(listeners = KafkaTestExecutionListener.class, mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
@EmbeddedKafka
@ExtendWith(OutputCaptureExtension.class)
-public class DependentServiceAvailabilityKafkaTest {
-
+class DependentServiceAvailabilityKafkaTest {
@Value("${spring.embedded.kafka.brokers}")
@Getter
private String embeddedKafkaServer;
@Autowired
private DependentServiceAvailabilityKafka dependentServiceAvailabilityKafka;
- @MockBean
+ @MockitoBean
private SchemaHandler schemaHandler;
@BeforeEach
final NewTopic newTopic = new NewTopic("test_topic", 1, (short) 1);
mockedAdminClient.createTopics(List.of(newTopic));
- ListTopicsResult topicListresult = Mockito.spy(mockedAdminClient.listTopics());
- KafkaFuture<Set<String>> kafkaFutures = Mockito.spy(topicListresult.names());
- doReturn(topicListresult).when(spiedAdminClient).listTopics();
- doReturn(kafkaFutures).when(topicListresult).names();
+ ListTopicsResult topicListResult = Mockito.spy(mockedAdminClient.listTopics());
+ KafkaFuture<Set<String>> kafkaFutures = Mockito.spy(topicListResult.names());
+ doReturn(topicListResult).when(spiedAdminClient).listTopics();
+ doReturn(kafkaFutures).when(topicListResult).names();
doThrow(InterruptedException.class).when(kafkaFutures).get();
MockedStatic<Admin> mockedStaticAdminClient = Mockito.mockStatic(Admin.class);
assertThrows(UnsatisfiedExternalDependencyException.class,
spiedDependentServiceAvailabilityKafka::isServiceAvailable);
- Mockito.reset(spiedAdminClient, topicListresult, kafkaFutures, spiedDependentServiceAvailabilityKafka);
+ Mockito.reset(spiedAdminClient, topicListResult, kafkaFutures, spiedDependentServiceAvailabilityKafka);
mockedStaticAdminClient.close();
+ mockedAdminClient.close();
+ spiedAdminClient.close();
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@AutoConfigureMockMvc
@SpringBootTest(properties = { "management.endpoint.health.probes.enabled=true",
- "management.endpoint.health.group.readiness.include=readinessState,tiesExposure" })
+ "management.endpoint.health.group.readiness.include=readinessState,teivExposure" })
@ActiveProfiles({ "test", "exposure" })
-class TiesExposureHealthIndicatorTest {
+class TeivExposureHealthIndicatorTest {
private final String readinessProbePath = "/actuator/health/readiness";
private final String livenessProbePath = "/actuator/health/liveness";
- private final String tiesExposureProbePath = "/actuator/health/tiesExposure";
+ private final String teivExposureProbePath = "/actuator/health/teivExposure";
@Autowired
private MockMvc mvc;
content().json("{'status' : 'UP'}"));
mvc.perform(get(livenessProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(
content().json("{'status' : 'UP'}"));
- mvc.perform(get(tiesExposureProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
+ mvc.perform(get(teivExposureProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
.andExpect(content().json(String.format("{'status':'UP','details':{'UP': '%s is UP and Healthy.'}}",
SERVICE_NAME)));
}
content().json("{'status' : 'UP'}"));
mvc.perform(get(readinessProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().is5xxServerError())
.andExpect(content().json("{'status' : 'DOWN'}"));
- mvc.perform(get(tiesExposureProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status()
+ mvc.perform(get(teivExposureProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status()
.is5xxServerError()).andExpect(content().json(String.format(
"{'status' : 'DOWN', 'details':{'Error':'%s is DOWN because:%s'}}", SERVICE_NAME, message)))
.andReturn();
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@AutoConfigureMockMvc
@SpringBootTest(properties = { "management.endpoint.health.probes.enabled=true",
- "management.endpoint.health.group.readiness.include=readinessState,tiesGroups" })
+ "management.endpoint.health.group.readiness.include=readinessState,teivGroups" })
@ActiveProfiles({ "test", "groups" })
-class TiesGroupsHealthIndicatorTest {
+class TeivGroupsHealthIndicatorTest {
private final String readinessProbePath = "/actuator/health/readiness";
private final String livenessProbePath = "/actuator/health/liveness";
- private final String tiesGroupsProbePath = "/actuator/health/tiesGroups";
+ private final String teivGroupsProbePath = "/actuator/health/teivGroups";
@Autowired
private MockMvc mvc;
content().json("{'status' : 'UP'}"));
mvc.perform(get(livenessProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(
content().json("{'status' : 'UP'}"));
- mvc.perform(get(tiesGroupsProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(
+ mvc.perform(get(teivGroupsProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(
content().json(String.format("{'status':'UP','details':{'UP': '%s is UP and Healthy.'}}", SERVICE_NAME)));
}
content().json("{'status' : 'UP'}"));
mvc.perform(get(readinessProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().is5xxServerError())
.andExpect(content().json("{'status' : 'DOWN'}"));
- mvc.perform(get(tiesGroupsProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().is5xxServerError())
+ mvc.perform(get(teivGroupsProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().is5xxServerError())
.andExpect(content().json(String.format("{'status' : 'DOWN', 'details':{'Error':'%s is DOWN because:%s'}}",
SERVICE_NAME, message))).andReturn();
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@AutoConfigureMockMvc
@SpringBootTest(properties = { "management.endpoint.health.probes.enabled=true",
- "management.endpoint.health.group.readiness.include=readinessState,tiesIngestion" })
+ "management.endpoint.health.group.readiness.include=readinessState,teivIngestion" })
@ActiveProfiles({ "test", "ingestion" })
-class TiesIngestionHealthIndicatorTest {
+class TeivIngestionHealthIndicatorTest {
private final String readinessProbePath = "/actuator/health/readiness";
private final String livenessProbePath = "/actuator/health/liveness";
- private final String tiesIngestionProbePath = "/actuator/health/tiesIngestion";
+ private final String teivIngestionProbePath = "/actuator/health/teivIngestion";
@Autowired
private MockMvc mvc;
content().json("{'status' : 'UP'}"));
mvc.perform(get(livenessProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andExpect(
content().json("{'status' : 'UP'}"));
- mvc.perform(get(tiesIngestionProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
+ mvc.perform(get(teivIngestionProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk())
.andExpect(content().json(String.format("{'status':'UP','details':{'UP': '%s is UP and Healthy.'}}",
SERVICE_NAME)));
}
content().json("{'status' : 'UP'}"));
mvc.perform(get(readinessProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status().is5xxServerError())
.andExpect(content().json("{'status' : 'DOWN'}"));
- mvc.perform(get(tiesIngestionProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status()
+ mvc.perform(get(teivIngestionProbePath).contentType(MediaType.APPLICATION_JSON)).andExpect(status()
.is5xxServerError()).andExpect(content().json(String.format(
"{'status' : 'DOWN', 'details':{'Error':'%s is DOWN because:%s'}}", SERVICE_NAME, message)))
.andReturn();
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
try {
loadModels();
container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/00_init-oran-smo-teiv-data.sql",
- "--set=pguser=\"test\";");
+ "--set=pguser=test");
container.execInContainer("psql", "-U", "test", "-w", "-f",
- "/pgsqlschema/02_init-oran-smo-teiv-consumer-data.sql", "--set=pguser=\"test\";");
+ "/pgsqlschema/02_init-oran-smo-teiv-consumer-data.sql", "--set=pguser=test");
container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/03_init-oran-smo-teiv-groups.sql",
- "--set=pguser=\"test\";");
+ "--set=pguser=test");
} catch (UnsupportedOperationException | IOException | InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
try {
loadData();
container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/consumer-data.sql",
- "--set=pguser=\"test\";");
+ "--set=pguser=test");
} catch (UnsupportedOperationException | IOException | InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
public static void loadSampleGroupsData() {
try {
loadSampleData();
- container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/groups.sql",
- "--set=pguser=\"test\";");
+ container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/groups.sql", "--set=pguser=test");
} catch (UnsupportedOperationException | IOException | InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
public static void loadIngestionTestData() {
try {
container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/ingestion-test-data.sql",
- "--set=pguser=\"test\";");
+ "--set=pguser=test");
container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/ingestion-test-model.sql",
- "--set=pguser=\"test\";");
+ "--set=pguser=test");
} catch (UnsupportedOperationException | IOException | InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
public static void loadData() {
try {
- container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/data.sql", "--set=pguser=\"test\";");
+ container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/data.sql", "--set=pguser=test");
+ loadUpdateData();
} catch (UnsupportedOperationException | IOException | InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
public static void loadModels() {
try {
container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/01_init-oran-smo-teiv-model.sql",
- "--set=pguser=\"test\";");
- container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/model.sql", "--set=pguser=\"test\";");
+ "--set=pguser=test");
+ container.execInContainer("psql", "-U", "test", "-w", "-f", "/pgsqlschema/model.sql", "--set=pguser=test");
} catch (UnsupportedOperationException | IOException | InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
public static void loadValidationTestData() {
try {
container.execInContainer("psql", "-U", "test", "-w", "-f",
- "/pgsqlschema/test-data-for-ingestion-validation.sql", "--set=pguser=\"test\";");
+ "/pgsqlschema/test-data-for-ingestion-validation.sql", "--set=pguser=test");
container.execInContainer("psql", "-U", "test", "-w", "-f",
- "/pgsqlschema/test-model-for-ingestion-validation.sql", "--set=pguser=\"test\";");
+ "/pgsqlschema/test-model-for-ingestion-validation.sql", "--set=pguser=test");
} catch (UnsupportedOperationException | IOException | InterruptedException e) {
throw new RuntimeException(e.getMessage());
}
}
+
+ public static void loadUpdateData() {
+ // try {
+ // container.execInContainer("psql", "-U", "test", "-w", "-f",
+ // "/pgsqlschema/04_init-oran-smo-teiv-data-update.sql", "--set=pguser=\"test\"",
+ // "--set=adapterId=namespace-oran-smo-ran-topology-adapter",
+ // "--set=adapterHashedId=17a7ac8c7522bc5a27e5d095088ec1a9c8b2a7da", "--set=upgradeTime=" + OffsetDateTime
+ // .now(ZoneOffset.UTC));
+ // } catch (UnsupportedOperationException | IOException | InterruptedException e) {
+ // throw new RuntimeException(e.getMessage());
+ // }
+ }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.List;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_MODEL_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_MODEL_SCHEMA;
@AutoConfigureMockMvc
@SpringBootTest
String url = postgresSQLContainer.getJdbcUrl();
DataSource ds = DataSourceBuilder.create().url(url).username("test").password("test").build();
DSLContext dslContext = DSL.using(ds, SQLDialect.POSTGRES);
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA, TIES_CONSUMER_DATA_SCHEMA, TIES_MODEL_SCHEMA),
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA, TEIV_CONSUMER_DATA_SCHEMA, TEIV_MODEL_SCHEMA),
dslContext);
TestPostgresqlContainer.loadModels();
TestPostgresqlContainer.loadSampleData();
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.table;
import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.CONSUMER_DATA_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.REL_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesTestConstants.KAFKA_RETRY_INTERVAL_10_MS;
-import static org.oran.smo.teiv.utils.TiesTestConstants.SPRING_BOOT_SERVER_HOST;
-import static org.oran.smo.teiv.utils.TiesTestConstants.SPRING_BOOT_SERVER_PORT;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.CONSUMER_DATA_PREFIX;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.REL_PREFIX;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivTestConstants.KAFKA_RETRY_INTERVAL_10_MS;
+import static org.oran.smo.teiv.utils.TeivTestConstants.SPRING_BOOT_SERVER_HOST;
+import static org.oran.smo.teiv.utils.TeivTestConstants.SPRING_BOOT_SERVER_PORT;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.kafka.test.context.EmbeddedKafka;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.oran.smo.teiv.api.model.OranTeivClassifier;
import org.oran.smo.teiv.api.model.OranTeivClassifier.OperationEnum;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.PostgresSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
import org.oran.smo.teiv.startup.SchemaHandler;
import org.oran.smo.teiv.utils.JooqTypeConverter;
@EmbeddedKafka
-@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@ActiveProfiles({ "test", "exposure" })
@SpringBootTest(properties = { SPRING_BOOT_SERVER_HOST, SPRING_BOOT_SERVER_PORT, KAFKA_RETRY_INTERVAL_10_MS })
private static DSLContext readDataDslContext;
private static final String ENTITY_TYPE = "ODUFunction";
- private static final String TABLE_NAME = String.format(TIES_DATA, "o-ran-smo-teiv-ran_ODUFunction");
+ private static final String TABLE_NAME = String.format(TEIV_DATA, "o-ran-smo-teiv-ran_ODUFunction");
private static final String ENTITY_ID = "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16";
private static final String RELATIONSHIP_ID = "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=D67357F682531C7B068486313B0FDAC3E719A166229520196FB9CE917E0236754226A5BCBF7BB7240E516D7ED3FEA852855EC3F121DD4BAFEC5646F2A37F57EE";
private static final String RELATIONSHIP_TYPE = "MANAGEDELEMENT_MANAGES_ODUFUNCTION";
@BeforeEach
public void setupEach() {
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA, TIES_CONSUMER_DATA_SCHEMA), writeDataDslContext);
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA, TEIV_CONSUMER_DATA_SCHEMA), writeDataDslContext);
TestPostgresqlContainer.loadSampleData();
}
assertThatThrownBy(() -> classifiersService.update(OranTeivClassifier.builder().classifiers(classifiersToMerge)
.entityIds(List.of(ENTITY_ID)).relationshipIds(List.of(RELATIONSHIP_ID)).operation(OperationEnum.MERGE)
- .build())).isInstanceOf(TiesException.class);
+ .build())).isInstanceOf(TeivException.class);
}
@Test
assertThatThrownBy(() -> classifiersService.update(OranTeivClassifier.builder().classifiers(classifiersToDelete)
.entityIds(List.of("WRONG_ID")).relationshipIds(Collections.emptyList()).operation(OperationEnum.DELETE)
- .build())).isInstanceOf(TiesException.class);
+ .build())).isInstanceOf(TeivException.class);
}
@Test
assertThatThrownBy(() -> classifiersService.update(OranTeivClassifier.builder().classifiers(classifiersToDelete)
.entityIds(Collections.emptyList()).relationshipIds(List.of("WRONG_ID")).operation(OperationEnum.DELETE)
- .build())).isInstanceOf(TiesException.class);
+ .build())).isInstanceOf(TeivException.class);
}
@Test
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
-import static org.oran.smo.teiv.utils.TiesTestConstants.APPLICATION_JSON;
+import static org.oran.smo.teiv.utils.TeivTestConstants.APPLICATION_JSON;
import java.util.Collections;
import java.util.function.Supplier;
import org.oran.smo.teiv.CustomMetrics;
import org.oran.smo.teiv.api.model.OranTeivClassifier;
import org.oran.smo.teiv.api.model.OranTeivDecorator;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.audit.LoggerHandler;
import org.oran.smo.teiv.exposure.data.api.DataService;
import org.oran.smo.teiv.exposure.data.rest.controller.DataController;
@Test
void testGetRelationshipsByEntityIdFailMetrics() {
when(mockedDataService.getAllRelationshipsForObjectId(eq(DOMAIN_NAME), eq(ENTITY_NAME), eq(ENTITY_ID), anyString(),
- anyString(), any(RequestDetails.class))).thenThrow(TiesException.class);
+ anyString(), any(RequestDetails.class))).thenThrow(TeivException.class);
assertMetrics(() -> dataController.getAllRelationshipsForEntityId(APPLICATION_JSON, DOMAIN_NAME, ENTITY_NAME,
ENTITY_ID, "", "", 0, 1), underTest.getNumUnsuccessfullyExposedRelationshipsByEntityId()::count);
}
@Test
void testGetEntityByIdFailMetrics() {
- when(mockedDataService.getEntityById(ENTITY_NAME, ENTITY_ID)).thenThrow(TiesException.class);
+ when(mockedDataService.getEntityById(ENTITY_NAME, ENTITY_ID)).thenThrow(TeivException.class);
assertMetrics(() -> dataController.getTopologyById(APPLICATION_JSON, DOMAIN_NAME, ENTITY_NAME, ENTITY_ID), underTest
.getNumUnsuccessfullyExposedEntityById()::count);
}
@Test
void testGetEntitiesByTypeFailMetrics() {
when(mockedDataService.getTopologyByType(anyString(), eq(ENTITY_NAME), anyString(), anyString(), any(
- RequestDetails.class))).thenThrow(TiesException.class);
+ RequestDetails.class))).thenThrow(TeivException.class);
assertMetrics(() -> dataController.getTopologyByEntityTypeName(APPLICATION_JSON, DOMAIN_NAME, ENTITY_NAME, "", "",
0, 1), underTest.getNumUnsuccessfullyExposedEntitiesByType()::count);
}
@Test
void testGetEntitiesByDomainFailMetrics() {
when(mockedDataService.getEntitiesByDomain(eq(DOMAIN_NAME), anyString(), anyString(), any(RequestDetails.class)))
- .thenThrow(TiesException.class);
+ .thenThrow(TeivException.class);
assertMetrics(() -> dataController.getEntitiesByDomain(APPLICATION_JSON, DOMAIN_NAME, "", "", 0, 1), underTest
.getNumUnsuccessfullyExposedEntitiesByDomain()::count);
}
@Test
void testGetRelationshipByIdFailMetrics() {
- when(mockedDataService.getRelationshipById(RELATION_TYPE, ENTITY_ID)).thenThrow(TiesException.class);
+ when(mockedDataService.getRelationshipById(RELATION_TYPE, ENTITY_ID)).thenThrow(TeivException.class);
assertMetrics(() -> dataController.getRelationshipById(APPLICATION_JSON, DOMAIN_NAME, RELATION_TYPE, ENTITY_ID),
underTest.getNumUnsuccessfullyExposedRelationshipById()::count);
}
@Test
void testGetRelationshipsByTypeFailMetrics() {
when(mockedDataService.getRelationshipsByType(anyString(), eq(RELATION_TYPE), anyString(), anyString(), any(
- RequestDetails.class))).thenThrow(TiesException.class);
+ RequestDetails.class))).thenThrow(TeivException.class);
assertMetrics(() -> dataController.getRelationshipsByType(APPLICATION_JSON, DOMAIN_NAME, RELATION_TYPE, "", "", 0,
1), underTest.getNumUnsuccessfullyExposedRelationshipsByType()::count);
}
@Test
void testGetRelationshipTypesFailMetrics() {
when(mockedDataService.getTopologyRelationshipTypes(eq(DOMAIN_NAME), any(RequestDetails.class))).thenThrow(
- TiesException.class);
+ TeivException.class);
assertMetrics(() -> dataController.getTopologyRelationshipTypes(APPLICATION_JSON, DOMAIN_NAME, 0, 1), underTest
.getNumUnsuccessfullyExposedRelationshipTypes()::count);
}
@Test
void testGetDomainTypesFailMetrics() {
- when(mockedDataService.getDomainTypes(any(RequestDetails.class))).thenThrow(TiesException.class);
+ when(mockedDataService.getDomainTypes(any(RequestDetails.class))).thenThrow(TeivException.class);
assertMetrics(() -> dataController.getAllDomains(APPLICATION_JSON, 0, 1), underTest
.getNumUnsuccessfullyExposedDomainTypes()::count);
}
@Test
void testGetEntityTypesFailMetrics() {
when(mockedDataService.getTopologyEntityTypes(eq(DOMAIN_NAME), any(RequestDetails.class))).thenThrow(
- TiesException.class);
+ TeivException.class);
assertMetrics(() -> dataController.getTopologyEntityTypes(APPLICATION_JSON, DOMAIN_NAME, 0, 1), underTest
.getNumUnsuccessfullyExposedEntityTypes()::count);
}
@Test
void testUpdateClassifiersFailMetrics() {
- doThrow(TiesException.invalidClassifiersException(Collections.emptyList())).when(mockedClassifiersService).update(
+ doThrow(TeivException.invalidClassifiersException(Collections.emptyList())).when(mockedClassifiersService).update(
any(OranTeivClassifier.class));
assertMetrics(() -> classifiersRestController.updateClassifier(APPLICATION_JSON, APPLICATION_JSON,
OranTeivClassifier.builder().operation(OranTeivClassifier.OperationEnum.MERGE).build()), underTest
@Test
void testUpdateDecoratorsFailMetrics() {
- doThrow(TiesException.invalidClassifiersException(Collections.emptyList())).when(mockedDecoratorsService).update(
+ doThrow(TeivException.invalidClassifiersException(Collections.emptyList())).when(mockedDecoratorsService).update(
any(OranTeivDecorator.class));
assertMetrics(() -> decoratorsRestController.updateDecorator(APPLICATION_JSON, APPLICATION_JSON, OranTeivDecorator
.builder().operation(OranTeivDecorator.OperationEnum.MERGE).build()), underTest
}
private <T> void assertMetrics(Supplier<T> controllerMethod, Supplier<T> failerSupplier) {
- Assertions.assertThrowsExactly(TiesException.class, controllerMethod::get);
+ Assertions.assertThrowsExactly(TeivException.class, controllerMethod::get);
Assertions.assertEquals(1.0, failerSupplier.get());
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.table;
-import static org.oran.smo.teiv.utils.TiesConstants.CONSUMER_DATA_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.DECORATORS;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.REL_PREFIX;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesTestConstants.KAFKA_RETRY_INTERVAL_10_MS;
-import static org.oran.smo.teiv.utils.TiesTestConstants.SPRING_BOOT_SERVER_HOST;
-import static org.oran.smo.teiv.utils.TiesTestConstants.SPRING_BOOT_SERVER_PORT;
+import static org.oran.smo.teiv.utils.TeivConstants.CONSUMER_DATA_PREFIX;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.REL_PREFIX;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivTestConstants.KAFKA_RETRY_INTERVAL_10_MS;
+import static org.oran.smo.teiv.utils.TeivTestConstants.SPRING_BOOT_SERVER_HOST;
+import static org.oran.smo.teiv.utils.TeivTestConstants.SPRING_BOOT_SERVER_PORT;
import java.util.Collections;
import java.util.List;
import org.oran.smo.teiv.startup.SchemaCleanUpHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import lombok.Getter;
import org.oran.smo.teiv.api.model.OranTeivDecorator;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.PostgresSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
import org.oran.smo.teiv.startup.SchemaHandler;
import org.oran.smo.teiv.utils.JooqTypeConverter;
-@DirtiesContext(classMode = ClassMode.BEFORE_CLASS)
@EmbeddedKafka
@ActiveProfiles({ "test", "exposure" })
@SpringBootTest(properties = { SPRING_BOOT_SERVER_HOST, SPRING_BOOT_SERVER_PORT, KAFKA_RETRY_INTERVAL_10_MS })
private KafkaConsumer<String, String> testConsumer;
- private static final String TABLE_NAME = String.format(TIES_DATA, "o-ran-smo-teiv-ran_ODUFunction");
+ private static final String TABLE_NAME = String.format(TEIV_DATA, "o-ran-smo-teiv-ran_ODUFunction");
private static final String ENTITY_ID = "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16";
private static final String ENTITY_TYPE = "ODUFunction";
@BeforeEach
public void setupEach() {
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA, TIES_CONSUMER_DATA_SCHEMA), writeDataDslContext);
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA, TEIV_CONSUMER_DATA_SCHEMA), writeDataDslContext);
TestPostgresqlContainer.loadSampleData();
Supplier<String> brokers = this::getEmbeddedKafkaServer;
testConsumer = createConsumerForTest(getEmbeddedKafkaServer());
assertThatThrownBy(() -> decoratorsService.update(OranTeivDecorator.builder().decorators(decoratorsToMerge)
.entityIds(List.of(ENTITY_ID)).relationshipIds(List.of(RELATIONSHIP_ID)).operation(
- OranTeivDecorator.OperationEnum.MERGE).build())).isInstanceOf(TiesException.class);
+ OranTeivDecorator.OperationEnum.MERGE).build())).isInstanceOf(TeivException.class);
}
@Test
assertThatThrownBy(() -> decoratorsService.update(OranTeivDecorator.builder().decorators(decoratorsToMerge)
.entityIds(List.of(ENTITY_ID)).relationshipIds(List.of(RELATIONSHIP_ID)).operation(
- OranTeivDecorator.OperationEnum.MERGE).build())).isInstanceOf(TiesException.class);
+ OranTeivDecorator.OperationEnum.MERGE).build())).isInstanceOf(TeivException.class);
}
@Test
assertThatThrownBy(() -> decoratorsService.update(OranTeivDecorator.builder().decorators(decoratorsToDelete)
.entityIds(List.of("WRONG_ID")).relationshipIds(Collections.emptyList()).operation(
- OranTeivDecorator.OperationEnum.DELETE).build())).isInstanceOf(TiesException.class);
+ OranTeivDecorator.OperationEnum.DELETE).build())).isInstanceOf(TeivException.class);
}
@Test
assertThatThrownBy(() -> decoratorsService.update(OranTeivDecorator.builder().decorators(decoratorsToDelete)
.entityIds(Collections.emptyList()).relationshipIds(List.of("WRONG_ID")).operation(
- OranTeivDecorator.OperationEnum.DELETE).build())).isInstanceOf(TiesException.class);
+ OranTeivDecorator.OperationEnum.DELETE).build())).isInstanceOf(TeivException.class);
}
@Test
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.exposure.spi.impl;
-import static org.oran.smo.teiv.utils.TiesConstants.MODULE_REFERENCE;
+import static org.oran.smo.teiv.utils.TeivConstants.MODULE_REFERENCE;
import static org.assertj.core.api.Assertions.assertThat;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.table;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_MODEL;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_MODEL;
import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.oran.smo.teiv.schema.EntityType;
+import org.oran.smo.teiv.schema.RelationType;
import org.oran.smo.teiv.schema.SchemaRegistryException;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Configuration;
import org.oran.smo.teiv.exposure.spi.ModelRepository;
import org.oran.smo.teiv.exposure.spi.Module;
import org.oran.smo.teiv.exposure.spi.ModuleStatus;
-import org.oran.smo.teiv.exposure.tiespath.refiner.BasePathRefinement;
+import org.oran.smo.teiv.exposure.teivpath.refiner.BasePathRefinement;
import org.oran.smo.teiv.schema.PostgresSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
import org.oran.smo.teiv.schema.SchemaRegistry;
@BeforeEach
public void deleteAll() {
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA, TIES_CONSUMER_DATA_SCHEMA), writeDataDslContext);
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA, TEIV_CONSUMER_DATA_SCHEMA), writeDataDslContext);
TestPostgresqlContainer.loadSampleData();
}
schemaByName = modelRepository.getConsumerModuleByName(moduleName);
Assertions.assertTrue(schemaByName.isPresent());
- modelRepository.doesModuleExists(TIES_MODEL, moduleName);
- modelRepository.doesModuleExists(TIES_CONSUMER_DATA, moduleName);
+ modelRepository.doesModuleExists(TEIV_MODEL, moduleName);
+ modelRepository.doesModuleExists(TEIV_CONSUMER_DATA, moduleName);
modelRepository.updateModuleStatus(moduleName, ModuleStatus.DELETING);
final @NotNull Record1<Object> status = readDataDslContext.select(field("status")).from(table(String.format(
- TIES_CONSUMER_DATA, MODULE_REFERENCE))).where(field("name").eq(moduleName)).fetchAny();
+ TEIV_CONSUMER_DATA, MODULE_REFERENCE))).where(field("name").eq(moduleName)).fetchAny();
Assertions.assertEquals(ModuleStatus.DELETING.name(), status.get("status"));
"o-ran-smo-teiv-ran", "NRSectorCarrier"), Set.of("ocucp-ocuup-model:Weekend")));
}
+ @Test
+ void isTopologyExist_entityTest() throws SchemaRegistryException {
+ EntityType entityType = SchemaRegistry.getEntityTypeByDomainAndName("RAN", "NRCellDU").get(0);
+ String entityId = "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=91";
+ Assertions.assertTrue(underTest.isTopologyExist(entityType, entityId),
+ "That's strange, the result should have been true as this id in DB dataset: " + entityId);
+ String nonExistentEntityId = "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=911";
+ Assertions.assertFalse(underTest.isTopologyExist(entityType, nonExistentEntityId),
+ "Result should have been false as the entity id is not in DB data set: " + nonExistentEntityId);
+ }
+
+ @Test
+ void isTopologyExist_relationshipTest() throws SchemaRegistryException {
+ RelationType relationType = SchemaRegistry.getRelationTypeByDomainAndName("RAN",
+ "NRSECTORCARRIER_USES_ANTENNACAPABILITY").get(0);
+ String aSideRelationshipId = "urn:o-ran:smo:teiv:sha512:NRSECTORCARRIER_USES_ANTENNACAPABILITY=11EDFC31E2BE240D3CB15DB1A3FA3B78C828524BC8FCA3365A615129A61A627C21DA8EBF6DD788CDBDEC668344D1F79A371749083D6AE04DDDD57CB4FA8C3ECB";
+ Assertions.assertTrue(underTest.isTopologyExist(relationType, aSideRelationshipId),
+ "That's strange, the result should have been true as this id in DB dataset: " + aSideRelationshipId);
+
+ relationType = SchemaRegistry.getRelationTypeByDomainAndName("REL_OAM_RAN", "MANAGEDELEMENT_MANAGES_OCUUPFUNCTION")
+ .get(0);
+ String bSideRelationshipId = "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=5255F37093F8EB3763CE5F017DFC1E162B44FC9DF6E13744C04DC1832C5E754AB7BE440DBE1187EE8EEE42FD04E652BB8148655C6F977B1FFDDA54FE87C6411A";
+ Assertions.assertTrue(underTest.isTopologyExist(relationType, bSideRelationshipId),
+ "That's strange, the result should have been true as this id in DB dataset: " + bSideRelationshipId);
+
+ relationType = SchemaRegistry.getRelationTypeByDomainAndName("REL_EQUIPMENT_RAN",
+ "ANTENNAMODULE_SERVES_ANTENNACAPABILITY").get(0);
+ String manyToManyRelationshipId = "urn:o-ran:smo:teiv:sha512:ANTENNAMODULE_SERVES_ANTENNACAPABILITY=ABD52B030DF1169F9F41C898913EF30F7BB5741F53352F482310B280C90AC569B7D31D52A2BB41F1F0099AE1EDD56CACF0B285D145A5584D376DD45DED1E2D65";
+ Assertions.assertTrue(underTest.isTopologyExist(relationType, manyToManyRelationshipId),
+ "That's strange, the result should have been true as this id in DB dataset: " + manyToManyRelationshipId);
+
+ String nonExistentRelationshipId = "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=5255F37093F8EB3763CE5F017DFC1E162B44FC9DF6E13744C04DC1832C5E754AB7BE440DBE1187EE8EEE42FD04E652BB8148655C6F977B1FFDDA54FE87C6411A";
+ Assertions.assertFalse(underTest.isTopologyExist(relationType, nonExistentRelationshipId),
+ "Result should have been false as the relationship id is not in DB data set: " + nonExistentRelationshipId);
+ }
+
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@Test
void testCreateProperties() {
Record record = DSL.using(SQLDialect.POSTGRES).newRecord(field(
- "ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU\""), field(
- "ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_FK_provided-by-gnbduFunction\""), field(
- "ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"id\""), field(
- "ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRCELLDU\""))
+ "teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_ID_GNBDUFUNCTION_PROVIDES_NRCELLDU\""), field(
+ "teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_FK_provided-by-gnbduFunction\""), field(
+ "teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"id\""), field(
+ "teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_CD_sourceIds_GNBDUFUNCTION_PROVIDES_NRCELLDU\""))
.values("urn:base64:R05CRFVGdW5jdGlvbjo2QTBENUFBMjhGNzcwQzk5NDFCNzRFQkU1NzYxMUFFMTpQUk9WSURFUzpOUkNlbGxEVTowMDAxNjFCMDE0QzMyMDEwNkE5RDZCMTQxN0Y4RUIwQQ==",
"6A0D5AA28F770C9941B74EBE57611AE1", "000161B014C320106A9D6B1417F8EB0A", List.of("sid1", "sid2"));
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
-import static org.oran.smo.teiv.utils.TiesConstants.ITEM;
+import static org.oran.smo.teiv.utils.TeivConstants.ITEM;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.field;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.HashSet;
import java.util.List;
-import org.oran.smo.teiv.exposure.tiespath.resolver.ResolverDataType;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.exposure.teivpath.resolver.ResolverDataType;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.jooq.Condition;
import org.oran.smo.teiv.schema.SchemaLoaderException;
class DtoToJooqTest {
-
private static final String OCUCP_FUNCTION = "OCUCPFunction";
private static final String ODU_FUNCTION = "ODUFunction";
private static final String ANTENNA_CAPABILITY = "AntennaCapability";
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION\" is not null\n" +
- " or ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION\" is not null\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION\" is not null\n" +
+ " or teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION\" is not null\n")
.toString(), olb1.getCondition().toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"nRPCI\" = 'ABC789'\n" +
- " or ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"nRPCI\" like (('%' || replace(\n" +
+ " teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"nRPCI\" = 'ABC789'\n" +
+ " or teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"nRPCI\" like (('%' || replace(\n" +
" replace(\n" +
" replace('ABC789', '!', '!!'),\n" +
" '%',\n" +
" '_',\n" +
" '!_'\n" +
" )) || '%') escape '!'\n" +
- " or ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"nRPCI\" is not null\n")
+ " or teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"nRPCI\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"gNBId\" = 1\n" +
- " or ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"gNBId\" = 2\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"gNBId\" = 1\n" +
+ " or teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"gNBId\" = 2\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"decimalColumn\" = 2.5\n" +
- " or ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"decimalColumn\" = 15.25\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"decimalColumn\" = 2.5\n" +
+ " or teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"decimalColumn\" = 15.25\n")
.toString(), actualCondition.toString());
// spotless:on
}
.container(ContainerType.ATTRIBUTES).leaf("geoColumn").queryFunction(QueryFunction.EQ).parameter(
"POINT(39.4019881 67.9419888").dataType(DataType.GEOGRAPHIC).build();
// spotless:off
- assertEquals(condition("ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"geoColumn\" = st_geomfromtext('point(39.4019881 67.9419888)')")
+ assertEquals(condition("teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"geoColumn\" = st_geomfromtext('point(39.4019881 67.9419888)')")
.toString(), new ScopeLogicalBlock(valid1).getCondition().toString());
- assertEquals(condition("ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"geoColumn\" = st_geomfromtext('POINT(39.4019881 67.9419888)')")
+ assertEquals(condition("teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"geoColumn\" = st_geomfromtext('POINT(39.4019881 67.9419888)')")
.toString(), new ScopeLogicalBlock(valid2).getCondition().toString());
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidContains)::getCondition);
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidCoordinate0)::getCondition);
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidCoordinate1)::getCondition);
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidCoordinate2)::getCondition);
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidCoordinate3)::getCondition);
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidFormat1)::getCondition);
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidFormat2)::getCondition);
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidFormat3)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidContains)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidCoordinate0)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidCoordinate1)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidCoordinate2)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidCoordinate3)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidFormat1)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidFormat2)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidFormat3)::getCondition);
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" -> 'mnc' = '\"789\"'\n" +
- " or ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" ->> 'mcc' like '%456%'\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" -> 'mnc' = '\"789\"'\n" +
+ " or teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" ->> 'mcc' like '%456%'\n")
.toString(), actualCondition.toString());
- assertThrows(TiesPathException.class, new ScopeLogicalBlock(invalidQueryFunction)::getCondition);
+ assertThrows(TeivPathException.class, new ScopeLogicalBlock(invalidQueryFunction)::getCondition);
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" -> 'mcc' -> 'mcca' = '\"789\"'\n" +
- " or ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" -> 'mcc' -> 'mccb' = '789'\n" +
- " or ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" -> 'mcc' ->> 'mcca' like '%789%'\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" -> 'mcc' -> 'mcca' = '\"789\"'\n" +
+ " or teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" -> 'mcc' -> 'mccb' = '789'\n" +
+ " or teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"dUpLMNId\" -> 'mcc' ->> 'mcca' like '%789%'\n")
.toString(), actualCondition.toString());
// spotless:on
}
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"'POINT (12.3426 45.24568))', 500").resolverDataType(ResolverDataType.STRING).queryFunction(
QueryFunction.WITHIN_METERS).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"'POINT (12.3426 45.24568 345.6)', 500").resolverDataType(ResolverDataType.STRING).queryFunction(
QueryFunction.WITHIN_METERS).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"'POINT (12.3426 45.)', 500").resolverDataType(ResolverDataType.STRING).queryFunction(
QueryFunction.WITHIN_METERS).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"'POINT (12.3426)', 500").resolverDataType(ResolverDataType.STRING).queryFunction(
QueryFunction.WITHIN_METERS).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"'(12.3426 345.533)', 500").resolverDataType(ResolverDataType.STRING).queryFunction(
QueryFunction.WITHIN_METERS).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"POLYGON((12.3426 45.24568, 13.3426 45.24568, 12.3426 44.24568, 13.3426 44.24568,))")
.resolverDataType(ResolverDataType.STRING).queryFunction(QueryFunction.COVERED_BY).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"POLYGON(12.3426 45.24568, 13.3426 45.24568, 12.3426 44.24568, 13.3426 44.)").resolverDataType(
ResolverDataType.STRING).queryFunction(QueryFunction.COVERED_BY).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"POLYGON(12.3426 45.24568, 13.3426 45.24568, 12.3426 44.24568, 13.3426 44.24568 34.63)")
.resolverDataType(ResolverDataType.STRING).queryFunction(QueryFunction.COVERED_BY).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"POLYGON(12.3426 45.24568, 13.3426 45.24568, 12.3426 44.24568, 13.3426 44.24568))")
.resolverDataType(ResolverDataType.STRING).queryFunction(QueryFunction.COVERED_BY).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("geo-location").dataType(DataType.GEOGRAPHIC).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"(12.3426 45.24568, 13.3426 45.24568, 12.3426 44.24568, 13.3426 44.24568)").resolverDataType(
ResolverDataType.STRING).queryFunction(QueryFunction.COVERED_BY).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
.leaf("mcca").dataType(DataType.PRIMITIVE).topologyObjectType(TopologyObjectType.ENTITY).parameter(
"POLYGON (12.3426 45.24568, 13.3426 45.24568, 12.3426 44.24568, 13.3426 44.24568)")
.resolverDataType(ResolverDataType.STRING).queryFunction(QueryFunction.COVERED_BY).build());
- assertThrows(TiesPathException.class, () -> scopeObject.getCondition());
+ assertThrows(TeivPathException.class, () -> scopeObject.getCondition());
}
@Test
// spotless:off
assertEquals(condition(
"\n" +
- " (ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"eUtranFqBands\" @> '\"789\"')\n" +
- " or (ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"eUtranFqBands\" @> '789')\n" +
- " or (ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"eUtranFqBands\"::text like '%456%')\n")
+ " (teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"eUtranFqBands\" @> '\"789\"')\n" +
+ " or (teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"eUtranFqBands\" @> '789')\n" +
+ " or (teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"eUtranFqBands\"::text like '%456%')\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " (ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"jsonbColumn\" -> 'levelOneField' -> 'levelTwoField' @> '\"456\"')\n" +
- " or (ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"jsonbColumn\" -> 'levelOneField' -> 'levelTwoField' @> '456')\n" +
- " or (ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"jsonbColumn\" -> 'levelOneField' ->> 'levelTwoField'::text like '%456%')\n")
+ " (teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"jsonbColumn\" -> 'levelOneField' -> 'levelTwoField' @> '\"456\"')\n" +
+ " or (teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"jsonbColumn\" -> 'levelOneField' -> 'levelTwoField' @> '456')\n" +
+ " or (teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"jsonbColumn\" -> 'levelOneField' ->> 'levelTwoField'::text like '%456%')\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBId\" = 1\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"decimalId\" = 2.5\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"nRPCI\" like (('%' || replace(\n" +
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBId\" = 1\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"decimalId\" = 2.5\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"nRPCI\" like (('%' || replace(\n" +
" replace(\n" +
" replace('ABC789', '!', '!!'),\n" +
" '%',\n" +
" '_',\n" +
" '!_'\n" +
" )) || '%') escape '!'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"pLMNId\" -> 'mnc' = '\"789\"'\n")
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"pLMNId\" -> 'mnc' = '\"789\"'\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"rel_column1\" = 1\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"rel_column2\" = 'ABC789'\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"rel_column1\" = 1\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"rel_column2\" = 'ABC789'\n")
.toString(), actualCondition.toString());
// spotless:on
}
TopologyObjectType.UNDEFINED).container(ContainerType.ATTRIBUTES).leaf("rel_column1").queryFunction(
QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
LogicalBlock slb1 = new ScopeLogicalBlock(scopeObject1);
- assertThrows(TiesPathException.class, slb1::getCondition);
+ assertThrows(TeivPathException.class, slb1::getCondition);
}
@Test
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU\" = 'urn:base64:TWFuYWdlZEV'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" = 'urn:base64:TWFuYWdlZEW'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" = 'urn:base64:TWFuYWdlZEZ'\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU\" = 'urn:base64:TWFuYWdlZEV'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" = 'urn:base64:TWFuYWdlZEW'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" = 'urn:base64:TWFuYWdlZEZ'\n")
.toString(), actualCondition.toString());
// spotless:on
}
LogicalBlock slb1 = new ScopeLogicalBlock(scopeObject1);
LogicalBlock slb2 = new ScopeLogicalBlock(scopeObject2);
LogicalBlock slb3 = new ScopeLogicalBlock(scopeObject3);
- assertThrows(TiesPathException.class, slb1::getCondition);
- assertThrows(TiesPathException.class, slb2::getCondition);
- assertThrows(TiesPathException.class, slb3::getCondition);
+ assertThrows(TeivPathException.class, slb1::getCondition);
+ assertThrows(TeivPathException.class, slb2::getCondition);
+ assertThrows(TeivPathException.class, slb3::getCondition);
}
@Test
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" = 'ABC123'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"id\" like (('%' || replace(\n" +
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" = 'ABC123'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"id\" like (('%' || replace(\n" +
" replace(\n" +
" replace('DEF456', '!', '!!'),\n" +
" '%',\n" +
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU\" = 'urn:base64:TWFuYWdlZEV'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" like (('%' || replace(\n" +
+ " teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU\" = 'urn:base64:TWFuYWdlZEV'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" like (('%' || replace(\n" +
" replace(\n" +
" replace('urn:base64:TWFuYWdlZEW', '!', '!!'),\n" +
" '%',\n" +
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU\" is not null\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" is not null\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU\" is not null\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
ScopeLogicalBlock invalidTopologyObjectType = new ScopeLogicalBlock(ScopeObject.builder("ODUFunction")
.topologyObjectType(TopologyObjectType.UNDEFINED).container(ContainerType.ID).queryFunction(
QueryFunction.NOT_NULL).parameter("urn:base64:TWFuYWdlZEV").dataType(DataType.PRIMITIVE).build());
- assertThrows(TiesPathException.class, undefinedTOType::getCondition);
- assertThrows(TiesPathException.class, invalidTopologyObjectType::getCondition);
+ assertThrows(TeivPathException.class, undefinedTOType::getCondition);
+ assertThrows(TeivPathException.class, invalidTopologyObjectType::getCondition);
}
@Test
void testConditions_entityAssociation_oneToMany1() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("ORUFunction").topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("ORUFunction/managed-by-managedElement")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of(
"managed-by-managedElement")).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(ODU_FUNCTION).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "managed-by-managedElement")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null)
- .build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ ODU_FUNCTION + "/managed-by-managedElement").topologyObjectType(TopologyObjectType.ASSOCIATION).container(
+ ContainerType.NOT_NULL).innerContainer(List.of()).leaf(null).queryFunction(QueryFunction.NOT_NULL)
+ .parameter(null).build());
AndOrLogicalBlock alb = new AndLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"REL_FK_managed-by-managedElement\" = 'me1'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"REL_FK_managed-by-managedElement\" = 'me1'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_entityAssociation_oneToMany2() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(MANAGED_ELEMENT).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "managed-oduFunction")).leaf("id").queryFunction(QueryFunction.EQ).parameter("odu1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(MANAGED_ELEMENT).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "managed-ocucpFunction")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(MANAGED_ELEMENT + "/managed-oduFunction")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of())
+ .leaf("id").queryFunction(QueryFunction.EQ).parameter("odu1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ MANAGED_ELEMENT + "/managed-ocucpFunction").topologyObjectType(TopologyObjectType.ASSOCIATION).container(
+ ContainerType.NOT_NULL).innerContainer(List.of()).leaf(null).queryFunction(QueryFunction.NOT_NULL)
+ .parameter(null).build());
AndOrLogicalBlock alb = new AndLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" = 'odu1'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"REL_FK_managed-by-managedElement\" is not null\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" = 'odu1'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"REL_FK_managed-by-managedElement\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_entityAssociation_manyToOne1() {
//antennamodule/entites?scopeFilter=/installed-at-site[@id=site']
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_MODULE).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of("installed-at-site"))
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_MODULE + "/installed-at-site")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of())
.leaf("id").queryFunction(QueryFunction.EQ).parameter("site1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_MODULE).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of("installed-at-site"))
- .leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_MODULE + "/installed-at-site")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.NOT_NULL).innerContainer(List
+ .of()).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new OrLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" = 'site1'\n" +
- " or ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n")
+ " teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" = 'site1'\n" +
+ " or teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_entityAssociation_manyToOne2() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("Site").topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "installed-antennaModule")).leaf("id").queryFunction(QueryFunction.EQ).parameter("am1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder("Site").topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "installed-antennaModule")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null)
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("Site/installed-antennaModule")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of())
+ .leaf("id").queryFunction(QueryFunction.EQ).parameter("am1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder("Site/installed-antennaModule")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.NOT_NULL).innerContainer(List
+ .of()).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new OrLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
assertEquals(condition(
"\n" +
" (\n" +
- " ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n" +
- " and ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"id\" = 'am1'\n" +
+ " teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n" +
+ " and teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"id\" = 'am1'\n" +
" )\n" +
- " or ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n")
+ " or teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_entityAssociation_manyToOne1Contains() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("Site").topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "installed-antennaModule")).leaf("id").queryFunction(QueryFunction.CONTAINS).parameter("am1")
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("Site/installed-antennaModule")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.ID).dataType(DataType.PRIMITIVE)
+ .innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.CONTAINS).parameter("am1").build());
Condition actualCondition = scopeObject1.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n" +
- "and ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"id\" like (" +
+ "teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n" +
+ "and teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"id\" like (" +
"('%' || replace(" + "\n"+
"replace(" + "\n"+
"replace('am1', '!', '!!')," + "\n"+
@Test
void testConditions_entityAssociation_manyToMany1Contains() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_MODULE).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "serviced-antennaCapability")).leaf("id").queryFunction(QueryFunction.CONTAINS).parameter("ac1")
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ ANTENNA_MODULE + "/serviced-antennaCapability").topologyObjectType(TopologyObjectType.ASSOCIATION)
+ .container(ContainerType.ID).innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.CONTAINS)
+ .parameter("ac1").build());
Condition actualCondition = scopeObject1.getCondition();
// spotless:off
- assertEquals(("ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"" +
+ assertEquals(("teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"" +
".\"bSide_AntennaCapability\"like(('%'||replace(" + "\n"+
"replace(" + "\n"+
"replace('ac1','!','!!')," + "\n"+
@Test
void testConditions_entityAssociation_oneToMany1Contains() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("ORUFunction").topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "managed-by-managedElement")).leaf("id").queryFunction(QueryFunction.CONTAINS).parameter("me1")
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("ORUFunction/managed-by-managedElement")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of())
+ .leaf("id").queryFunction(QueryFunction.CONTAINS).parameter("me1").build());
Condition actualCondition = scopeObject1.getCondition();
// spotless:off
assertEquals(
- ("ties_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"REL_FK_managed-by-managedElement\"like(('%'||replace(" + "\n" +
+ ("teiv_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"REL_FK_managed-by-managedElement\"like(('%'||replace(" + "\n" +
"replace(" +"\n"+
"replace('me1','!','!!')," + "\n" +
"'%'," + "\n" +
@Test
void testConditions_entityAssociation_manyToMany1() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_MODULE).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "serviced-antennaCapability")).leaf("id").queryFunction(QueryFunction.EQ).parameter("ac1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_MODULE).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "serviced-antennaCapability")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null)
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ ANTENNA_MODULE + "/serviced-antennaCapability").topologyObjectType(TopologyObjectType.ASSOCIATION)
+ .container(ContainerType.ID).innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.EQ).parameter(
+ "ac1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ ANTENNA_MODULE + "/serviced-antennaCapability").topologyObjectType(TopologyObjectType.ASSOCIATION)
+ .container(ContainerType.NOT_NULL).innerContainer(List.of()).leaf(null).queryFunction(
+ QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new AndLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"bSide_AntennaCapability\" = 'ac1'\n" +
- " and ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".id is not null\n")
+ " teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"bSide_AntennaCapability\" = 'ac1'\n" +
+ " and teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".id is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_entityAssociation_manyToMany2() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_CAPABILITY).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "serving-antennaModule")).leaf("id").queryFunction(QueryFunction.EQ).parameter("am1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(ANTENNA_CAPABILITY).topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "serving-antennaModule")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ ANTENNA_CAPABILITY + "/serving-antennaModule").topologyObjectType(TopologyObjectType.ASSOCIATION).container(
+ ContainerType.ID).innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.EQ).parameter(
+ "am1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ ANTENNA_CAPABILITY + "/serving-antennaModule").topologyObjectType(TopologyObjectType.ASSOCIATION).container(
+ ContainerType.NOT_NULL).innerContainer(List.of()).leaf(null).queryFunction(QueryFunction.NOT_NULL)
+ .parameter(null).build());
AndOrLogicalBlock alb = new AndLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"aSide_AntennaModule\" = 'am1'\n" +
- " and ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".id is not null\n")
+ " teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"aSide_AntennaModule\" = 'am1'\n" +
+ " and teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".id is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_relationAssociation_oneToMany1() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_ORUFUNCTION")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("managed-by-managedElement")).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1")
- .build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_ODUFUNCTION")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("managed-by-managedElement")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null)
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_ORUFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf("id")
+ .queryFunction(QueryFunction.EQ).parameter("me1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_ODUFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf(null)
+ .queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new AndLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"REL_FK_managed-by-managedElement\" = 'me1'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"REL_FK_managed-by-managedElement\" = 'me1'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_relationAssociation_oneToMany2() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_ORUFUNCTION")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("managed-oruFunction")).leaf("id").queryFunction(QueryFunction.EQ).parameter("oruf1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_ODUFUNCTION")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("managed-by-managedElement")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null)
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_ORUFUNCTION/managed-oruFunction").topologyObjectType(TopologyObjectType.ASSOCIATION)
+ .container(ContainerType.ID).innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.EQ).parameter(
+ "oruf1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_ODUFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.NOT_NULL).innerContainer(List.of()).leaf(
+ null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new AndLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"id\" = 'oruf1'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_ORUFunction\".\"id\" = 'oruf1'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"REL_FK_managed-by-managedElement\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_relationAssociation_manyToOne1() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("ANTENNAMODULE_INSTALLED_AT_SITE")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("installed-at-site")).leaf("id").queryFunction(QueryFunction.EQ).parameter("site1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder("ANTENNAMODULE_INSTALLED_AT_SITE")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("installed-at-site")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ANTENNAMODULE_INSTALLED_AT_SITE/installed-at-site").topologyObjectType(TopologyObjectType.ASSOCIATION)
+ .container(ContainerType.ID).innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.EQ).parameter(
+ "site1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ANTENNAMODULE_INSTALLED_AT_SITE/installed-at-site").topologyObjectType(TopologyObjectType.ASSOCIATION)
+ .container(ContainerType.NOT_NULL).innerContainer(List.of()).leaf(null).queryFunction(
+ QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new OrLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" = 'site1'\n" +
- " or ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n")
+ " teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" = 'site1'\n" +
+ " or teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_relationAssociation_manyToOne2() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("ANTENNAMODULE_INSTALLED_AT_SITE")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("installed-antennaModule")).leaf("id").queryFunction(QueryFunction.EQ).parameter("am1")
- .build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder("ANTENNAMODULE_INSTALLED_AT_SITE")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("installed-antennaModule")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null)
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ANTENNAMODULE_INSTALLED_AT_SITE/installed-antennaModule").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf("id")
+ .queryFunction(QueryFunction.EQ).parameter("am1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ANTENNAMODULE_INSTALLED_AT_SITE/installed-antennaModule").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.NOT_NULL).innerContainer(List.of()).leaf(
+ null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new OrLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
assertEquals(condition(
"\n" +
" (\n" +
- " ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n" +
- " and ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"id\" = 'am1'\n" +
+ " teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n" +
+ " and teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"id\" = 'am1'\n" +
" )\n" +
- " or ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n")
+ " or teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\".\"REL_FK_installed-at-site\" is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_relationAssociation_manyToMany1() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("ANTENNAMODULE_SERVES_ANTENNACAPABILITY")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("serviced-antennaCapability")).leaf("id").queryFunction(QueryFunction.EQ).parameter("ac1")
- .build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder("ANTENNAMODULE_SERVES_ANTENNACAPABILITY")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("serviced-antennaCapability")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null)
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ANTENNAMODULE_SERVES_ANTENNACAPABILITY/serviced-antennaCapability").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf("id")
+ .queryFunction(QueryFunction.EQ).parameter("ac1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ANTENNAMODULE_SERVES_ANTENNACAPABILITY/serviced-antennaCapability").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.NOT_NULL).innerContainer(List.of()).leaf(
+ null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new AndLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"bSide_AntennaCapability\" = 'ac1'\n" +
- " and ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".id is not null\n")
+ " teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"bSide_AntennaCapability\" = 'ac1'\n" +
+ " and teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".id is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_relationAssociation_manyToMany2() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("ANTENNAMODULE_SERVES_ANTENNACAPABILITY")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("serving-antennaModule")).leaf("id").queryFunction(QueryFunction.EQ).parameter("am1").build());
- ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder("ANTENNAMODULE_SERVES_ANTENNACAPABILITY")
- .topologyObjectType(TopologyObjectType.RELATION).container(ContainerType.ASSOCIATION).innerContainer(List
- .of("serving-antennaModule")).leaf(null).queryFunction(QueryFunction.NOT_NULL).parameter(null)
- .build());
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ANTENNAMODULE_SERVES_ANTENNACAPABILITY/serving-antennaModule").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf("id")
+ .queryFunction(QueryFunction.EQ).parameter("am1").build());
+ ScopeLogicalBlock scopeObject2 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ANTENNAMODULE_SERVES_ANTENNACAPABILITY/serving-antennaModule").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.NOT_NULL).innerContainer(List.of()).leaf(
+ null).queryFunction(QueryFunction.NOT_NULL).parameter(null).build());
AndOrLogicalBlock alb = new AndLogicalBlock();
alb.setChildren(List.of(scopeObject1, scopeObject2));
Condition actualCondition = alb.getCondition();
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"aSide_AntennaModule\" = 'am1'\n" +
- " and ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".id is not null\n")
+ " teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"aSide_AntennaModule\" = 'am1'\n" +
+ " and teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".id is not null\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testConditions_entityAssociation_throws() {
- ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder("CloudNativeApplication").container(
- ContainerType.ASSOCIATION).innerContainer(List.of("realised-oduFunction")).leaf("id").queryFunction(
- QueryFunction.CONTAINS).parameter("odu1").build());
- assertThrows(TiesPathException.class, scopeObject1::getCondition);
+ ScopeLogicalBlock scopeObject1 = new ScopeLogicalBlock(ScopeObject.builder(
+ "CloudNativeApplication/realised-oduFunction").container(ContainerType.ID).innerContainer(List.of()).leaf(
+ "id").queryFunction(QueryFunction.CONTAINS).parameter("odu1").build());
+ assertThrows(TeivPathException.class, scopeObject1::getCondition);
}
@Test
// spotless:off
assertEquals(condition(
"\n" +
- " (ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"CD_classifiers\"::text like '%odu-function-model:Ru%')\n" +
- " and (ties_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"CD_classifiers\" @> '\"ocucp-function-model:Weekend\"')\n")
+ " (teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"CD_classifiers\"::text like '%odu-function-model:Ru%')\n" +
+ " and (teiv_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"CD_classifiers\" @> '\"ocucp-function-model:Weekend\"')\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " (ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU\"::text like '%odu-function-model:Ru%')\n" +
- " and (ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" @> '\"ocucp-function-model:Weekend\"')\n")
+ " (teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU\"::text like '%odu-function-model:Ru%')\n" +
+ " and (teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" @> '\"ocucp-function-model:Weekend\"')\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " (ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"CD_sourceIds\"::text like '%urn:cmHandle:%')\n" +
- " and (ties_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"CD_sourceIds\" @> '\"urn:3gpp:dn:/SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/ODUFunction=16\"')\n")
+ " (teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"CD_sourceIds\"::text like '%urn:cmHandle:%')\n" +
+ " and (teiv_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"CD_sourceIds\" @> '\"urn:3gpp:dn:/SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/ODUFunction=16\"')\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " (ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU\"::text like '%urn:cmHandle:%')\n" +
- " and (ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" @> '\"urn:3gpp:dn:/SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/ODUFunction=16\"')\n")
+ " (teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU\"::text like '%urn:cmHandle:%')\n" +
+ " and (teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" @> '\"urn:3gpp:dn:/SubNetwork=SolarSystem/SubNetwork=Earth/SubNetwork=Europe/SubNetwork=Hungary/ODUFunction=16\"')\n")
.toString(), actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"CD_decorators\" ->> 'odu-function-model:location' like '%Stock%'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"CD_decorators\" -> 'odu-function-model:stringdata' = '\"ASD\"'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"CD_decorators\" -> 'odu-function-model:intdata' = '2'\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"CD_decorators\" ->> 'odu-function-model:location' like '%Stock%'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"CD_decorators\" -> 'odu-function-model:stringdata' = '\"ASD\"'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_OCUCPFunction\".\"CD_decorators\" -> 'odu-function-model:intdata' = '2'\n")
.toString(), actualCondition.toString());
// spotless:on
}
alb1.setChildren(List.of(slb1));
Condition actualCondition = slb1.getCondition();
// spotless:off
- assertEquals(condition("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"metadata\" -> 'reliabilityIndicator' = '\"OK\"'").toString()
+ assertEquals(condition("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"metadata\" -> 'reliabilityIndicator' = '\"OK\"'").toString()
+ , actualCondition.toString());
+ // spotless:on
+ }
+
+ @Test
+ void testConditions_entityMetadata_lastModified() {
+ ScopeObject scopeObject1 = ScopeObject.builder(ODU_FUNCTION).topologyObjectType(TopologyObjectType.ENTITY)
+ .container(ContainerType.METADATA).leaf("lastModified").queryFunction(QueryFunction.LESS_THAN).parameter(
+ "2025-01-21T11:12:48.628172460Z").dataType(DataType.TIMESTAMPTZ).build();
+ LogicalBlock slb1 = new ScopeLogicalBlock(scopeObject1);
+ AndOrLogicalBlock alb1 = new AndLogicalBlock();
+ AndOrLogicalBlock alb2 = new AndLogicalBlock();
+ alb1.setChildren(List.of(slb1));
+ Condition actualCondition = slb1.getCondition();
+ // spotless:off
+ assertEquals(condition("(teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"metadata\" ->> 'lastModified')::timestamptz < timestamp with time zone '2025-01-21 11:12:48.62817246+00:00'").toString()
+ , actualCondition.toString());
+ // spotless:on
+ }
+
+ @Test
+ void testConditions_entityMetadata_firstDiscovered() {
+ ScopeObject scopeObject1 = ScopeObject.builder(ODU_FUNCTION).topologyObjectType(TopologyObjectType.ENTITY)
+ .container(ContainerType.METADATA).leaf("firstDiscovered").queryFunction(QueryFunction.GREATER_THAN)
+ .parameter("2025-01-21T11:12:48.628172460Z").dataType(DataType.TIMESTAMPTZ).build();
+ LogicalBlock slb1 = new ScopeLogicalBlock(scopeObject1);
+ AndOrLogicalBlock alb1 = new AndLogicalBlock();
+ alb1.setChildren(List.of(slb1));
+ Condition actualCondition = slb1.getCondition();
+ // spotless:off
+ assertEquals(condition("(teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"metadata\" ->> 'firstDiscovered')::timestamptz > timestamp with time zone '2025-01-21 11:12:48.62817246+00:00'").toString()
, actualCondition.toString());
// spotless:on
}
// spotless:off
assertEquals(condition(
"\n" +
- " ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU\" ->> 'odu-function-model:location' like '%Stock%'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" -> 'odu-function-model:stringdata' = '\"ASD\"'\n" +
- " and ties_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" -> 'odu-function-model:intdata' = '2'\n")
+ " teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU\" ->> 'odu-function-model:location' like '%Stock%'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" -> 'odu-function-model:stringdata' = '\"ASD\"'\n" +
+ " and teiv_data.\"o-ran-smo-teiv-ran_NRSectorCarrier\".\"REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER\" -> 'odu-function-model:intdata' = '2'\n")
.toString(), actualCondition.toString());
// spotless:on
}
@Test
void testGetJoinCondition() {
- LogicalBlock slb1 = new ScopeLogicalBlock(ScopeObject.builder("ODUFunction").topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of("provided-nrCellDu"))
- .build());
+ LogicalBlock slb1 = new ScopeLogicalBlock(ScopeObject.builder("ODUFunction/provided-nrCellDu").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).innerContainer(List.of()).build());
InnerFilterCriteria innerFilterCriteria1 = InnerFilterCriteria.builder().scope(slb1).build();
- Pair<String, Field> pair1 = new ImmutablePair<>("ties_data.\"o-ran-smo-teiv-ran_NRCellDU\"", field(
- "ties_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_FK_provided-by-oduFunction\"" + "=" + "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\""));
+ Pair<String, Field> pair1 = new ImmutablePair<>("teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\"", field(
+ "teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\".\"REL_FK_provided-by-oduFunction\"" + "=" + "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\""));
Assertions.assertEquals(new HashSet(Arrays.asList(pair1)), innerFilterCriteria1.builder().scope(slb1).build()
.getJoinCondition());
- LogicalBlock slb2 = new ScopeLogicalBlock(ScopeObject.builder("AntennaCapability").topologyObjectType(
- TopologyObjectType.ENTITY).container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "serving-antennaModule")).build());
+ LogicalBlock slb2 = new ScopeLogicalBlock(ScopeObject.builder("AntennaCapability/serving-antennaModule")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of())
+ .build());
InnerFilterCriteria innerFilterCriteria2 = InnerFilterCriteria.builder().scope(slb2).build();
- Pair<String, Field> pair2 = new ImmutablePair<>("ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"", field(
- "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"bSide_AntennaCapability\"" + "=" + "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"id\""));
+ Pair<String, Field> pair2 = new ImmutablePair<>("teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"", field(
+ "teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\".\"bSide_AntennaCapability\"" + "=" + "teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\".\"id\""));
Assertions.assertEquals(new HashSet(Arrays.asList(pair2)), innerFilterCriteria2.builder().scope(slb2).build()
.getJoinCondition());
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import static org.jooq.impl.DSL.condition;
import static org.jooq.impl.DSL.field;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.consumerdata.ConsumerDataValidator;
-import org.oran.smo.teiv.exposure.tiespath.refiner.BasePathRefinement;
-import org.oran.smo.teiv.exposure.tiespath.resolver.ScopeResolver;
-import org.oran.smo.teiv.exposure.tiespath.resolver.TargetResolver;
+import org.oran.smo.teiv.exposure.teivpath.refiner.BasePathRefinement;
+import org.oran.smo.teiv.exposure.teivpath.resolver.ScopeResolver;
+import org.oran.smo.teiv.exposure.teivpath.resolver.TargetResolver;
import org.oran.smo.teiv.schema.DataType;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
filterCriteria)).build());
Set<Table> result = new HashSet<>();
- result.add(table("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
+ result.add(table("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
Assertions.assertEquals(result, filterCriteria.getTables());
result.clear();
- result.add(table("ties_data.\"o-ran-smo-teiv-ran_NRCellDU\""));
+ result.add(table("teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\""));
Assertions.assertEquals(result, filterCriteria2.getTables());
LogicalBlock logicalBlock3 = scopeResolver.resolve("ODUFunction", "/attributes[@gNBIdLength=1 or @gNBId=8]");
filterCriteria3.setScope(logicalBlock3);
- Assertions.assertThrows(TiesException.class, filterCriteria3::getTables);
+ Assertions.assertThrows(TeivException.class, filterCriteria3::getTables);
}
targetObjects.get(0).setTopologyObjectType(TopologyObjectType.ENTITY);
filterCriteria.setTargets(targetObjects);
Map<SelectField, Map<SelectField, DataType>> expected = new HashMap<>();
- expected.put(field("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ expected.put(field("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
new HashMap<>());
- expected.get(field("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"))
- .put(field("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBId\"").as(
+ expected.get(field("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"))
+ .put(field("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBId\"").as(
"o-ran-smo-teiv-ran:ODUFunction.attr.gNBId"), DataType.BIGINT);
- expected.get(field("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"))
- .put(field("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ expected.get(field("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"))
+ .put(field("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
DataType.PRIMITIVE);
- expected.get(field("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"))
- .put(field("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBIdLength\"").as(
+ expected.get(field("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"))
+ .put(field("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBIdLength\"").as(
"o-ran-smo-teiv-ran:ODUFunction.attr.gNBIdLength"), DataType.INTEGER);
Assertions.assertEquals(expected, filterCriteria.getSelects());
}
filterCriteria)).build());
basePathRefinement.validateScopeParametersDataType(FilterCriteria.builder("RAN").filterCriteriaList(List.of(
filterCriteria)).build());
- Assertions.assertEquals(condition(field("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBIdLength\"").eq(1))
+ Assertions.assertEquals(condition(field("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBIdLength\"").eq(1))
.toString(), filterCriteria.getCondition().toString());
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
import static org.jooq.impl.DSL.table;
import static org.junit.Assert.assertThrows;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.DataType;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
class ScopeLogicalBlockTest {
-
@BeforeAll
static void setUp() throws SchemaLoaderException {
SchemaLoader mockedSchemaLoader = new MockSchemaLoader();
@Test
void testGetTables() {
-
Set<Table> resultTables = new HashSet<>();
-
- ScopeObject scopeObject = ScopeObject.builder("ODUFunction").container(ContainerType.ASSOCIATION).leaf("id")
- .queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
- scopeObject.setInnerContainer(Arrays.asList("provided-nrCellDu"));
- scopeObject.setTopologyObjectType(TopologyObjectType.ENTITY);
-
+ ScopeObject scopeObject = ScopeObject.builder("ODUFunction/provided-nrCellDu").container(ContainerType.ID).leaf(
+ "id").queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
+ scopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
ScopeObject scopeObject1 = ScopeObject.builder("ODUFunction").container(ContainerType.ATTRIBUTES).leaf(
"gNBIdLength").queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.INTEGER).build();
scopeObject1.setTopologyObjectType(TopologyObjectType.ENTITY);
-
ScopeObject scopeObject2 = ScopeObject.builder("ODUFunction").container(ContainerType.ATTRIBUTES).leaf("gNBId")
.queryFunction(QueryFunction.EQ).parameter("8").dataType(DataType.BIGINT).build();
scopeObject2.setTopologyObjectType(TopologyObjectType.ENTITY);
-
ScopeObject scopeObject3 = ScopeObject.builder("ODUFunction").container(ContainerType.ATTRIBUTES).leaf("gNBId")
.queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
scopeObject3.setTopologyObjectType(TopologyObjectType.UNDEFINED);
-
ScopeObject scopeObject4 = ScopeObject.builder("ODUFUNCTION_PROVIDES_NRCELLDU").container(ContainerType.ID)
.queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.PRIMITIVE).build();
scopeObject4.setTopologyObjectType(TopologyObjectType.RELATION);
-
- ScopeObject scopeObject5 = ScopeObject.builder("ODUFunction").container(ContainerType.ASSOCIATION).leaf("id")
- .queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
- scopeObject5.setInnerContainer(Arrays.asList("managed-by-managedElement"));
- scopeObject5.setTopologyObjectType(TopologyObjectType.ENTITY);
-
- ScopeObject scopeObject6 = ScopeObject.builder("MANAGEDELEMENT_MANAGES_ODUFUNCTION").container(
- ContainerType.ASSOCIATION).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1").dataType(
- DataType.PRIMITIVE).build();
+ ScopeObject scopeObject5 = ScopeObject.builder("ODUFunction/managed-by-managedElement").container(ContainerType.ID)
+ .leaf("id").queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
+ scopeObject5.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ ScopeObject scopeObject6 = ScopeObject.builder("MANAGEDELEMENT_MANAGES_ODUFUNCTION").container(ContainerType.ID)
+ .leaf("id").queryFunction(QueryFunction.EQ).parameter("me1").dataType(DataType.PRIMITIVE).build();
scopeObject6.setInnerContainer(Arrays.asList("managed-by-managedElement"));
scopeObject6.setTopologyObjectType(TopologyObjectType.RELATION);
-
- ScopeObject scopeObject7 = ScopeObject.builder("MANAGEDELEMENT_MANAGES_ODUFUNCTION").container(
- ContainerType.ASSOCIATION).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1").dataType(
+ ScopeObject scopeObject7 = ScopeObject.builder("MANAGEDELEMENT_MANAGES_ODUFUNCTION/provided-by-oduFunction")
+ .container(ContainerType.ID).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1").dataType(
DataType.PRIMITIVE).build();
scopeObject7.setInnerContainer(Arrays.asList("provided-by-oduFunction"));
- scopeObject7.setTopologyObjectType(TopologyObjectType.RELATION);
-
- ScopeObject scopeObject8 = ScopeObject.builder("NRCellDU").topologyObjectType(TopologyObjectType.ENTITY).container(
- ContainerType.ASSOCIATION).innerContainer(List.of("grouped-by-sector")).leaf("geoColumn").queryFunction(
- QueryFunction.EQ).parameter("point(39.4019881 67.9419888)").dataType(DataType.GEOGRAPHIC).build();
-
+ scopeObject7.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ ScopeObject scopeObject8 = ScopeObject.builder("NRCellDU/grouped-by-sector").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ATTRIBUTES).innerContainer(List.of()).leaf(
+ "geoColumn").queryFunction(QueryFunction.EQ).parameter("point(39.4019881 67.9419888)").dataType(
+ DataType.GEOGRAPHIC).build();
ScopeLogicalBlock scopeLogicalBlock = new ScopeLogicalBlock(scopeObject);
ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(scopeObject1);
ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(scopeObject2);
ScopeLogicalBlock scopeLogicalBlock6 = new ScopeLogicalBlock(scopeObject6);
ScopeLogicalBlock scopeLogicalBlock7 = new ScopeLogicalBlock(scopeObject7);
ScopeLogicalBlock scopeLogicalBlock8 = new ScopeLogicalBlock(scopeObject8);
-
- resultTables.add(table("ties_data.\"o-ran-smo-teiv-ran_NRCellDU\""));
+ resultTables.add(table("teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\""));
Assertions.assertEquals(resultTables, scopeLogicalBlock.getTables());
resultTables.clear();
-
- resultTables.add(table("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
+ resultTables.add(table("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
Assertions.assertEquals(resultTables, scopeLogicalBlock1.getTables());
resultTables.clear();
-
- resultTables.add(table("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
+ resultTables.add(table("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
Assertions.assertEquals(resultTables, scopeLogicalBlock2.getTables());
resultTables.clear();
-
- assertThrows(TiesException.class, scopeLogicalBlock3::getTables);
-
- resultTables.add(table("ties_data.\"o-ran-smo-teiv-ran_NRCellDU\""));
+ assertThrows(TeivException.class, scopeLogicalBlock3::getTables);
+ resultTables.add(table("teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\""));
Assertions.assertEquals(resultTables, scopeLogicalBlock4.getTables());
resultTables.clear();
-
- resultTables.add(table("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
+ resultTables.add(table("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
Assertions.assertEquals(resultTables, scopeLogicalBlock5.getTables());
resultTables.clear();
-
- resultTables.add(table("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
+ resultTables.add(table("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\""));
Assertions.assertEquals(resultTables, scopeLogicalBlock6.getTables());
resultTables.clear();
-
- resultTables.add(table("ties_data.\"o-ran-smo-teiv-ran_NRCellDU\""));
+ resultTables.add(table("teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\""));
Assertions.assertEquals(resultTables, scopeLogicalBlock8.getTables());
resultTables.clear();
-
- Assertions.assertThrows(TiesException.class, () -> scopeLogicalBlock7.getTables());
+ Assertions.assertThrows(TeivException.class, () -> scopeLogicalBlock7.getTables());
}
-
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.innerlanguage;
+package org.oran.smo.teiv.exposure.teivpath.innerlanguage;
-import static org.oran.smo.teiv.exposure.tiespath.refiner.AliasMapper.hashAlias;
+import static org.oran.smo.teiv.exposure.teivpath.refiner.AliasMapper.hashAlias;
import static org.oran.smo.teiv.schema.DataType.*;
import static org.jooq.impl.DSL.field;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.ID).topologyObjectType(
TopologyObjectType.ENTITY).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
- Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE)),
+ Assertions.assertEquals(Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE)),
filterCriteria.getSelects());
}
targets.add(TargetObject.builder("ODUFunction").params(List.of("gNBDUId", "dUpLMNId")).container(
ContainerType.ATTRIBUTES).topologyObjectType(TopologyObjectType.ENTITY).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
- Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
- "ties_data.\"ODUFunction\".\"gNBDUId\"").as("o-ran-smo-teiv-ran:ODUFunction.attr.dUpLMNId"),
- CONTAINER, field("ties_data.\"ODUFunction\".\"gNBDUId\"").as(
- "o-ran-smo-teiv-ran:ODUFunction.attr.gNBDUId"), BIGINT)), filterCriteria.getSelects());
+ Assertions.assertEquals(Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
+ "teiv_data.\"ODUFunction\".\"gNBDUId\"").as("o-ran-smo-teiv-ran:ODUFunction.attr.gNBDUId"), BIGINT,
+ field("teiv_data.\"ODUFunction\".\"dUpLMNId\"").as("o-ran-smo-teiv-ran:ODUFunction.attr.dUpLMNId"),
+ CONTAINER)), filterCriteria.getSelects());
}
@Test
targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.ATTRIBUTES)
.topologyObjectType(TopologyObjectType.ENTITY).isAllParamQueried(true).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
- Map.of(field("ties_data.\"ODUFunction\".\"gNBDUId\"").as("o-ran-smo-teiv-ran:ODUFunction.attr.gNBDUId"),
- BIGINT, field("ties_data.\"ODUFunction\".\"gNBDUId\"").as(
- "o-ran-smo-teiv-ran:ODUFunction.attr.dUpLMNId"), CONTAINER, field(
- "ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
- PRIMITIVE, field("ties_data.\"ODUFunction\".\"gNBId\"").as(
- "o-ran-smo-teiv-ran:ODUFunction.attr.gNBId"), BIGINT, field(
- "ties_data.\"ODUFunction\".\"gNBIdLength\"").as(
- "o-ran-smo-teiv-ran:ODUFunction.attr.gNBIdLength"), INTEGER)),
+ Assertions.assertEquals(Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
+ "teiv_data.\"ODUFunction\".\"gNBId\"").as("o-ran-smo-teiv-ran:ODUFunction.attr.gNBId"), BIGINT,
+ field("teiv_data.\"ODUFunction\".\"gNBIdLength\"").as(
+ "o-ran-smo-teiv-ran:ODUFunction.attr.gNBIdLength"), INTEGER, field(
+ "teiv_data.\"ODUFunction\".\"dUpLMNId\"").as(
+ "o-ran-smo-teiv-ran:ODUFunction.attr.dUpLMNId"), CONTAINER, field(
+ "teiv_data.\"ODUFunction\".\"gNBDUId\"").as(
+ "o-ran-smo-teiv-ran:ODUFunction.attr.gNBDUId"), BIGINT)),
filterCriteria.getSelects());
}
targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.DECORATORS)
.topologyObjectType(TopologyObjectType.ENTITY).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
- Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
- "ties_data.\"ODUFunction\".\"CD_decorators\"").as("o-ran-smo-teiv-ran:ODUFunction.decorators"),
+ Assertions.assertEquals(Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
+ "teiv_data.\"ODUFunction\".\"CD_decorators\"").as("o-ran-smo-teiv-ran:ODUFunction.decorators"),
CONTAINER)), filterCriteria.getSelects());
}
targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.METADATA)
.topologyObjectType(TopologyObjectType.ENTITY).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
- Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
- "ties_data.\"ODUFunction\".\"CD_decorators\"").as("o-ran-smo-teiv-ran:ODUFunction.metadata"),
+ Assertions.assertEquals(Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
+ "teiv_data.\"ODUFunction\".\"CD_decorators\"").as("o-ran-smo-teiv-ran:ODUFunction.metadata"),
CONTAINER)), filterCriteria.getSelects());
}
targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.CLASSIFIERS)
.topologyObjectType(TopologyObjectType.ENTITY).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
- Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
- "ties_data.\"ODUFunction\".\"CD_classifiers\"").as("o-ran-smo-teiv-ran:ODUFunction.classifiers"),
+ Assertions.assertEquals(Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
+ "teiv_data.\"ODUFunction\".\"CD_classifiers\"").as("o-ran-smo-teiv-ran:ODUFunction.classifiers"),
CONTAINER)), filterCriteria.getSelects());
}
targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.SOURCE_IDS)
.topologyObjectType(TopologyObjectType.ENTITY).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
- Map.of(field("ties_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
- "ties_data.\"ODUFunction\".\"CD_sourceIds\"").as("o-ran-smo-teiv-ran:ODUFunction.sourceIds"),
+ Assertions.assertEquals(Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"),
+ Map.of(field("teiv_data.\"ODUFunction\".\"id\"").as("o-ran-smo-teiv-ran:ODUFunction.id"), PRIMITIVE, field(
+ "teiv_data.\"ODUFunction\".\"CD_sourceIds\"").as("o-ran-smo-teiv-ran:ODUFunction.sourceIds"),
CONTAINER)), filterCriteria.getSelects());
}
targets.add(TargetObject.builder("SECTOR_GROUPS_ANTENNAMODULE").params(List.of()).container(ContainerType.ID)
.topologyObjectType(TopologyObjectType.RELATION).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(
+ Assertions.assertEquals(Map.of(field("teiv_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(
hashAlias("o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.id")), Map.of(field(
- "ties_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(hashAlias(
+ "teiv_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.id")), PRIMITIVE, field(
- "ties_data.\"AntennaModule\".\"REL_FK_grouped-by-sector\"").as(hashAlias(
+ "teiv_data.\"AntennaModule\".\"REL_FK_grouped-by-sector\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.aSide")),
- PRIMITIVE, field("ties_data.\"AntennaModule\".\"id\"").as(hashAlias(
+ PRIMITIVE, field("teiv_data.\"AntennaModule\".\"id\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.bSide")), PRIMITIVE)),
filterCriteria.getSelects());
}
targets.add(TargetObject.builder("SECTOR_GROUPS_ANTENNAMODULE").params(List.of()).container(
ContainerType.DECORATORS).topologyObjectType(TopologyObjectType.RELATION).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(
+ Assertions.assertEquals(Map.of(field("teiv_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(
hashAlias("o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.id")), Map.of(field(
- "ties_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(hashAlias(
+ "teiv_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.id")), PRIMITIVE, field(
- "ties_data.\"AntennaModule\".\"REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE\"").as(
+ "teiv_data.\"AntennaModule\".\"REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE\"").as(
hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.decorators")),
- CONTAINER, field("ties_data.\"AntennaModule\".\"REL_FK_grouped-by-sector\"").as(hashAlias(
+ CONTAINER, field("teiv_data.\"AntennaModule\".\"REL_FK_grouped-by-sector\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.aSide")), PRIMITIVE, field(
- "ties_data.\"AntennaModule\".\"id\"").as(hashAlias(
+ "teiv_data.\"AntennaModule\".\"id\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.bSide")),
PRIMITIVE)), filterCriteria.getSelects());
}
targets.add(TargetObject.builder("SECTOR_GROUPS_ANTENNAMODULE").params(List.of()).container(
ContainerType.CLASSIFIERS).topologyObjectType(TopologyObjectType.RELATION).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(
+ Assertions.assertEquals(Map.of(field("teiv_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(
hashAlias("o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.id")), Map.of(field(
- "ties_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(hashAlias(
+ "teiv_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.id")), PRIMITIVE, field(
- "ties_data.\"AntennaModule\".\"REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE\"")
+ "teiv_data.\"AntennaModule\".\"REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE\"")
.as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.classifiers")),
- CONTAINER, field("ties_data.\"AntennaModule\".\"REL_FK_grouped-by-sector\"").as(hashAlias(
+ CONTAINER, field("teiv_data.\"AntennaModule\".\"REL_FK_grouped-by-sector\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.aSide")), PRIMITIVE, field(
- "ties_data.\"AntennaModule\".\"id\"").as(hashAlias(
+ "teiv_data.\"AntennaModule\".\"id\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.bSide")),
PRIMITIVE)), filterCriteria.getSelects());
}
targets.add(TargetObject.builder("SECTOR_GROUPS_ANTENNAMODULE").params(List.of()).container(
ContainerType.SOURCE_IDS).topologyObjectType(TopologyObjectType.RELATION).build());
- Assertions.assertEquals(Map.of(field("ties_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(
+ Assertions.assertEquals(Map.of(field("teiv_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(
hashAlias("o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.id")), Map.of(field(
- "ties_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(hashAlias(
+ "teiv_data.\"AntennaModule\".\"REL_ID_SECTOR_GROUPS_ANTENNAMODULE\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.id")), PRIMITIVE, field(
- "ties_data.\"AntennaModule\".\"REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE\"").as(
+ "teiv_data.\"AntennaModule\".\"REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE\"").as(
hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.sourceIds")),
- CONTAINER, field("ties_data.\"AntennaModule\".\"REL_FK_grouped-by-sector\"").as(hashAlias(
+ CONTAINER, field("teiv_data.\"AntennaModule\".\"REL_FK_grouped-by-sector\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.aSide")), PRIMITIVE, field(
- "ties_data.\"AntennaModule\".\"id\"").as(hashAlias(
+ "teiv_data.\"AntennaModule\".\"id\"").as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE.bSide")),
PRIMITIVE)), filterCriteria.getSelects());
}
targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.CLASSIFIERS)
.topologyObjectType(TopologyObjectType.UNDEFINED).build());
- Assertions.assertThrowsExactly(TiesException.class, filterCriteria::getSelects);
+ Assertions.assertThrowsExactly(TeivException.class, filterCriteria::getSelects);
}
@Test
List<TargetObject> targets = new ArrayList<>();
InnerFilterCriteria filterCriteria = new InnerFilterCriteria(targets, null);
- targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.ASSOCIATION)
+ targets.add(TargetObject.builder("ODUFunction").params(List.of()).container(ContainerType.RELATION)
.topologyObjectType(TopologyObjectType.ENTITY).build());
- Assertions.assertThrowsExactly(TiesException.class, filterCriteria::getSelects);
+ Assertions.assertThrowsExactly(TeivException.class, filterCriteria::getSelects);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.refiner;
+package org.oran.smo.teiv.exposure.teivpath.refiner;
import static org.junit.jupiter.api.Assertions.assertEquals;
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.refiner;
+package org.oran.smo.teiv.exposure.teivpath.refiner;
-import static org.oran.smo.teiv.utils.TiesConstants.ID_COLUMN_NAME;
-import static org.oran.smo.teiv.utils.TiesConstants.ITEM;
-import static org.oran.smo.teiv.utils.TiesConstants.WILDCARD;
+import static org.oran.smo.teiv.utils.TeivConstants.ID_COLUMN_NAME;
+import static org.oran.smo.teiv.utils.TeivConstants.ITEM;
+import static org.oran.smo.teiv.utils.TeivConstants.WILDCARD;
import static org.mockito.Mockito.mock;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.EmptyLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.InnerFilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.EmptyLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.InnerFilterCriteria;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.oran.smo.teiv.exposure.consumerdata.ConsumerDataValidator;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndOrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ContainerType;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.FilterCriteria;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.LogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.OrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.QueryFunction;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeObject;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TargetObject;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TopologyObjectType;
-import org.oran.smo.teiv.exposure.tiespath.resolver.ResolverDataType;
-import org.oran.smo.teiv.exposure.tiespath.resolver.ScopeResolver;
-import org.oran.smo.teiv.exposure.tiespath.resolver.TargetResolver;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndOrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.FilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.LogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.OrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeObject;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TargetObject;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TopologyObjectType;
+import org.oran.smo.teiv.exposure.teivpath.resolver.ResolverDataType;
+import org.oran.smo.teiv.exposure.teivpath.resolver.ScopeResolver;
+import org.oran.smo.teiv.exposure.teivpath.resolver.TargetResolver;
import org.oran.smo.teiv.schema.DataType;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
import org.oran.smo.teiv.schema.SchemaRegistry;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
class BasePathRefinementTest {
-
private static final ConsumerDataValidator consumerDataValidator = mock(ConsumerDataValidator.class);
private static BasePathRefinement basePathRefinement;
private final TargetResolver targetResolver = new TargetResolver();
FilterCriteria filterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
.builder().targets(targets).scope(logicalBlock).build())).resolvingTopologyObjectType(
FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
-
basePathRefinement.refine(filterCriteria);
-
LogicalBlock expectedLogicalBlock = scopeResolver.process(null, "/attributes[@gNBCUName='someCUCPName']");
List<TargetObject> expectedTargets = targetResolver.resolve(null, "/OCUCPFunction/attributes");
FilterCriteria expectedFilterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
.builder().targets(expectedTargets).scope(expectedLogicalBlock).build())).resolvingTopologyObjectType(
FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
-
ScopeObject expectedScopeObject = ((ScopeLogicalBlock) expectedLogicalBlock).getScopeObject();
expectedScopeObject.setTopologyObject("OCUCPFunction");
expectedScopeObject.setTopologyObjectType(TopologyObjectType.ENTITY);
expectedScopeObject.setQueryFunction(QueryFunction.EQ);
expectedScopeObject.setParameter("someCUCPName");
expectedScopeObject.setDataType(DataType.PRIMITIVE);
-
expectedTargets.get(0).setTopologyObjectType(TopologyObjectType.ENTITY);
expectedTargets.get(0).setAllParamQueried(true);
-
Assertions.assertEquals(expectedFilterCriteria, filterCriteria);
}
FilterCriteria filterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
.builder().targets(targets).scope(logicalBlock).build())).resolvingTopologyObjectType(
FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
-
basePathRefinement.refine(filterCriteria);
-
LogicalBlock expectedLogicalBlock = scopeResolver.process(null, "/metadata[@reliabilityIndicator='OK']");
List<TargetObject> expectedTargets = targetResolver.resolve(null, "/OCUCPFunction/sourceIds");
FilterCriteria expectedFilterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
.builder().targets(expectedTargets).scope(expectedLogicalBlock).build())).resolvingTopologyObjectType(
FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
-
ScopeObject expectedScopeObject = ((ScopeLogicalBlock) expectedLogicalBlock).getScopeObject();
expectedScopeObject.setTopologyObject("OCUCPFunction");
expectedScopeObject.setTopologyObjectType(TopologyObjectType.ENTITY);
expectedScopeObject.setQueryFunction(QueryFunction.EQ);
expectedScopeObject.setParameter("OK");
expectedScopeObject.setDataType(DataType.PRIMITIVE);
-
expectedTargets.get(0).setTopologyObjectType(TopologyObjectType.ENTITY);
expectedTargets.get(0).setAllParamQueried(false);
-
Assertions.assertEquals(expectedFilterCriteria, filterCriteria);
}
FilterCriteria filterCriteria = FilterCriteria.builder("RAN").build();
LogicalBlock logicalBlock1 = scopeResolver.process(null, "/managed-by-managedElement[@id='me1']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock1).build()));
-
basePathRefinement.processTopologyObjectsWithContainerTypeNull(filterCriteria);
-
- ScopeObject scopeObjectResult1 = ScopeObject.builder(WILDCARD).container(ContainerType.ASSOCIATION).innerContainer(
- List.of("managed-by-managedElement")).resolverDataType(ResolverDataType.STRING).queryFunction(
- QueryFunction.EQ).leaf(ID_COLUMN_NAME).parameter("me1").build();
+ ScopeObject scopeObjectResult1 = ScopeObject.builder(WILDCARD + "/managed-by-managedElement").container(
+ ContainerType.ID).innerContainer(List.of()).resolverDataType(ResolverDataType.STRING).queryFunction(
+ QueryFunction.EQ).leaf(null).parameter("me1").build();
Assertions.assertEquals(scopeObjectResult1, ((ScopeLogicalBlock) logicalBlock1).getScopeObject());
-
LogicalBlock logicalBlock2 = scopeResolver.process(ODU_FUNCTION, "/managed-by-managedElement");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock2).build()));
-
+ basePathRefinement.handleAssociationsInScope((ScopeLogicalBlock) logicalBlock2, "RAN");
basePathRefinement.processTopologyObjectsWithContainerTypeNull(filterCriteria);
-
- ScopeObject scopeObjectResult2 = ScopeObject.builder(ODU_FUNCTION).container(ContainerType.ASSOCIATION)
- .innerContainer(List.of("managed-by-managedElement")).resolverDataType(ResolverDataType.NOT_NULL)
- .queryFunction(QueryFunction.NOT_NULL).build();
+ ScopeObject scopeObjectResult2 = ScopeObject.builder(ODU_FUNCTION + "/managed-by-managedElement")
+ .topologyObjectType(TopologyObjectType.ASSOCIATION).container(ContainerType.NOT_NULL).resolverDataType(
+ ResolverDataType.NOT_NULL).queryFunction(QueryFunction.NOT_NULL).build();
Assertions.assertEquals(scopeObjectResult2, ((ScopeLogicalBlock) logicalBlock2).getScopeObject());
-
LogicalBlock logicalBlock3 = scopeResolver.process(null, "/ODUFUNCTION_PROVIDES_NRCELLDU");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock3).build()));
-
- basePathRefinement.processTopologyObjectsWithContainerTypeNull(filterCriteria);
-
- ScopeObject scopeObjectResult3 = ScopeObject.builder(WILDCARD).container(ContainerType.RELATION).innerContainer(List
- .of("ODUFUNCTION_PROVIDES_NRCELLDU")).resolverDataType(ResolverDataType.NOT_NULL).queryFunction(
- QueryFunction.NOT_NULL).build();
- Assertions.assertEquals(scopeObjectResult3, ((ScopeLogicalBlock) logicalBlock3).getScopeObject());
-
- LogicalBlock logicalBlock4 = scopeResolver.process(null, "/ODUFunction[@id='gnbdu1']");
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement
+ .processTopologyObjectsWithContainerTypeNull(filterCriteria));
+ LogicalBlock logicalBlock4 = scopeResolver.process(null, "/ODUFunction[@id='odu1']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock4).build()));
-
basePathRefinement.processTopologyObjectsWithContainerTypeNull(filterCriteria);
-
- ScopeObject scopeObjectResult4 = ScopeObject.builder(ODU_FUNCTION).container(ContainerType.ID).resolverDataType(
- ResolverDataType.STRING).queryFunction(QueryFunction.EQ).parameter("gnbdu1").build();
+ ScopeObject scopeObjectResult4 = ScopeObject.builder(WILDCARD + "/" + ODU_FUNCTION).container(ContainerType.ID)
+ .resolverDataType(ResolverDataType.STRING).queryFunction(QueryFunction.EQ).parameter("odu1").build();
Assertions.assertEquals(scopeObjectResult4, ((ScopeLogicalBlock) logicalBlock4).getScopeObject());
-
- LogicalBlock logicalBlock5 = scopeResolver.process("NRCellDU", "/ODUFunction[@id='ODU_1']");
- filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock5).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement
- .processTopologyObjectsWithContainerTypeNull(filterCriteria));
-
- ScopeObject scopeObject = ScopeObject.builder(WILDCARD).container(null).build();
- LogicalBlock logicalBlock6 = new ScopeLogicalBlock(scopeObject);
- filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock6).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement
- .processTopologyObjectsWithContainerTypeNull(filterCriteria));
-
try (MockedStatic<SchemaRegistry> utilities = Mockito.mockStatic(SchemaRegistry.class)) {
utilities.when(() -> SchemaRegistry.getEntityNamesByDomain("RAN")).thenReturn(Arrays.asList(
"RelationAndEntity"));
utilities.when(() -> SchemaRegistry.getRelationNamesByDomain("RAN")).thenReturn(Arrays.asList(
"RelationAndEntity"));
- LogicalBlock logicalBlock7 = scopeResolver.process(null, "/RelationAndEntity[@id='relAndEnt1']");
+ LogicalBlock logicalBlock7 = scopeResolver.process(null, "/RelationAndEntity[@leaf='relAndEnt1']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock7).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement
.processTopologyObjectsWithContainerTypeNull(filterCriteria));
utilities.when(() -> SchemaRegistry.getAssociationNamesByEntityName(ODU_FUNCTION)).thenReturn(Arrays.asList(
"RelationAndAssociation"));
utilities.when(() -> SchemaRegistry.getRelationNamesByDomain("RAN")).thenReturn(Arrays.asList(
"RelationAndAssociation"));
- LogicalBlock logicalBlock8 = scopeResolver.process(null, "/RelationAndAssociation[@id='relAndAssoc1']");
+ LogicalBlock logicalBlock8 = scopeResolver.process(null, "/RelationAndAssociation[@leaf='relAndAssoc1']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock8).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement
.processTopologyObjectsWithContainerTypeNull(filterCriteria));
}
-
LogicalBlock logicalBlock9 = scopeResolver.process(null, "/NRCellDU/attributes[@nCI=12]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock9).build()));
-
basePathRefinement.processTopologyObjectsWithContainerTypeNull(filterCriteria);
-
- ScopeObject scopeObjectResult9 = ScopeObject.builder("NRCellDU").container(ContainerType.ATTRIBUTES)
+ ScopeObject scopeObjectResult9 = ScopeObject.builder("*/NRCellDU").container(ContainerType.ATTRIBUTES)
.resolverDataType(ResolverDataType.INTEGER).queryFunction(QueryFunction.EQ).leaf("nCI").parameter("12")
.build();
Assertions.assertEquals(scopeObjectResult9, ((ScopeLogicalBlock) logicalBlock9).getScopeObject());
-
LogicalBlock logicalBlock10 = scopeResolver.process(null, "/NRCellDU[@nCI=12]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock10).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement
.processTopologyObjectsWithContainerTypeNull(filterCriteria));
-
}
@Test
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().targets(targetResolver.resolve(null,
"/ODUFunction/attributes(gNBDUId); /ODUFunction/attributes(gNBId); /attributes(name)")).scope(
EmptyLogicalBlock.getInstance()).build();
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
filterCriteria, "RAN", FilterCriteria.ResolvingTopologyObjectType.ENTITY));
}
filterCriteria.setTargets(targetResolver.resolve(null,
"/ODUFunction/attributes(dUpLMNId); /ODUFunction/attributes(gNBId)"));
filterCriteria.setScope(scopeResolver.resolve(null, "/ODUFunction/attributes[@gNBIdLength=2]"));
-
ScopeObject scopeObject1 = ScopeObject.builder(ODU_FUNCTION).container(ContainerType.ATTRIBUTES).leaf("gNBIdLength")
.queryFunction(QueryFunction.EQ).parameter("2").resolverDataType(ResolverDataType.INTEGER).build();
LogicalBlock scopeResult1 = new ScopeLogicalBlock(scopeObject1);
-
TargetObject targetObjectResult = TargetObject.builder(ODU_FUNCTION).container(ContainerType.ATTRIBUTES).params(
new ArrayList<>(Arrays.asList("dUpLMNId", "gNBId"))).build();
List<TargetObject> resultTargetObjects = new ArrayList<>();
resultTargetObjects.add(targetObjectResult);
-
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.ENTITY);
-
Assertions.assertEquals(resultTargetObjects, filterCriteria.getTargets());
Assertions.assertEquals(scopeResult1, filterCriteria.getScope());
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/attributes;/attributes(cellLocalId,nCI)"));
filterCriteria.setScope(scopeResolver.resolve(null, "/NRCellDU/attributes[@nCI=12]"));
-
TargetObject targetObjectResult3_1 = TargetObject.builder("NRCellDU").container(ContainerType.ATTRIBUTES).params(
new ArrayList<>(Arrays.asList("nCI", "cellLocalId"))).isAllParamQueried(true).build();
List<TargetObject> resultTargetObjects3_1 = new ArrayList<>();
resultTargetObjects3_1.add(targetObjectResult3_1);
-
+ basePathRefinement.handleAssociationsInScope((ScopeLogicalBlock) filterCriteria.getScope(), "RAN");
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.ENTITY);
-
Assertions.assertEquals(resultTargetObjects3_1, filterCriteria.getTargets());
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/attributes;/attributes(cellLocalId)"));
filterCriteria.setScope(scopeResolver.resolve(null, "/attributes[@nCI=12]"));
-
TargetObject targetObjectResult4_1 = TargetObject.builder("NRCellDU").container(ContainerType.ATTRIBUTES).params(
List.of("cellLocalId")).isAllParamQueried(true).build();
TargetObject targetObjectResult4_2 = TargetObject.builder("NRCellCU").container(ContainerType.ATTRIBUTES).params(
List<TargetObject> resultTargetObjects4_1 = new ArrayList<>();
resultTargetObjects4_1.add(targetObjectResult4_1);
resultTargetObjects4_1.add(targetObjectResult4_2);
-
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.ENTITY);
-
Assertions.assertEquals(resultTargetObjects4_1, filterCriteria.getTargets());
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, null));
filterCriteria.setScope(scopeResolver.resolve(null, "/attributes[@gNBId = 6 and @gNBIdLength = 1]"));
-
ScopeLogicalBlock OCUUPFunctionPgNBId = new ScopeLogicalBlock(ScopeObject.builder("OCUUPFunction").container(
ContainerType.ATTRIBUTES).leaf("gNBId").queryFunction(QueryFunction.EQ).parameter("6").resolverDataType(
ResolverDataType.INTEGER).build());
ScopeLogicalBlock OCUCPFunctionPgNBIdLength = new ScopeLogicalBlock(ScopeObject.builder("OCUCPFunction").container(
ContainerType.ATTRIBUTES).leaf("gNBIdLength").queryFunction(QueryFunction.EQ).parameter("1")
.resolverDataType(ResolverDataType.INTEGER).build());
-
AndLogicalBlock OCUUPFunction = new AndLogicalBlock();
AndLogicalBlock ODUFunction = new AndLogicalBlock();
AndLogicalBlock OCUCPFunction = new AndLogicalBlock();
-
OCUCPFunction.getChildren().add(OCUCPFunctionPgNBId);
OCUCPFunction.getChildren().add(OCUCPFunctionPgNBIdLength);
OCUUPFunction.getChildren().add(OCUUPFunctionPgNBId);
OCUUPFunction.getChildren().add(OCUUPFunctionPgNBIdLength);
ODUFunction.getChildren().add(ODUFunctionPgNBId);
ODUFunction.getChildren().add(ODUFunctionPgNBIdLength);
-
OrLogicalBlock or1 = new OrLogicalBlock();
OrLogicalBlock or2 = new OrLogicalBlock();
-
or1.getChildren().add(or2);
or1.getChildren().add(ODUFunction);
or2.getChildren().add(OCUCPFunction);
or2.getChildren().add(OCUUPFunction);
-
TargetObject targetObjectResult5_1 = TargetObject.builder("OCUUPFunction").container(ContainerType.ID).build();
TargetObject targetObjectResult5_2 = TargetObject.builder(ODU_FUNCTION).container(ContainerType.ID).build();
TargetObject targetObjectResult5_3 = TargetObject.builder("OCUCPFunction").container(ContainerType.ID).build();
resultTargetObjects5_1.add(targetObjectResult5_3);
resultTargetObjects5_1.add(targetObjectResult5_1);
resultTargetObjects5_1.add(targetObjectResult5_2);
-
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.ENTITY);
Assertions.assertEquals(resultTargetObjects5_1, filterCriteria.getTargets());
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/NRCellDU"));
filterCriteria.setScope(scopeResolver.resolve(null, "/attributes[@cellLocalId = 156]"));
-
TargetObject targetObjectResult6_1 = TargetObject.builder("NRCellDU").container(ContainerType.ID).build();
List<TargetObject> resultTargetObjects6_1 = new ArrayList<>();
resultTargetObjects6_1.add(targetObjectResult6_1);
-
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.ENTITY);
-
ScopeObject scopeObjectResult6_1 = ScopeObject.builder("NRCellDU").container(ContainerType.ATTRIBUTES).leaf(
"cellLocalId").queryFunction(QueryFunction.EQ).parameter("156").resolverDataType(ResolverDataType.INTEGER)
.build();
LogicalBlock logicalBlockResult6_1 = new ScopeLogicalBlock(scopeObjectResult6_1);
-
Assertions.assertEquals(resultTargetObjects6_1, filterCriteria.getTargets());
Assertions.assertEquals(logicalBlockResult6_1, filterCriteria.getScope());
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/attributes(gNBId);/attributes(nCI)"));
filterCriteria.setScope(scopeResolver.resolve(null, null));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
filterCriteria, "RAN", FilterCriteria.ResolvingTopologyObjectType.ENTITY));
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/attributes(nCI)"));
filterCriteria.setScope(scopeResolver.resolve(null, "/attributes[@gNBId = 6]"));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
filterCriteria, "RAN", FilterCriteria.ResolvingTopologyObjectType.ENTITY));
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/attributes"));
filterCriteria.setScope(scopeResolver.resolve(null, "/attributes[@cellLocalId = 178]; /attributes[@nCI = 12]"));
-
ScopeLogicalBlock NRCellDUCellLocalId = new ScopeLogicalBlock(ScopeObject.builder("NRCellDU").container(
ContainerType.ATTRIBUTES).leaf("cellLocalId").queryFunction(QueryFunction.EQ).parameter("178")
.resolverDataType(ResolverDataType.INTEGER).build());
ScopeLogicalBlock NRCellCUnCI = new ScopeLogicalBlock(ScopeObject.builder("NRCellCU").container(
ContainerType.ATTRIBUTES).leaf("nCI").queryFunction(QueryFunction.EQ).parameter("12").resolverDataType(
ResolverDataType.INTEGER).build());
-
AndLogicalBlock NRCellDU = new AndLogicalBlock();
NRCellDU.getChildren().add(NRCellDUnCI);
NRCellDU.getChildren().add(NRCellDUCellLocalId);
-
AndLogicalBlock NRCellCU = new AndLogicalBlock();
NRCellCU.getChildren().add(NRCellCUnCI);
NRCellCU.getChildren().add(NRCellCUCellLocalId);
-
OrLogicalBlock or = new OrLogicalBlock();
or.getChildren().add(NRCellCU);
or.getChildren().add(NRCellDU);
-
TargetObject targetObjectResult9_1 = TargetObject.builder("NRCellDU").container(ContainerType.ATTRIBUTES)
.isAllParamQueried(true).isAllParamQueried(true).build();
TargetObject targetObjectResult9_2 = TargetObject.builder("NRCellCU").container(ContainerType.ATTRIBUTES)
.isAllParamQueried(true).isAllParamQueried(true).build();
-
List<TargetObject> resultTargetObjects9_1 = new ArrayList<>();
resultTargetObjects9_1.add(targetObjectResult9_1);
resultTargetObjects9_1.add(targetObjectResult9_2);
-
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.ENTITY);
-
Assertions.assertEquals(resultTargetObjects9_1, filterCriteria.getTargets());
Assertions.assertEquals(or, filterCriteria.getScope());
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/attributes"));
filterCriteria.setScope(scopeResolver.resolve(null, "/attributes[@nCI = 12]; /attributes[@gNBId = 6]"));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
filterCriteria, "RAN", FilterCriteria.ResolvingTopologyObjectType.ENTITY));
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/attributes; /id"));
filterCriteria.setScope(scopeResolver.resolve(null, "/id[@id = \"testId\"]; /attributes[@gNBId = 6]"));
-
ScopeLogicalBlock OCUUPFunctionPgNBId = new ScopeLogicalBlock(ScopeObject.builder("OCUUPFunction").container(
ContainerType.ATTRIBUTES).leaf("gNBId").queryFunction(QueryFunction.EQ).parameter("6").resolverDataType(
ResolverDataType.INTEGER).build());
ScopeLogicalBlock OCUCPFunctionPid = new ScopeLogicalBlock(ScopeObject.builder("OCUCPFunction").container(
ContainerType.ID).queryFunction(QueryFunction.EQ).parameter("testId").resolverDataType(
ResolverDataType.STRING).build());
-
AndLogicalBlock OCUUPFunction = new AndLogicalBlock();
OCUUPFunction.getChildren().add(OCUUPFunctionPgNBId);
OCUUPFunction.getChildren().add(OCUUPFunctionPid);
-
AndLogicalBlock ODUFunction = new AndLogicalBlock();
ODUFunction.getChildren().add(ODUFunctionPgNBId);
ODUFunction.getChildren().add(ODUFunctionPid);
-
AndLogicalBlock OCUCPFunction = new AndLogicalBlock();
OCUCPFunction.getChildren().add(OCUCPFunctionPgNBId);
OCUCPFunction.getChildren().add(OCUCPFunctionPid);
-
OrLogicalBlock or1 = new OrLogicalBlock();
OrLogicalBlock or2 = new OrLogicalBlock();
-
or1.getChildren().add(or2);
or1.getChildren().add(ODUFunction);
or2.getChildren().add(OCUCPFunction);
or2.getChildren().add(OCUUPFunction);
-
TargetObject targetObjectResult11_1 = TargetObject.builder("OCUUPFunction").container(ContainerType.ID).build();
TargetObject targetObjectResult11_2 = TargetObject.builder(ODU_FUNCTION).container(ContainerType.ID).build();
- TargetObject targetObjectResult11_3 = TargetObject.builder("OCUCPFunction").container(ContainerType.ATTRIBUTES)
- .isAllParamQueried(true).build();
+ TargetObject targetObjectResult11_3 = TargetObject.builder("OCUCPFunction").container(ContainerType.ID).build();
TargetObject targetObjectResult11_4 = TargetObject.builder("OCUUPFunction").container(ContainerType.ATTRIBUTES)
.isAllParamQueried(true).build();
TargetObject targetObjectResult11_5 = TargetObject.builder(ODU_FUNCTION).container(ContainerType.ATTRIBUTES)
.isAllParamQueried(true).build();
- TargetObject targetObjectResult11_6 = TargetObject.builder("OCUCPFunction").container(ContainerType.ID).build();
+ TargetObject targetObjectResult11_6 = TargetObject.builder("OCUCPFunction").container(ContainerType.ATTRIBUTES)
+ .isAllParamQueried(true).build();
List<TargetObject> resultTargetObjects11_1 = new ArrayList<>();
- resultTargetObjects11_1.add(targetObjectResult11_3);
+ resultTargetObjects11_1.add(targetObjectResult11_6);
resultTargetObjects11_1.add(targetObjectResult11_4);
resultTargetObjects11_1.add(targetObjectResult11_5);
- resultTargetObjects11_1.add(targetObjectResult11_6);
+ resultTargetObjects11_1.add(targetObjectResult11_3);
resultTargetObjects11_1.add(targetObjectResult11_1);
resultTargetObjects11_1.add(targetObjectResult11_2);
-
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.ENTITY);
-
Assertions.assertEquals(resultTargetObjects11_1, filterCriteria.getTargets());
Assertions.assertEquals(or1, filterCriteria.getScope());
}
InnerFilterCriteria filterCriteria2 = InnerFilterCriteria.builder().build();
filterCriteria2.setTargets(targetResolver.resolve(null, "/attributes"));
filterCriteria2.setScope(scopeResolver.resolve(null, "/managed-by-managedElement[@id = \"me1\"]"));
-
+ basePathRefinement.handleAssociationsInScope((ScopeLogicalBlock) filterCriteria2.getScope(), "OAM");
basePathRefinement.processTopologyObjectsWithContainerTypeNull(FilterCriteria.builder("OAM").filterCriteriaList(List
.of(filterCriteria2)).build());
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveWildCardObjectsInScopeAndTarget(
filterCriteria2, "OAM", FilterCriteria.ResolvingTopologyObjectType.ENTITY));
}
InnerFilterCriteria filterCriteria2 = InnerFilterCriteria.builder().build();
filterCriteria2.setTargets(targetResolver.resolve(null, "/attributes"));
filterCriteria2.setScope(scopeResolver.resolve(null, "/managed-by-managedElement[@id = \"me1\"]"));
-
TargetObject targetObjectResult13_1 = TargetObject.builder("OCUUPFunction").container(ContainerType.ATTRIBUTES)
.isAllParamQueried(true).build();
TargetObject targetObjectResult13_2 = TargetObject.builder("ORUFunction").container(ContainerType.ATTRIBUTES)
resultTargetObjectsResult13_1.add(targetObjectResult13_1);
resultTargetObjectsResult13_1.add(targetObjectResult13_4);
- ScopeLogicalBlock NearRTRICFunction = new ScopeLogicalBlock(ScopeObject.builder("NearRTRICFunction").container(
- ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id").queryFunction(
- QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
- ScopeLogicalBlock ORUFunction = new ScopeLogicalBlock(ScopeObject.builder("ORUFunction").container(
- ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id").queryFunction(
- QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
- ScopeLogicalBlock OCUUPFunction = new ScopeLogicalBlock(ScopeObject.builder("OCUUPFunction").container(
- ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id").queryFunction(
- QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
- ScopeLogicalBlock ODUFunction = new ScopeLogicalBlock(ScopeObject.builder(ODU_FUNCTION).container(
- ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id").queryFunction(
- QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
- ScopeLogicalBlock OCUCPFunction = new ScopeLogicalBlock(ScopeObject.builder("OCUCPFunction").container(
- ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id").queryFunction(
- QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
+ ScopeLogicalBlock NearRTRICFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "NearRTRICFunction/managed-by-managedElement").container(ContainerType.ID).topologyObjectType(
+ TopologyObjectType.ASSOCIATION).innerContainer(List.of()).leaf(null).queryFunction(QueryFunction.EQ)
+ .parameter("me1").resolverDataType(ResolverDataType.STRING).build());
+
+ ScopeLogicalBlock ORUFunction = new ScopeLogicalBlock(ScopeObject.builder("ORUFunction/managed-by-managedElement")
+ .container(ContainerType.ID).topologyObjectType(TopologyObjectType.ASSOCIATION).innerContainer(List.of())
+ .leaf(null).queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING)
+ .build());
+ ScopeLogicalBlock OCUUPFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "OCUUPFunction/managed-by-managedElement").container(ContainerType.ID).topologyObjectType(
+ TopologyObjectType.ASSOCIATION).innerContainer(List.of()).leaf(null).queryFunction(QueryFunction.EQ)
+ .parameter("me1").resolverDataType(ResolverDataType.STRING).build());
+ ScopeLogicalBlock ODUFunction = new ScopeLogicalBlock(ScopeObject.builder("ODUFunction/managed-by-managedElement")
+ .container(ContainerType.ID).topologyObjectType(TopologyObjectType.ASSOCIATION).innerContainer(List.of())
+ .leaf(null).queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING)
+ .build());
+ ScopeLogicalBlock OCUCPFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "OCUCPFunction/managed-by-managedElement").container(ContainerType.ID).topologyObjectType(
+ TopologyObjectType.ASSOCIATION).innerContainer(List.of()).leaf(null).queryFunction(QueryFunction.EQ)
+ .parameter("me1").resolverDataType(ResolverDataType.STRING).build());
AndOrLogicalBlock or1 = new OrLogicalBlock();
AndOrLogicalBlock or2 = new OrLogicalBlock();
or2.getChildren().add(ODUFunction);
or1.getChildren().add(or2);
or1.getChildren().add(ORUFunction);
-
+ basePathRefinement.handleAssociationsInScope((ScopeLogicalBlock) filterCriteria2.getScope(), "RAN");
basePathRefinement.processTopologyObjectsWithContainerTypeNull(FilterCriteria.builder("RAN").filterCriteriaList(List
.of(filterCriteria2)).build());
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria2, "RAN",
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, null));
filterCriteria.setScope(scopeResolver.resolve(null, "/ODUFunction[@id = \"testId\"]"));
-
TargetObject targetObjectResult9_1 = TargetObject.builder(ODU_FUNCTION).container(ContainerType.ID)
.isAllParamQueried(false).build();
-
List<TargetObject> resultTargetObjects9_1 = new ArrayList<>();
resultTargetObjects9_1.add(targetObjectResult9_1);
+ basePathRefinement.handleAssociationsInScope((ScopeLogicalBlock) filterCriteria.getScope(), "RAN");
basePathRefinement.processTopologyObjectsWithContainerTypeNull(FilterCriteria.builder("RAN").filterCriteriaList(List
.of(filterCriteria)).build());
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.ENTITY);
-
Assertions.assertEquals(resultTargetObjects9_1, filterCriteria.getTargets());
}
InnerFilterCriteria filterCriteria = InnerFilterCriteria.builder().build();
filterCriteria.setTargets(targetResolver.resolve(null, "/ODUFUNCTION_PROVIDES_NRCELLDU"));
filterCriteria.setScope(scopeResolver.resolve(null, "/id[text() = \"testId\"]"));
-
ScopeObject scopeObject = ScopeObject.builder("ODUFUNCTION_PROVIDES_NRCELLDU").container(ContainerType.ID)
.parameter("testId").queryFunction(QueryFunction.EQ).resolverDataType(ResolverDataType.STRING).build();
-
basePathRefinement.processTopologyObjectsWithContainerTypeNull(FilterCriteria.builder("RAN").filterCriteriaList(List
.of(filterCriteria)).build());
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria, "RAN",
FilterCriteria.ResolvingTopologyObjectType.RELATIONSHIP);
-
Assertions.assertEquals(new ScopeLogicalBlock(scopeObject), filterCriteria.getScope());
}
resultTargetObjectsResult13_1.add(targetObjectResult13_2);
resultTargetObjectsResult13_1.add(targetObjectResult13_1);
- ScopeLogicalBlock OCUCPFunction = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_OCUCPFUNCTION")
- .container(ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id")
+ ScopeLogicalBlock OCUCPFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_OCUCPFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf(null)
.queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
- ScopeLogicalBlock OCUUPFunction = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_OCUUPFUNCTION")
- .container(ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id")
+ ScopeLogicalBlock OCUUPFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_OCUUPFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf(null)
.queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
AndOrLogicalBlock or1 = new OrLogicalBlock();
or1.getChildren().add(OCUUPFunction);
or1.getChildren().add(OCUCPFunction);
+ basePathRefinement.handleAssociationsInScope((ScopeLogicalBlock) filterCriteria2.getScope(), "RAN");
basePathRefinement.processTopologyObjectsWithContainerTypeNull(FilterCriteria.builder("RAN").filterCriteriaList(List
.of(filterCriteria2)).build());
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria2, "RAN",
resultTargetObjectsResult13_1.add(targetObjectResult13_1);
resultTargetObjectsResult13_1.add(targetObjectResult13_2);
- ScopeLogicalBlock OCUUPFunction = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_OCUUPFUNCTION")
- .container(ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id")
+ ScopeLogicalBlock OCUUPFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_OCUUPFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf(null)
.queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
ScopeLogicalBlock NearRTRICFunction = new ScopeLogicalBlock(ScopeObject.builder(
- "MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION").container(ContainerType.ASSOCIATION).innerContainer(List.of(
- "managed-by-managedElement")).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1")
- .resolverDataType(ResolverDataType.STRING).build());
- ScopeLogicalBlock ODUFunction = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_ODUFUNCTION")
- .container(ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id")
+ "MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf(null)
+ .queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
+ ScopeLogicalBlock ODUFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_ODUFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf(null)
.queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
- ScopeLogicalBlock OCUCPFunction = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_OCUCPFUNCTION")
- .container(ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id")
+ ScopeLogicalBlock OCUCPFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_OCUCPFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf(null)
.queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
- ScopeLogicalBlock ORUFunction = new ScopeLogicalBlock(ScopeObject.builder("MANAGEDELEMENT_MANAGES_ORUFUNCTION")
- .container(ContainerType.ASSOCIATION).innerContainer(List.of("managed-by-managedElement")).leaf("id")
+ ScopeLogicalBlock ORUFunction = new ScopeLogicalBlock(ScopeObject.builder(
+ "MANAGEDELEMENT_MANAGES_ORUFUNCTION/managed-by-managedElement").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ID).innerContainer(List.of()).leaf(null)
.queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(ResolverDataType.STRING).build());
AndOrLogicalBlock or1 = new OrLogicalBlock();
or1.getChildren().add(or2);
or1.getChildren().add(ORUFunction);
+ basePathRefinement.handleAssociationsInScope((ScopeLogicalBlock) filterCriteria2.getScope(), "REL_OAM_RAN");
basePathRefinement.processTopologyObjectsWithContainerTypeNull(FilterCriteria.builder("REL_OAM_RAN")
.filterCriteriaList(List.of(filterCriteria2)).build());
basePathRefinement.resolveWildCardObjectsInScopeAndTarget(filterCriteria2, "REL_OAM_RAN",
LogicalBlock scope = new ScopeLogicalBlock(scopeObject);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject))).scope(scope).build()));
-
try (MockedStatic<SchemaRegistry> utilities = Mockito.mockStatic(SchemaRegistry.class)) {
utilities.when(() -> SchemaRegistry.getEntityNamesByDomain("RAN")).thenReturn(Arrays.asList(ODU_FUNCTION,
"NRCellDU"));
utilities.when(() -> SchemaRegistry.getRelationNamesByDomain("RAN")).thenReturn(Arrays.asList(
"ODUFUNCTION_PROVIDES_NRCELLDU"));
-
basePathRefinement.resolveUndefinedTopologyObjectTypes(filterCriteria);
-
Assertions.assertEquals(TopologyObjectType.ENTITY, filterCriteria.getFilterCriteriaList().get(0).getTargets()
.get(0).getTopologyObjectType());
Assertions.assertEquals(TopologyObjectType.ENTITY, ((ScopeLogicalBlock) filterCriteria.getFilterCriteriaList()
.get(0).getScope()).getScopeObject().getTopologyObjectType());
-
filterCriteria.getFilterCriteriaList().get(0).setScope(EmptyLogicalBlock.getInstance());
targetObject.setTopologyObjectType(TopologyObjectType.UNDEFINED);
-
basePathRefinement.resolveUndefinedTopologyObjectTypes(filterCriteria);
-
Assertions.assertEquals(TopologyObjectType.ENTITY, filterCriteria.getFilterCriteriaList().get(0).getTargets()
.get(0).getTopologyObjectType());
}
LogicalBlock scope = new ScopeLogicalBlock(scopeObject);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject))).scope(scope).build()));
-
try (MockedStatic<SchemaRegistry> utilities = Mockito.mockStatic(SchemaRegistry.class)) {
utilities.when(() -> SchemaRegistry.getEntityNamesByDomain("RAN")).thenReturn(Arrays.asList(ODU_FUNCTION,
"NRCellDU"));
utilities.when(() -> SchemaRegistry.getRelationNamesByDomain("RAN")).thenReturn(Arrays.asList(
"ODUFUNCTION_PROVIDES_NRCELLDU"));
-
basePathRefinement.resolveUndefinedTopologyObjectTypes(filterCriteria);
-
Assertions.assertEquals(TopologyObjectType.RELATION, filterCriteria.getFilterCriteriaList().get(0).getTargets()
.get(0).getTopologyObjectType());
Assertions.assertEquals(TopologyObjectType.RELATION, ((ScopeLogicalBlock) filterCriteria.getFilterCriteriaList()
LogicalBlock scope = new ScopeLogicalBlock(scopeObject);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject))).scope(scope).build()));
-
try (MockedStatic<SchemaRegistry> utilities = Mockito.mockStatic(SchemaRegistry.class)) {
utilities.when(() -> SchemaRegistry.getEntityNamesByDomain("RAN")).thenReturn(Arrays.asList(ODU_FUNCTION,
"NRCellDU", "EntityAndRelation"));
utilities.when(() -> SchemaRegistry.getRelationNamesByDomain("RAN")).thenReturn(Arrays.asList(
"ODUFUNCTION_PROVIDES_NRCELLDU", "EntityAndRelation"));
// Error thrown because of invalid topology object in targetFilter
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveUndefinedTopologyObjectTypes(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveUndefinedTopologyObjectTypes(
filterCriteria));
-
targetObject.setTopologyObject(ODU_FUNCTION);
-
// Error thrown because of invalid topology object in scopeFilter
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveUndefinedTopologyObjectTypes(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveUndefinedTopologyObjectTypes(
filterCriteria));
-
scopeObject.setTopologyObject("EntityAndRelation");
-
// Error thrown because of topology object type is ambiguous
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveUndefinedTopologyObjectTypes(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveUndefinedTopologyObjectTypes(
filterCriteria));
-
targetObject.setTopologyObjectType(TopologyObjectType.UNDEFINED);
targetObject.setTopologyObject("EntityAndRelation");
-
// Error thrown because of topology object type is ambiguous
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.resolveUndefinedTopologyObjectTypes(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.resolveUndefinedTopologyObjectTypes(
filterCriteria));
}
}
@Test
void testValidateContainers() {
FilterCriteria filterCriteria = FilterCriteria.builder("RAN").build();
-
TargetObject targetObject0 = TargetObject.builder(ODU_FUNCTION).container(ContainerType.ID).params(new ArrayList<>(
Arrays.asList("gNBId"))).build();
targetObject0.setTopologyObjectType(TopologyObjectType.ENTITY);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject0))).build()));
-
// Reason: container:ID, params is not empty
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
TargetObject targetObject1 = TargetObject.builder(ODU_FUNCTION).container(ContainerType.ATTRIBUTES).params(
new ArrayList<>(Arrays.asList("gNBId", "gNBIdLength", "notValidAttribute1", "notValidAttribute2"))).build();
targetObject1.setTopologyObjectType(TopologyObjectType.ENTITY);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(List.of(targetObject1))
.build()));
-
ScopeObject scopeObject = ScopeObject.builder(ODU_FUNCTION).container(ContainerType.ATTRIBUTES).leaf("gNBId")
.queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
-
scopeObject.setTopologyObjectType(TopologyObjectType.ENTITY);
LogicalBlock scopeLogicalBlock = new ScopeLogicalBlock(scopeObject);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject1))).scope(scopeLogicalBlock).build()));
-
// Reason: invalid attributes in ENTITY type targetObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
TargetObject targetObject2 = TargetObject.builder("ODUFUNCTION_PROVIDES_NRCELLDU").container(
ContainerType.ATTRIBUTES).topologyObjectType(TopologyObjectType.RELATION).params(new ArrayList<>(Arrays
.asList("notValidAttribute1", "notValidAttribute2"))).build();
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject2))).scope(scopeLogicalBlock).build()));
-
// Reason: invalid attributes in RELATION type targetObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
scopeObject.setLeaf("notValidAttribute");
-
TargetObject targetObject3 = TargetObject.builder(ODU_FUNCTION).container(ContainerType.ATTRIBUTES)
.topologyObjectType(TopologyObjectType.ENTITY).params(new ArrayList<>(Arrays.asList("gNBId",
"gNBIdLength"))).build();
targetObject3.setTopologyObjectType(TopologyObjectType.ENTITY);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject3))).scope(scopeLogicalBlock).build()));
-
// Reason: invalid attributes in ENTITY type scopeObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
scopeObject.setLeaf("gNBId");
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateContainers(filterCriteria));
-
TargetObject targetObject4 = TargetObject.builder(ODU_FUNCTION).container(ContainerType.SOURCE_IDS)
.topologyObjectType(TopologyObjectType.ENTITY).params(new ArrayList<>(Arrays.asList("gNBId"))).build();
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject4))).scope(scopeLogicalBlock).build()));
-
// Reason: invalid source id param for ENTITY type targetObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
targetObject4.setParams(Collections.emptyList());
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateContainers(filterCriteria));
-
TargetObject targetObject5 = TargetObject.builder("ODUFUNCTION_PROVIDES_NRCELLDU").container(
ContainerType.SOURCE_IDS).topologyObjectType(TopologyObjectType.RELATION).params(new ArrayList<>(Arrays
.asList("InvalidSourceIdParam"))).build();
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject5))).scope(scopeLogicalBlock).build()));
-
// Reason: invalid source id param for RELATION type targetObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
targetObject5.setParams(new ArrayList<>(Arrays.asList(ITEM)));
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateContainers(filterCriteria));
}
@Test
void testValidateContainers_Associations() {
FilterCriteria filterCriteria = FilterCriteria.builder("RAN").build();
- ScopeObject scopeObject = ScopeObject.builder(ODU_FUNCTION).container(ContainerType.ASSOCIATION).leaf("nCI")
- .queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
- scopeObject.setInnerContainer(Arrays.asList("provided-nrCellDu"));
- scopeObject.setTopologyObjectType(TopologyObjectType.ENTITY);
+ ScopeObject scopeObject = ScopeObject.builder(ODU_FUNCTION + "/provided-nrCellDu").topologyObjectType(
+ TopologyObjectType.ASSOCIATION).container(ContainerType.ATTRIBUTES).leaf("nCI").queryFunction(
+ QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
+ // scopeObject.setInnerContainer(Arrays.asList("provided-nrCellDu"));
+ scopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
LogicalBlock scopeLogicalBlock = new ScopeLogicalBlock(scopeObject);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(List.of()).scope(
scopeLogicalBlock).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateContainers(filterCriteria));
-
scopeObject.setLeaf(null);
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateContainers(filterCriteria));
-
scopeObject.setLeaf("invalid");
-
// Reason: invalid leaf for scopeObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
scopeObject.setLeaf("nCI");
scopeObject.setInnerContainer(Arrays.asList("invalid-association"));
-
// Reason: invalid association added in innerContainer list for ENTITY type scopeObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
+ scopeObject.setInnerContainer(Arrays.asList("invalid-innerContainer"));
+ // Reason: in case of association there are no innerContainer elements
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
+ scopeObject.setTopologyObject("ODUFUNCTION_PROVIDES_NRCELLDU/provided-nrCellDu");
+ scopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
scopeObject.setInnerContainer(Collections.emptyList());
-
- // Reason: no association name added in innerContainer list for scopeObject in case of association containerType
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
- scopeObject.setTopologyObject("ODUFUNCTION_PROVIDES_NRCELLDU");
- scopeObject.setTopologyObjectType(TopologyObjectType.RELATION);
- scopeObject.setInnerContainer(Arrays.asList("provided-nrCellDu"));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateContainers(filterCriteria));
-
scopeObject.setTopologyObjectType(TopologyObjectType.UNDEFINED);
-
// Reason: cannot validate container for UNDEFINED type topologyObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
-
- scopeObject.setTopologyObjectType(TopologyObjectType.RELATION);
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
+ scopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
scopeObject.setInnerContainer(Arrays.asList("invalid-association"));
-
// Reason: invalid association added in innerContainer list for RELATION type scopeObject
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateContainers(filterCriteria));
}
@Test
FilterCriteria filterCriteria = FilterCriteria.builder("RAN").build();
LogicalBlock logicalBlock1 = scopeResolver.process(ODU_FUNCTION, "/attributes[@gNBId=21]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock1).build()));
-
basePathRefinement.validateScopeParametersDataType(filterCriteria);
Assertions.assertEquals(DataType.BIGINT, ((ScopeLogicalBlock) logicalBlock1).getScopeObject().getDataType());
-
// error reason: for gNBId attribute string value is not accepted
LogicalBlock logicalBlock2 = scopeResolver.process(ODU_FUNCTION, "/attributes[@gNBId='abc']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock2).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
filterCriteria));
-
// error reason: id value should be entered as string (' ')
LogicalBlock logicalBlock3 = scopeResolver.process(ODU_FUNCTION, "/ODUFunction[@id=1]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock3).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
filterCriteria));
-
// scopeFilter: /managed-by-managedElement[@id='me1'] -> dataType is set to PRIMITIVE
ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(ScopeObject.builder(ODU_FUNCTION).innerContainer(
- new ArrayList<>(Arrays.asList("managed-by-managedElement"))).container(ContainerType.ASSOCIATION)
- .topologyObjectType(TopologyObjectType.ENTITY).queryFunction(QueryFunction.EQ).leaf(ID_COLUMN_NAME)
- .parameter("me1").resolverDataType(ResolverDataType.STRING).build());
+ new ArrayList<>(Arrays.asList("managed-by-managedElement"))).container(ContainerType.ID).topologyObjectType(
+ TopologyObjectType.ENTITY).queryFunction(QueryFunction.EQ).leaf(ID_COLUMN_NAME).parameter("me1")
+ .resolverDataType(ResolverDataType.STRING).build());
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(scopeLogicalBlock1).build()));
-
basePathRefinement.validateScopeParametersDataType(filterCriteria);
-
Assertions.assertEquals(DataType.PRIMITIVE, scopeLogicalBlock1.getScopeObject().getDataType());
-
// error reason: scopeFilter: /managed-by-managedElement[@id=1] -> ResolverDataType is INTEGER, but in case of id it should be STRING
ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(ScopeObject.builder(ODU_FUNCTION).innerContainer(
- new ArrayList<>(Arrays.asList("managed-by-managedElement"))).container(ContainerType.ASSOCIATION)
- .topologyObjectType(TopologyObjectType.ENTITY).queryFunction(QueryFunction.EQ).leaf(ID_COLUMN_NAME)
- .parameter("1").resolverDataType(ResolverDataType.INTEGER).build());
+ new ArrayList<>(Arrays.asList("managed-by-managedElement"))).container(ContainerType.ID).topologyObjectType(
+ TopologyObjectType.ENTITY).queryFunction(QueryFunction.EQ).leaf(ID_COLUMN_NAME).parameter("1")
+ .resolverDataType(ResolverDataType.INTEGER).build());
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(scopeLogicalBlock2).build()));
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
filterCriteria));
// error reason: scopeFilter: /provided-nrCellDu[@cellLocalId=1] -> only id can be queried for associations
ScopeLogicalBlock scopeLogicalBlock3 = new ScopeLogicalBlock(ScopeObject.builder(ODU_FUNCTION).innerContainer(
- new ArrayList<>(Arrays.asList("provided-nrCellDu"))).container(ContainerType.ASSOCIATION)
- .topologyObjectType(TopologyObjectType.ENTITY).queryFunction(QueryFunction.EQ).leaf("cellLocalId")
- .parameter("1").resolverDataType(ResolverDataType.INTEGER).build());
+ new ArrayList<>(Arrays.asList("provided-nrCellDu"))).container(ContainerType.ID).topologyObjectType(
+ TopologyObjectType.ENTITY).queryFunction(QueryFunction.EQ).leaf("cellLocalId").parameter("1")
+ .resolverDataType(ResolverDataType.INTEGER).build());
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(scopeLogicalBlock3).build()));
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
filterCriteria));
-
// for id the PRIMITIVE dataType is set
LogicalBlock logicalBlock4 = scopeResolver.process(ODU_FUNCTION, "/ODUFunction[@id='odu1']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock4).build()));
-
basePathRefinement.validateScopeParametersDataType(filterCriteria);
Assertions.assertEquals(DataType.PRIMITIVE, ((ScopeLogicalBlock) logicalBlock4).getScopeObject().getDataType());
-
// error reason: for id INTEGER ResolverDataType is not accepted
LogicalBlock logicalBlock5 = scopeResolver.process(ODU_FUNCTION, "/ODUFunction[@id=1]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock5).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
filterCriteria));
-
// error reason: for gNBCUName attribute INTEGER ResolverDataType is not accepted
LogicalBlock logicalBlock6 = scopeResolver.process("OCUCPFunction", "/attributes[@gNBCUName=1]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock6).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
filterCriteria));
-
// for sourceIds container PRIMITIVE dataType is set
LogicalBlock logicalBlock7 = scopeResolver.process(ODU_FUNCTION, "/sourceIds[@items = 'someSourceId']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock7).build()));
-
basePathRefinement.validateScopeParametersDataType(filterCriteria);
-
Assertions.assertEquals(DataType.PRIMITIVE, scopeLogicalBlock1.getScopeObject().getDataType());
-
// error reason: for sourceIds container INTEGER dataType is not accepted
LogicalBlock logicalBlock8 = scopeResolver.process(ODU_FUNCTION, "/sourceIds[@items = 1]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock8).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
filterCriteria));
-
// for decorators container PRIMITIVE dataType is accepted
- LogicalBlock logicalBlock9 = scopeResolver.process(ODU_FUNCTION, "/decorators[@module-x:stringdata = 'ORAN']");
+ LogicalBlock logicalBlock9 = scopeResolver.process(ODU_FUNCTION, "/decorators[@module-x:stringdata = 'Ericsson']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock9).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateScopeParametersDataType(filterCriteria));
-
// for decorators container INTEGER dataType is accepted
LogicalBlock logicalBlock10 = scopeResolver.process(ODU_FUNCTION, "/decorators[@module-x:intdata = 2]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock10).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateScopeParametersDataType(filterCriteria));
-
LogicalBlock logicalBlock11 = scopeResolver.process(ODU_FUNCTION,
- "/decorators[contains(@gnbdu-function-model:location, 'Stock')]");
+ "/decorators[contains(@odu-function-model:location, 'Stock')]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock11).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateScopeParametersDataType(filterCriteria));
-
//For classifiers container PRIMITIVE dataType is accepted
LogicalBlock logicalBlock12 = scopeResolver.process(ODU_FUNCTION,
- "/classifiers[@item = 'gnbdu-function-model:Rural']");
+ "/classifiers[@item = 'odu-function-model:Rural']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock12).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateScopeParametersDataType(filterCriteria));
-
//For classifiers container INTEGER dataType is NOT accepted
LogicalBlock logicalBlock13 = scopeResolver.process(ODU_FUNCTION, "/classifiers[@item = 23 ]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock13).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateScopeParametersDataType(
filterCriteria));
-
//for complex attribute INTEGER is accepted
LogicalBlock logicalBlock14 = scopeResolver.process(ODU_FUNCTION, "/attributes/dUpLMNId[@mnc = 2]");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock14).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateScopeParametersDataType(filterCriteria));
-
//for complex attribute PRIMITIVE is accepted
LogicalBlock logicalBlock15 = scopeResolver.process(ODU_FUNCTION, "/attributes/dUpLMNId[@mnc = 'some value']");
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock15).build()));
-
+ Assertions.assertDoesNotThrow(() -> basePathRefinement.validateScopeParametersDataType(filterCriteria));
+ //for metadata container
+ LogicalBlock logicalBlock16 = scopeResolver.process(ODU_FUNCTION, "/metadata[@reliabilityIndicator = 'OK']");
+ filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(logicalBlock16).build()));
Assertions.assertDoesNotThrow(() -> basePathRefinement.validateScopeParametersDataType(filterCriteria));
}
"nCI")).build();
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject1, targetObject2))).build()));
-
OrLogicalBlock orLogicalBlock1 = new OrLogicalBlock();
-
ScopeObject scopeObject1 = ScopeObject.builder(ODU_FUNCTION).container(ContainerType.ATTRIBUTES).leaf("gNBIdLength")
.queryFunction(QueryFunction.EQ).parameter("1").dataType(DataType.BIGINT).build();
ScopeObject scopeObject2 = ScopeObject.builder(ODU_FUNCTION).container(ContainerType.ATTRIBUTES).leaf("gNBId")
.queryFunction(QueryFunction.EQ).parameter("8").dataType(DataType.BIGINT).build();
-
ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(scopeObject1);
ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(scopeObject2);
orLogicalBlock1.setChildren(new ArrayList<>(Arrays.asList(scopeLogicalBlock1, scopeLogicalBlock2)));
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject1, targetObject2))).scope(orLogicalBlock1).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.checkIfTargetMatchesWithScope(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.checkIfTargetMatchesWithScope(
filterCriteria.getFilterCriteriaList().get(0), filterCriteria.getDomain()));
-
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject1))).scope(orLogicalBlock1).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.checkIfTargetMatchesWithScope(filterCriteria
.getFilterCriteriaList().get(0), filterCriteria.getDomain()));
-
ScopeObject scopeObject3 = ScopeObject.builder("NRSectorCarrier").container(ContainerType.ATTRIBUTES).leaf(
"arfcnUL").queryFunction(QueryFunction.EQ).parameter("8").dataType(DataType.BIGINT).build();
-
ScopeLogicalBlock scopeLogicalBlock3 = new ScopeLogicalBlock(scopeObject3);
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject1))).scope(scopeLogicalBlock3).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.checkIfTargetMatchesWithScope(
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.checkIfTargetMatchesWithScope(
filterCriteria.getFilterCriteriaList().get(0), filterCriteria.getDomain()));
-
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(Collections.emptyList()).scope(
scopeLogicalBlock3).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.checkIfTargetMatchesWithScope(filterCriteria
.getFilterCriteriaList().get(0), filterCriteria.getDomain()));
-
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(Collections.emptyList()).scope(
EmptyLogicalBlock.getInstance()).build()));
-
Assertions.assertDoesNotThrow(() -> basePathRefinement.checkIfTargetMatchesWithScope(filterCriteria
.getFilterCriteriaList().get(0), filterCriteria.getDomain()));
-
}
@Test
"nRPCI")).build();
TargetObject targetObject4 = TargetObject.builder("EUtranCell").container(ContainerType.ATTRIBUTES).params(List.of(
"earFcn", "fdn")).isAllParamQueried(true).build();
-
ScopeObject scopeObject1 = ScopeObject.builder(ODU_FUNCTION).leaf("leaf1").build();
ScopeObject scopeObject2 = ScopeObject.builder("NRCellDU").leaf("leaf1").build();
ScopeObject scopeObject3 = ScopeObject.builder("EUtranCell").leaf("leaf1").build();
ScopeObject scopeObject4 = ScopeObject.builder(ODU_FUNCTION).leaf("leaf2").build();
ScopeObject scopeObject5 = ScopeObject.builder("NRCellDU").leaf("leaf2").build();
ScopeObject scopeObject6 = ScopeObject.builder("EUtranCell").leaf("leaf2").build();
-
OrLogicalBlock or1 = new OrLogicalBlock();
AndLogicalBlock and1 = new AndLogicalBlock();
AndLogicalBlock and2 = new AndLogicalBlock();
OrLogicalBlock or2 = new OrLogicalBlock();
OrLogicalBlock or3 = new OrLogicalBlock();
-
or1.getChildren().add(or2);
or1.getChildren().add(and1);
and1.getChildren().add(and2);
and2.getChildren().add(new ScopeLogicalBlock(scopeObject4));
or3.getChildren().add(new ScopeLogicalBlock(scopeObject5));
or3.getChildren().add(new ScopeLogicalBlock(scopeObject6));
-
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().targets(new ArrayList<>(Arrays.asList(
targetObject1, targetObject2, targetObject3, targetObject4))).scope(or1).build()));
-
basePathRefinement.splitFilterCriteria(filterCriteria);
-
OrLogicalBlock fc1or1 = new OrLogicalBlock();
-
fc1or1.getChildren().add(new ScopeLogicalBlock(scopeObject1));
fc1or1.getChildren().add(new ScopeLogicalBlock(scopeObject4));
-
OrLogicalBlock fc2or1 = new OrLogicalBlock();
-
fc2or1.getChildren().add(new ScopeLogicalBlock(scopeObject2));
fc2or1.getChildren().add(new ScopeLogicalBlock(scopeObject5));
-
AndLogicalBlock fc3and1 = new AndLogicalBlock();
fc3and1.getChildren().add(new ScopeLogicalBlock(scopeObject6));
fc3and1.getChildren().add(new ScopeLogicalBlock(scopeObject3));
-
InnerFilterCriteria innerFilterCriteria1 = InnerFilterCriteria.builder().targets(List.of(targetObject1)).scope(
fc1or1).build();
InnerFilterCriteria innerFilterCriteria2 = InnerFilterCriteria.builder().targets(List.of(targetObject2,
targetObject3)).scope(fc2or1).build();
InnerFilterCriteria innerFilterCriteria3 = InnerFilterCriteria.builder().targets(List.of(targetObject4)).scope(
fc3and1).build();
-
Assertions.assertEquals(Set.of(innerFilterCriteria1, innerFilterCriteria2, innerFilterCriteria3), new HashSet<>(
filterCriteria.getFilterCriteriaList()));
}
AndOrLogicalBlock orLogicalBlock3 = new OrLogicalBlock();
AndOrLogicalBlock andLogicalBlock1 = new AndLogicalBlock();
AndOrLogicalBlock andLogicalBlock2 = new AndLogicalBlock();
-
orLogicalBlock1.setChildren(new ArrayList<>(Arrays.asList(orLogicalBlock2, andLogicalBlock1)));
orLogicalBlock2.setChildren(new ArrayList<>(Arrays.asList(scopeLogicalBlock1, andLogicalBlock2)));
andLogicalBlock2.setChildren(new ArrayList<>(Arrays.asList(scopeLogicalBlock2, scopeLogicalBlock3)));
andLogicalBlock1.setChildren(new ArrayList<>(Arrays.asList(scopeLogicalBlock4, orLogicalBlock3)));
orLogicalBlock3.setChildren(new ArrayList<>(Arrays.asList(scopeLogicalBlock5, scopeLogicalBlock6)));
-
scopeLogicalBlock1.setValid(false);
scopeLogicalBlock4.setValid(false);
scopeLogicalBlock6.setValid(false);
-
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(orLogicalBlock1).build()));
-
basePathRefinement.validateQuery(filterCriteria);
-
Assertions.assertEquals(andLogicalBlock2, filterCriteria.getFilterCriteriaList().get(0).getScope());
-
ScopeLogicalBlock scopeLogicalBlock2_1 = new ScopeLogicalBlock(null);
ScopeLogicalBlock scopeLogicalBlock2_2 = new ScopeLogicalBlock(null);
AndOrLogicalBlock andLogicalBlock2_1 = new AndLogicalBlock();
-
scopeLogicalBlock2_1.setValid(false);
-
andLogicalBlock2_1.setChildren(new ArrayList<>(Arrays.asList(scopeLogicalBlock2_1, scopeLogicalBlock2_2)));
-
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(andLogicalBlock2_1).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateQuery(filterCriteria));
-
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateQuery(filterCriteria));
ScopeLogicalBlock scopeLogicalBlock3_1 = new ScopeLogicalBlock(null);
ScopeLogicalBlock scopeLogicalBlock3_2 = new ScopeLogicalBlock(null);
AndOrLogicalBlock orLogicalBlock3_1 = new OrLogicalBlock();
-
scopeLogicalBlock3_2.setValid(false);
scopeLogicalBlock3_1.setValid(false);
-
orLogicalBlock3_1.setChildren(new ArrayList<>(Arrays.asList(scopeLogicalBlock3_1, scopeLogicalBlock3_2)));
-
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(orLogicalBlock3_1).build()));
-
- Assertions.assertThrows(TiesPathException.class, () -> basePathRefinement.validateQuery(filterCriteria));
+ Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.validateQuery(filterCriteria));
}
@Test
filterCriteria.setFilterCriteriaList(List.of(InnerFilterCriteria.builder().scope(orLogicalBlock).build()));
OrLogicalBlock orLogicalBlockChild1 = new OrLogicalBlock();
OrLogicalBlock orLogicalBlockChild2 = new OrLogicalBlock();
-
LogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(ScopeObject.builder(ODU_FUNCTION).container(
ContainerType.ATTRIBUTES).leaf("gNBIdLength").queryFunction(QueryFunction.EQ).parameter("1").dataType(
DataType.BIGINT).build());
LogicalBlock scopeLogicalBlock4 = new ScopeLogicalBlock(ScopeObject.builder(ODU_FUNCTION).container(
ContainerType.ATTRIBUTES).leaf("gNBIdLength").queryFunction(QueryFunction.EQ).parameter("4").dataType(
DataType.BIGINT).build());
-
orLogicalBlockChild1.setChildren(Arrays.asList(scopeLogicalBlock1, scopeLogicalBlock2));
orLogicalBlockChild2.setChildren(Arrays.asList(scopeLogicalBlock3, scopeLogicalBlock4));
orLogicalBlock.setChildren(Arrays.asList(orLogicalBlockChild1, orLogicalBlockChild2));
-
basePathRefinement.runOnTree(orLogicalBlock, filterCriteria.getDomain(), (ScopeLogicalBlock lb, String domain) -> lb
.getScopeObject().setParameter("0"));
-
Assertions.assertEquals("0", ((ScopeLogicalBlock) scopeLogicalBlock1).getScopeObject().getParameter());
Assertions.assertEquals("0", ((ScopeLogicalBlock) scopeLogicalBlock2).getScopeObject().getParameter());
Assertions.assertEquals("0", ((ScopeLogicalBlock) scopeLogicalBlock3).getScopeObject().getParameter());
Assertions.assertEquals("0", ((ScopeLogicalBlock) scopeLogicalBlock4).getScopeObject().getParameter());
}
+
+ @Test
+ void testAssociationAttributesOnRelation() {
+ LogicalBlock logicalBlock = scopeResolver.resolve(null,
+ "/serving-antennaModule/attributes[@antennaModelNumber='5']");
+ final FilterCriteria filterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.RELATIONSHIP).build();
+
+ TeivPathException thrown = Assertions.assertThrows(TeivPathException.class, () -> basePathRefinement.refine(
+ filterCriteria));
+ Assertions.assertEquals("Querying any thing other than id is not supported in case of association of relation",
+ thrown.getDetails());
+
+ }
+
+ @Test
+ void testAssociationShouldFailDifferentRoot() {
+ Assertions.assertThrows(TeivPathException.class, () -> scopeResolver.resolve("NRCellDU",
+ "/ManagedElement/serving-antennaModule/attributes[@antennaModelNumber='5']"));
+ }
+
+ @Test
+ void testAssociationOnAttributes() {
+
+ LogicalBlock logicalBlock = scopeResolver.resolve(null,
+ "/NRCellDU/serving-antennaModule/attributes[@antennaModelNumber='5']");
+ final FilterCriteria filterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock = scopeResolver.process(null,
+ "/NRCellDU/serving-antennaModule/attributes[@antennaModelNumber='5']");
+
+ ScopeObject expectedScopeObject = ((ScopeLogicalBlock) expectedLogicalBlock).getScopeObject();
+ expectedScopeObject.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject.setContainer(ContainerType.ATTRIBUTES);
+ expectedScopeObject.setLeaf("antennaModelNumber");
+ expectedScopeObject.setQueryFunction(QueryFunction.EQ);
+ expectedScopeObject.setParameter("5");
+ expectedScopeObject.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria);
+
+ Assertions.assertEquals(expectedScopeObject, ((ScopeLogicalBlock) logicalBlock).getScopeObject());
+
+ LogicalBlock logicalBlock2 = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]");
+ final FilterCriteria filterCriteria2 = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock2).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock2 = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]");
+
+ ScopeObject expectedScopeObject2 = ((ScopeLogicalBlock) expectedLogicalBlock2).getScopeObject();
+ expectedScopeObject2.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject2.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject2.setContainer(ContainerType.ATTRIBUTES);
+ expectedScopeObject2.setLeaf("geo-location");
+ expectedScopeObject2.setQueryFunction(QueryFunction.COVERED_BY);
+ expectedScopeObject2.setParameter("POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))");
+ expectedScopeObject2.setDataType(DataType.GEOGRAPHIC);
+
+ basePathRefinement.refine(filterCriteria2);
+
+ Assertions.assertEquals(expectedScopeObject2, ((ScopeLogicalBlock) logicalBlock2).getScopeObject());
+
+ LogicalBlock logicalBlock3 = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]");
+ final FilterCriteria filterCriteria3 = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock3).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock3 = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]");
+
+ ScopeObject expectedScopeObject3 = ((ScopeLogicalBlock) expectedLogicalBlock3).getScopeObject();
+ expectedScopeObject3.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject3.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject3.setContainer(ContainerType.ATTRIBUTES);
+ expectedScopeObject3.setLeaf("geo-location");
+ expectedScopeObject3.setQueryFunction(QueryFunction.WITHIN_METERS);
+ expectedScopeObject3.setParameter("'POINT(49.40199 68.94199)', 500");
+ expectedScopeObject3.setDataType(DataType.GEOGRAPHIC);
+
+ basePathRefinement.refine(filterCriteria3);
+
+ Assertions.assertEquals(expectedScopeObject3, ((ScopeLogicalBlock) logicalBlock3).getScopeObject());
+
+ LogicalBlock logicalBlock4 = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/attributes[@antennaModelNumber='5']");
+ final FilterCriteria filterCriteria4 = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock4).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock4 = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/attributes[@antennaModelNumber='5']");
+
+ ScopeObject expectedScopeObject4 = ((ScopeLogicalBlock) expectedLogicalBlock4).getScopeObject();
+ expectedScopeObject4.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject4.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject4.setContainer(ContainerType.ATTRIBUTES);
+ expectedScopeObject4.setLeaf("antennaModelNumber");
+ expectedScopeObject4.setQueryFunction(QueryFunction.EQ);
+ expectedScopeObject4.setParameter("5");
+ expectedScopeObject4.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria4);
+
+ Assertions.assertEquals(expectedScopeObject4, ((ScopeLogicalBlock) logicalBlock4).getScopeObject());
+
+ LogicalBlock logicalBlock5 = scopeResolver.resolve(null,
+ "/serving-antennaModule/attributes[@antennaModelNumber='5']");
+ final FilterCriteria filterCriteria5 = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock5).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock5 = scopeResolver.process(null,
+ "/serving-antennaModule/attributes[@antennaModelNumber='5']");
+
+ ScopeObject expectedScopeObject5 = ((ScopeLogicalBlock) expectedLogicalBlock5).getScopeObject();
+ expectedScopeObject5.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject5.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject5.setContainer(ContainerType.ATTRIBUTES);
+ expectedScopeObject5.setLeaf("antennaModelNumber");
+ expectedScopeObject5.setQueryFunction(QueryFunction.EQ);
+ expectedScopeObject5.setParameter("5");
+ expectedScopeObject5.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria5);
+ Assertions.assertEquals(new ScopeLogicalBlock(expectedScopeObject5), filterCriteria5.getFilterCriteriaList().get(0)
+ .getScope());
+
+ }
+
+ @Test
+ void testAssociationOnSourceIds() {
+ LogicalBlock logicalBlock = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1']");
+ final FilterCriteria filterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1']");
+
+ ScopeObject expectedScopeObject = ((ScopeLogicalBlock) expectedLogicalBlock).getScopeObject();
+ expectedScopeObject.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject.setContainer(ContainerType.SOURCE_IDS);
+ expectedScopeObject.setLeaf("item");
+ expectedScopeObject.setQueryFunction(QueryFunction.EQ);
+ expectedScopeObject.setParameter(
+ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1");
+ expectedScopeObject.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria);
+
+ Assertions.assertEquals(expectedScopeObject, ((ScopeLogicalBlock) logicalBlock).getScopeObject());
+
+ LogicalBlock logicalBlock2 = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/sourceIds[contains(@item,'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1')]");
+ final FilterCriteria filterCriteria2 = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock2).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock2 = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/sourceIds[contains(@item,'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1')]");
+
+ ScopeObject expectedScopeObject2 = ((ScopeLogicalBlock) expectedLogicalBlock2).getScopeObject();
+ expectedScopeObject2.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject2.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject2.setContainer(ContainerType.SOURCE_IDS);
+ expectedScopeObject2.setLeaf("item");
+ expectedScopeObject2.setQueryFunction(QueryFunction.CONTAINS);
+ expectedScopeObject2.setParameter(
+ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1");
+ expectedScopeObject2.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria2);
+
+ Assertions.assertEquals(expectedScopeObject2, ((ScopeLogicalBlock) logicalBlock2).getScopeObject());
+
+ }
+
+ @Test
+ void testAssociationWrongSyntax() {
+ Assertions.assertThrows(TeivPathException.class, () -> scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/attributes/sourceIds[@item = 'sourceIds']"));
+ Assertions.assertThrows(TeivPathException.class, () -> scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/sourceIds/attributes[@item = 'sourceIds']"));
+ }
+
+ @Test
+ void testAssociationOnClassifiers() {
+ LogicalBlock logicalBlock = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/classifiers[@item='app-module:Rural']");
+ final FilterCriteria filterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/classifiers[@item='app-module:Rural']");
+
+ ScopeObject expectedScopeObject = ((ScopeLogicalBlock) expectedLogicalBlock).getScopeObject();
+ expectedScopeObject.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject.setContainer(ContainerType.CLASSIFIERS);
+ expectedScopeObject.setLeaf("item");
+ expectedScopeObject.setQueryFunction(QueryFunction.EQ);
+ expectedScopeObject.setParameter("app-module:Rural");
+ expectedScopeObject.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria);
+
+ Assertions.assertEquals(expectedScopeObject, ((ScopeLogicalBlock) logicalBlock).getScopeObject());
+
+ LogicalBlock logicalBlock2 = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/classifiers[contains(@item,'app-module:Rural')]");
+ final FilterCriteria filterCriteria2 = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock2).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock2 = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/classifiers[contains(@item,'app-module:Rural')]");
+
+ ScopeObject expectedScopeObject2 = ((ScopeLogicalBlock) expectedLogicalBlock2).getScopeObject();
+ expectedScopeObject2.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject2.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject2.setContainer(ContainerType.CLASSIFIERS);
+ expectedScopeObject2.setLeaf("item");
+ expectedScopeObject2.setQueryFunction(QueryFunction.CONTAINS);
+ expectedScopeObject2.setParameter("app-module:Rural");
+ expectedScopeObject2.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria2);
+
+ Assertions.assertEquals(expectedScopeObject2, ((ScopeLogicalBlock) logicalBlock2).getScopeObject());
+ }
+
+ @Test
+ void testAssociationOnDecorators() {
+ LogicalBlock logicalBlock = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/decorators[@test-app-module:textdata='Ericsson']");
+ final FilterCriteria filterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/decorators[@test-app-module:textdata='Ericsson']");
+
+ ScopeObject expectedScopeObject = ((ScopeLogicalBlock) expectedLogicalBlock).getScopeObject();
+ expectedScopeObject.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject.setContainer(ContainerType.DECORATORS);
+ expectedScopeObject.setLeaf("test-app-module:textdata");
+ expectedScopeObject.setQueryFunction(QueryFunction.EQ);
+ expectedScopeObject.setParameter("Ericsson");
+ expectedScopeObject.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria);
+
+ Assertions.assertEquals(expectedScopeObject, ((ScopeLogicalBlock) logicalBlock).getScopeObject());
+
+ }
+
+ @Test
+ void testAssociationOnMetadata() {
+ LogicalBlock logicalBlock = scopeResolver.resolve("NRCellDU",
+ "/serving-antennaModule/metadata[@reliabilityIndicator='OK']");
+ final FilterCriteria filterCriteria = FilterCriteria.builder("RAN").filterCriteriaList(List.of(InnerFilterCriteria
+ .builder().targets(targetResolver.resolve(null, null)).scope(logicalBlock).build()))
+ .resolvingTopologyObjectType(FilterCriteria.ResolvingTopologyObjectType.ENTITY).build();
+
+ LogicalBlock expectedLogicalBlock = scopeResolver.process("NRCellDU",
+ "/serving-antennaModule/metadata[@reliabilityIndicator='OK']");
+
+ ScopeObject expectedScopeObject = ((ScopeLogicalBlock) expectedLogicalBlock).getScopeObject();
+ expectedScopeObject.setTopologyObject("NRCellDU/serving-antennaModule");
+ expectedScopeObject.setTopologyObjectType(TopologyObjectType.ASSOCIATION);
+ expectedScopeObject.setContainer(ContainerType.METADATA);
+ expectedScopeObject.setLeaf("reliabilityIndicator");
+ expectedScopeObject.setQueryFunction(QueryFunction.EQ);
+ expectedScopeObject.setParameter("OK");
+ expectedScopeObject.setDataType(DataType.PRIMITIVE);
+
+ basePathRefinement.refine(filterCriteria);
+
+ Assertions.assertEquals(expectedScopeObject, ((ScopeLogicalBlock) logicalBlock).getScopeObject());
+ }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.refiner;
+package org.oran.smo.teiv.exposure.teivpath.refiner;
import java.util.List;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ContainerType;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.FilterCriteria;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.InnerFilterCriteria;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.QueryFunction;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeObject;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TargetObject;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TopologyObjectType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.FilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.InnerFilterCriteria;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeObject;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TargetObject;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TopologyObjectType;
import org.oran.smo.teiv.schema.DataType;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
" (\n" +
" select count(*)\n" +
" from (\n" +
- " select ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" \"o-ran-smo-teiv-ran:ODUFunction.id\"\n"
+ " select teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" \"o-ran-smo-teiv-ran:ODUFunction.id\"\n"
+
- " from ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"\n" +
- " where ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" = '123'\n" +
- " ) \"alias_101460301\"\n" +
+ " from teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"\n" +
+ " where teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" = '123'\n" +
+ " ) \"alias_10602194\"\n" +
" ) \"count\"\n" +
")\n" +
"union all (\n" +
" null \"count\"\n" +
" from (\n" +
" select\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBDUId\" \"o-ran-smo-teiv-ran:ODUFunction.attr.gNBDUId\",\n" +
- " ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" \"o-ran-smo-teiv-ran:ODUFunction.id\"\n"
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"gNBDUId\" \"o-ran-smo-teiv-ran:ODUFunction.attr.gNBDUId\",\n" +
+ " teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" \"o-ran-smo-teiv-ran:ODUFunction.id\"\n"
+
- " from ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"\n" +
- " where ties_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" = '123'\n" +
+ " from teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"\n" +
+ " where teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\".\"id\" = '123'\n" +
" order by \"o-ran-smo-teiv-ran:ODUFunction.id\" asc\n" +
- " ) \"alias_47405590\"\n" +
+ " ) \"alias_8925548\"\n" +
" limit 100\n" +
" offset 0\n" +
")", PathToJooqRefinement.toJooq(filterCriteria, 0, 100).toString());
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.resolver;
+package org.oran.smo.teiv.exposure.teivpath.resolver;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.AndOrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ContainerType;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.EmptyLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.LogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.OrLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.QueryFunction;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeLogicalBlock;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ScopeObject;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.AndOrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.EmptyLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.LogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.OrLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.QueryFunction;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeLogicalBlock;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ScopeObject;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
class ScopeResolverTest {
@Test
void resolveScopeWithMultipleTokensWithSameContainer() {
- ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(ScopeObject.builder("GNBDUFunction").container(
+ ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(ScopeObject.builder("*/GNBDUFunction").container(
ContainerType.ATTRIBUTES).leaf("gnBId").queryFunction(QueryFunction.EQ).parameter("1").resolverDataType(
ResolverDataType.INTEGER).build());
- ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(ScopeObject.builder("GNBDUFunction").container(
+ ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(ScopeObject.builder("*/GNBDUFunction").container(
ContainerType.ATTRIBUTES).leaf("date").queryFunction(QueryFunction.EQ).parameter("2").resolverDataType(
ResolverDataType.STRING).build());
- ScopeLogicalBlock scopeLogicalBlock3 = new ScopeLogicalBlock(ScopeObject.builder("GNBDUFunction").container(
+ ScopeLogicalBlock scopeLogicalBlock3 = new ScopeLogicalBlock(ScopeObject.builder("*/GNBDUFunction").container(
ContainerType.ATTRIBUTES).leaf("refs").queryFunction(QueryFunction.EQ).parameter("12341").resolverDataType(
ResolverDataType.INTEGER).build());
ScopeLogicalBlock scopeLogicalBlock4 = new ScopeLogicalBlock(ScopeObject.builder("*").container(
@Test
void resolveScopeWithWithinMetersGeoLocationConditionWithInvalidNumber() {
- assertThrows(TiesPathException.class, () -> scopeResolver.resolve(null,
+ assertThrows(TeivPathException.class, () -> scopeResolver.resolve(null,
"/attributes[withinMeters(@geo-location, 'POINT (12.3426 45.24568)', 50asd0)]"));
}
@Test
void resolveScopeWithWithinMetersGeoLocationConditionWithInvalidGrammar1() {
- assertThrows(TiesPathException.class, () -> scopeResolver.resolve(null,
+ assertThrows(TeivPathException.class, () -> scopeResolver.resolve(null,
"/attributes[withinMeters(@geo-location, 'POINT (12.3426 45.24568)' 500)]"));
}
@Test
void resolveScopeWithWithinMetersGeoLocationConditionWithInvalidGrammar2() {
- assertThrows(TiesPathException.class, () -> scopeResolver.resolve(null,
+ assertThrows(TeivPathException.class, () -> scopeResolver.resolve(null,
"/attributes[withinMeters(@geo-location, ,'POINT (12.3426 45.24568)', 500)]"));
}
@Test
void resolveScopeWithWithinMetersGeoLocationConditionWithInvalidGrammar3() {
- assertThrows(TiesPathException.class, () -> scopeResolver.resolve(null,
+ assertThrows(TeivPathException.class, () -> scopeResolver.resolve(null,
"/attributes[withinMeters('POINT (12.3426 45.24568)', 500)]"));
}
@Test
void resolveScopeWithWithinMetersGeoLocationConditionWithInvalidGrammar4() {
- assertThrows(TiesPathException.class, () -> scopeResolver.resolve(null,
+ assertThrows(TeivPathException.class, () -> scopeResolver.resolve(null,
"/attributes[withinMeters('POINT (12.3426 45.24568)', )]"));
}
@Test
void resolveScopeWithMultipleTokensWithDifferentContainers() {
- ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(ScopeObject.builder("GNBDUFunction").container(
+ ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(ScopeObject.builder("*/GNBDUFunction").container(
ContainerType.ATTRIBUTES).leaf("gnBId").queryFunction(QueryFunction.EQ).parameter("1").resolverDataType(
ResolverDataType.INTEGER).build());
- ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(ScopeObject.builder("GNBDUFunction").container(
+ ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(ScopeObject.builder("*/GNBDUFunction").container(
ContainerType.ATTRIBUTES).leaf("date").queryFunction(QueryFunction.EQ).parameter("2").resolverDataType(
ResolverDataType.STRING).build());
- ScopeLogicalBlock scopeLogicalBlock3 = new ScopeLogicalBlock(ScopeObject.builder("GNBDUFunction").container(
+ ScopeLogicalBlock scopeLogicalBlock3 = new ScopeLogicalBlock(ScopeObject.builder("*/GNBDUFunction").container(
ContainerType.ATTRIBUTES).leaf("refs").queryFunction(QueryFunction.EQ).parameter("12341").resolverDataType(
ResolverDataType.INTEGER).build());
ScopeLogicalBlock scopeLogicalBlock4 = new ScopeLogicalBlock(ScopeObject.builder("*").container(
@Test
void testRelationshipInScope() {
- ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("ManagedElement").container(null)
- .innerContainer(List.of("MANAGEDELEMENT_MANAGES_GNBDUFUNCTION")).leaf(null).queryFunction(
+ ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder(
+ "ManagedElement/MANAGEDELEMENT_MANAGES_GNBDUFUNCTION").container(null).leaf(null).queryFunction(
QueryFunction.NOT_NULL).parameter(null).resolverDataType(ResolverDataType.NOT_NULL).build());
final LogicalBlock logicalBlock = scopeResolver.resolve("ManagedElement", "/MANAGEDELEMENT_MANAGES_GNBDUFUNCTION");
Assertions.assertEquals(expected, logicalBlock);
@Test
void testNoLeavesInScope() {
- ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(ScopeObject.builder("ENodeBFunction").container(null)
- .innerContainer(List.of("managed-by-managedObject")).leaf(null).queryFunction(QueryFunction.NOT_NULL)
+ ScopeLogicalBlock scopeLogicalBlock1 = new ScopeLogicalBlock(ScopeObject.builder(
+ "ENodeBFunction/managed-by-managedObject").container(null).leaf(null).queryFunction(QueryFunction.NOT_NULL)
.parameter(null).resolverDataType(ResolverDataType.NOT_NULL).build());
- ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(ScopeObject.builder(null).container(null)
- .innerContainer(List.of("managed-by-managedObject")).leaf("id").queryFunction(QueryFunction.EQ).parameter(
- "me1").resolverDataType(ResolverDataType.STRING).build());
+ ScopeLogicalBlock scopeLogicalBlock2 = new ScopeLogicalBlock(ScopeObject.builder("*/managed-by-managedObject")
+ .container(null).innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1")
+ .resolverDataType(ResolverDataType.STRING).build());
AndOrLogicalBlock logicalBlock = new AndLogicalBlock();
logicalBlock.addChild(scopeLogicalBlock1);
logicalBlock.addChild(scopeLogicalBlock2);
@Test
void testResolveAssociationWithoutRootObjectInScopeFilter() {
- ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder(null).container(null).innerContainer(List.of(
- "managed-by-managedObject")).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(
+ ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("*/managed-by-managedObject").container(null)
+ .innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1").resolverDataType(
ResolverDataType.STRING).build());
final LogicalBlock resolvedScope = scopeResolver.resolve(null, "/managed-by-managedObject[@id='me1']");
Assertions.assertEquals(expected, resolvedScope);
@Test
void testExceptionWhenTextConditionUsedOnOtherThanID() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> scopeResolver.resolve(null,
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> scopeResolver.resolve(null,
"/ManagedElement[text()='me1']"));
assertEquals("text() is supported for ID only", thrown.getDetails());
}
@Test
void testResolveWithRootObjectAndAssociationInScopeFilter() {
- ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("ENodeBFunction").container(null)
- .innerContainer(List.of("managed-by-managedObject")).leaf("id").queryFunction(QueryFunction.EQ).parameter(
- "me1").resolverDataType(ResolverDataType.STRING).build());
+ ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("ENodeBFunction/managed-by-managedObject")
+ .container(null).innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.EQ).parameter("me1")
+ .resolverDataType(ResolverDataType.STRING).build());
final LogicalBlock resolvedScope = scopeResolver.resolve("ENodeBFunction", "/managed-by-managedObject[@id='me1']");
Assertions.assertEquals(expected, resolvedScope);
}
@Test
void testResolveWithRootObjectAndEntityInScopeFilter() {
- ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("ManagedElement").container(null)
- .innerContainer(List.of("GNBDUFunction")).leaf("id").queryFunction(QueryFunction.CONTAINS).parameter("me1")
+ ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("ManagedElement/GNBDUFunction").container(
+ null).innerContainer(List.of()).leaf("id").queryFunction(QueryFunction.CONTAINS).parameter("me1")
.resolverDataType(ResolverDataType.STRING).build());
final LogicalBlock resolvedScope = scopeResolver.resolve("ManagedElement", "/GNBDUFunction[contains(@id,'me1')]");
Assertions.assertEquals(expected, resolvedScope);
-
}
@Test
@Test
void testResolveComplexAttributeInScopeFilter() {
//Without root object & Entity type provided in the container
- ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("GNBCUCPFunction").container(
+ ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("*/GNBCUCPFunction").container(
ContainerType.ATTRIBUTES).innerContainer(List.of("pLMNId")).leaf("mcc").queryFunction(QueryFunction.EQ)
.parameter("01").resolverDataType(ResolverDataType.STRING).build());
final LogicalBlock resolvedScope = scopeResolver.resolve(null, "/GNBCUCPFunction/attributes/pLMNId[@mcc='01']");
.parameter("01").resolverDataType(ResolverDataType.STRING).build());
final LogicalBlock resolvedScope3 = scopeResolver.resolve("GNBCUCPFunction", "/attributes/pLMNId[@mcc='01']");
Assertions.assertEquals(expected3, resolvedScope3);
-
- //With root object & wrong Entity type not provided
- final TiesPathException exception = assertThrows(TiesPathException.class, () -> scopeResolver.resolve(
- "GNBCUCPFunction", "/GNBDUFunction/attributes/pLMNId[@mcc='01']"));
- Assertions.assertEquals("Target/Scope filter can only contain Root Object types mentioned in the path parameter",
- exception.getDetails());
}
@Test
void testExceptionWithTopologyObjectInScopeFilterWhichDoesNotHaveValidContainerTypeInLeaf() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> scopeResolver.resolve("ManagedElement",
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> scopeResolver.resolve("ManagedElement",
"/ManagedElement[@id1='me1']"));
assertEquals("id1 is not a valid leaf for topology object: ManagedElement", thrown.getDetails());
}
@Test
void testExceptionWithScopeFilterLeafButNoCondition() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> scopeResolver.resolve("ManagedElement",
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> scopeResolver.resolve("ManagedElement",
"/GNBDUFunction(fdn))"));
assertEquals("Parameter without any condition is not supported in scope filter", thrown.getDetails());
}
@Test
void testWithNoRootObjectAndNonMatchingContainerTypeInScopeFilter() {
- ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("ManagedElement").container(null)
+ ScopeLogicalBlock expected = new ScopeLogicalBlock(ScopeObject.builder("ManagedElement/attr").container(null)
.queryFunction(QueryFunction.CONTAINS).parameter("me1").resolverDataType(ResolverDataType.STRING)
- .innerContainer(List.of("attr")).leaf("id").build());
+ .innerContainer(List.of()).leaf("id").build());
final LogicalBlock resolvedScope = scopeResolver.resolve(null, "/ManagedElement/attr[contains(@id,'me1')]");
Assertions.assertEquals(expected, resolvedScope);
}
@Test
void testWithNonMatchingRootObjectInScopeFilter() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> scopeResolver.resolve("GNBDUFunction",
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> scopeResolver.resolve("GNBDUFunction",
"/ManagedElement/attr[contains(@id,'me1')]"));
assertEquals("Target/Scope filter can only contain Root Object types mentioned in the path parameter", thrown
.getDetails());
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* SPDX-License-Identifier: Apache-2.0
* ============LICENSE_END=========================================================
*/
-package org.oran.smo.teiv.exposure.tiespath.resolver;
+package org.oran.smo.teiv.exposure.teivpath.resolver;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.ContainerType;
-import org.oran.smo.teiv.exposure.tiespath.innerlanguage.TargetObject;
-import org.oran.smo.teiv.utils.query.exception.TiesPathException;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.ContainerType;
+import org.oran.smo.teiv.exposure.teivpath.innerlanguage.TargetObject;
+import org.oran.smo.teiv.utils.query.exception.TeivPathException;
class TargetResolverTest {
@Test
void testExceptionNonMatchingContainerType() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve("GNBDUFunction",
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve("GNBDUFunction",
"/bla"));
assertEquals("Invalid Container name or Root Object name does not match to the path parameter", thrown
.getDetails());
@Test
void testExceptionWhenTopologyObjectInTargetWithParamButNoMatchingContainer() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve(null,
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve(null,
"/GNBDUFunction(fdn, enbId)"));
assertEquals("Attributes cannot be associated at this level", thrown.getDetails());
}
@Test
void testAttributesOnSourceIds() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve(null,
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve(null,
"/GNBDUFunction/sourceIds(fdn, enbId)"));
assertEquals("Parameters are not supported for sourceIds in target filter", thrown.getDetails());
}
@Test
void testExceptionWithParamOnDecorators() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve(null,
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve(null,
"/GNBDUFunction/attributes(fdn, enbId); /GNBDUFunction/decorators(module-x:location,module-y:vendor)"));
assertEquals("Parameters are not supported for decorators in target filter", thrown.getDetails());
}
@Test
void testExceptionWithMoreThanTwoLevel() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve(null,
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve(null,
"/GNBDUFunction/NRCellDU/attributes"));
assertEquals("More than two level deep path is not allowed", thrown.getDetails());
}
@Test
void testExceptionWithPipeInTargetFilter() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve(null,
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve(null,
"/GNBDUFunction/attributes(fdn, enbId)|/GNBDUFunction/classifiers"));
assertEquals("OR (|) is not supported for target filter", thrown.getDetails());
}
@Test
void testExceptionWithScopeFilterInTargetFilter() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve("GNBDUFunction",
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve("GNBDUFunction",
"/GNBDUFunction/attributes[@gNBIdLength=3 or @abc=5 ]"));
assertEquals("Parameter condition is not supported in target filter", thrown.getDetails());
}
@Test
void testTargetWithoutSlash() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve("GNBDUFunction",
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve("GNBDUFunction",
"attributes"));
assertEquals("no viable alternative at input 'attributes' at line 1:0", thrown.getDetails());
}
@Test
void testDifferentTopologyObjectInTargetFilterAndRootObjectType() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve("GNBDUFunction",
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve("GNBDUFunction",
"/ENodeBFunction"));
assertEquals("Invalid Container name or Root Object name does not match to the path parameter", thrown
.getDetails());
@Test
void testDifferentTopologyObjectInTargetFilterWithAttributesAndRootObjectType() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve("GNBDUFunction",
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve("GNBDUFunction",
"/ENodeBFunction/attributes"));
assertEquals("Target/Scope filter can only contain Root Object types mentioned in the path parameter", thrown
.getDetails());
@Test
void testEmptyRootObjectTypeWithOneOfTheWrongTargetToken() {
- TiesPathException thrown = assertThrows(TiesPathException.class, () -> targetResolver.resolve(null,
+ TeivPathException thrown = assertThrows(TeivPathException.class, () -> targetResolver.resolve(null,
"/GNBDUFunction/attributes(fdn, enbId);/GNBDUFunction/NRCellDU/attributes"));
assertEquals("More than two level deep path is not allowed", thrown.getDetails());
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.junit.jupiter.api.Test;
import org.oran.smo.teiv.api.model.OranTeivHref;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
class PaginationUtilTest {
private static final RequestDetails requestDetails = RequestDetails.builder().basePath("/test").queryParam("q1", "val2")
assertEquals(0, limit3);
//offset is greater than totalCount
- TiesException exception = assertThrows(TiesException.class, () -> PaginationUtil.getViableLimit(15, 5, 10));
+ TeivException exception = assertThrows(TeivException.class, () -> PaginationUtil.getViableLimit(15, 5, 10));
assertEquals("Offset cannot be larger than 9", exception.getDetails());
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.SchemaLoaderException;
import org.oran.smo.teiv.schema.MockSchemaLoader;
@Test
void testValidateDomain() {
Assertions.assertDoesNotThrow(() -> requestValidator.validateDomain("RAN"));
- Assertions.assertThrowsExactly(TiesException.class, () -> requestValidator.validateDomain("RAN_WRONG"));
+ Assertions.assertThrowsExactly(TeivException.class, () -> requestValidator.validateDomain("RAN_WRONG"));
}
@Test
void testValidateEntityType() {
Assertions.assertDoesNotThrow(() -> requestValidator.validateEntityType("ODUFunction"));
- Assertions.assertThrowsExactly(TiesException.class, () -> requestValidator.validateEntityType("InvalidEntity"));
+ Assertions.assertThrowsExactly(TeivException.class, () -> requestValidator.validateEntityType("InvalidEntity"));
}
@Test
void testValidateEntityTypeInDomain() {
Assertions.assertDoesNotThrow(() -> requestValidator.validateEntityTypeInDomain("OCUUPFunction", "RAN"));
- Assertions.assertThrowsExactly(TiesException.class, () -> requestValidator.validateEntityTypeInDomain(
+ Assertions.assertThrowsExactly(TeivException.class, () -> requestValidator.validateEntityTypeInDomain(
"ODU_FUNCTION", "EQUIPMENT"));
}
@Test
void testValidateRelationshipType() {
Assertions.assertDoesNotThrow(() -> requestValidator.validateRelationshipType("ANTENNAMODULE_INSTALLED_AT_SITE"));
- Assertions.assertThrowsExactly(TiesException.class, () -> requestValidator.validateRelationshipType(
+ Assertions.assertThrowsExactly(TeivException.class, () -> requestValidator.validateRelationshipType(
"ANTENNAMODULE_INSTALLED_ON_SITE"));
}
void testValidateRelationshipTypeInDomain() {
Assertions.assertDoesNotThrow(() -> requestValidator.validateRelationshipTypeInDomain(
"ANTENNAMODULE_INSTALLED_AT_SITE", "EQUIPMENT"));
- Assertions.assertThrowsExactly(TiesException.class, () -> requestValidator.validateRelationshipTypeInDomain(
+ Assertions.assertThrowsExactly(TeivException.class, () -> requestValidator.validateRelationshipTypeInDomain(
"ANTENNAMODULE_INSTALLED_AT_SITE", "RAN"));
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.groups;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_CONSUMER_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_MODEL_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_CONSUMER_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_MODEL_SCHEMA;
import java.util.List;
import javax.sql.DataSource;
+import io.restassured.module.mockmvc.RestAssuredMockMvc;
+import org.springframework.context.ApplicationContext;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;
import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
+import org.oran.smo.teiv.exposure.audit.LoggerHandler;
+import org.oran.smo.teiv.groups.utils.GroupCreationRequestFilter;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.ActiveProfiles;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.oran.smo.teiv.TopologyApiBase;
import org.oran.smo.teiv.schema.PostgresSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
@AutoConfigureMockMvc
@SpringBootTest
@ActiveProfiles({ "test", "groups" })
public abstract class TopologyGroupsApiBase extends TopologyApiBase {
- public static final String TIES_GROUPS = "ties_groups";
+ public static final String TEIV_GROUPS = "teiv_groups";
+
+ @Autowired
+ private ApplicationContext context;
+ @Autowired
+ private MockMvc mockMvc;
+ @MockBean
+ private LoggerHandler loggerHandler;
@BeforeAll
public static void beforeAll() throws UnsupportedOperationException, SchemaLoaderException {
String url = postgresSQLContainer.getJdbcUrl();
DataSource ds = DataSourceBuilder.create().url(url).username("test").password("test").build();
DSLContext dslContext = DSL.using(ds, SQLDialect.POSTGRES);
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA, TIES_CONSUMER_DATA_SCHEMA, TIES_MODEL_SCHEMA,
- TIES_GROUPS), dslContext);
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA, TEIV_CONSUMER_DATA_SCHEMA, TEIV_MODEL_SCHEMA,
+ TEIV_GROUPS), dslContext);
TestPostgresqlContainer.loadModels();
TestPostgresqlContainer.loadSampleGroupsData();
PostgresSchemaLoader postgresSchemaLoader = new PostgresSchemaLoader(dslContext, new ObjectMapper());
postgresSchemaLoader.loadSchemaRegistry();
}
+
+ @BeforeEach
+ public void setup() {
+ GroupCreationRequestFilter groupCreationRequestFilter = new GroupCreationRequestFilter(loggerHandler);
+ mockMvc = MockMvcBuilders.webAppContextSetup((WebApplicationContext) context).addFilter(groupCreationRequestFilter,
+ "/topology-inventory/v1alpha11/groups").build();
+
+ RestAssuredMockMvc.mockMvc(mockMvc);
+ }
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.ingestion.validation;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
import static org.jooq.impl.DSL.table;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import org.oran.smo.teiv.schema.RelationshipDataLocation;
import org.oran.smo.teiv.schema.SchemaLoaderException;
import org.oran.smo.teiv.schema.SchemaRegistry;
-import org.oran.smo.teiv.service.TiesDbOperations;
+import org.oran.smo.teiv.service.TeivDbOperations;
import org.oran.smo.teiv.service.cloudevent.data.Entity;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
import org.oran.smo.teiv.service.cloudevent.data.Relationship;
private static TestPostgresqlContainer postgresqlContainer = TestPostgresqlContainer.getInstance();
@Autowired
- private TiesDbOperations tiesDbOperations;
+ private TeivDbOperations teivDbOperations;
@SpyBean
private IngestionOperationValidatorFactory validatorFactory;
registry.add("spring.datasource.write.password", () -> postgresqlContainer.getPassword());
}
- private TiesDbServiceForValidation spiedDbServiceForValidation;
+ private TeivDbServiceForValidation spiedDbServiceForValidation;
@BeforeAll
static void beforeAll() {
PostgresSchemaLoader postgresSchemaLoader = new PostgresSchemaLoader(writeDataDslContext, new ObjectMapper());
postgresSchemaLoader.loadSchemaRegistry();
when(validatorFactory.createValidator(any())).thenAnswer(i -> {
- spiedDbServiceForValidation = spy(new TiesDbServiceForValidation((DSLContext) i.getArguments()[0]));
+ spiedDbServiceForValidation = spy(new TeivDbServiceForValidation((DSLContext) i.getArguments()[0]));
return new IngestionOperationValidator(spiedDbServiceForValidation);
});
}
@BeforeEach
public void deleteAll() {
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA), writeDataDslContext);
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA), writeDataDslContext);
if (spiedDbServiceForValidation != null) {
reset(spiedDbServiceForValidation);
}
.of()));
ParsedCloudEventData parsedCloudEventData = new ParsedCloudEventData(entities, relationships);
//It's expected to fail, because the NRCellDU_1 entity would be connected to 2 ManagedElement instances
- assertThrows(MaximumCardinalityViolationException.class, () -> tiesDbOperations
+ assertThrows(MaximumCardinalityViolationException.class, () -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, "testSource"));
//The whole transaction is rolled back. Neither the entities nor the relationships are persisted.
- assertEmptyTable("ties_data.\"28C9A375E800E82308EBE7DA2932EF2C0AF13C38\"");
- assertEmptyTable("ties_data.\"84E676149362F50C55FE1E004B98D4891916BBF3\"");
+ assertEmptyTable("teiv_data.\"28C9A375E800E82308EBE7DA2932EF2C0AF13C38\"");
+ assertEmptyTable("teiv_data.\"84E676149362F50C55FE1E004B98D4891916BBF3\"");
//Remove the extra relationship that caused the cardinality violation. Successfully insert the others.
Relationship redundantRelationship = relationships.remove(1);
ParsedCloudEventData parsedCloudEventData2 = new ParsedCloudEventData(entities, relationships);
- assertEquals(entities.size() + relationships.size(), tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ assertEquals(entities.size() + relationships.size(), teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData2, "testSource").size());
verify(spiedDbServiceForValidation).acquireEntityInstanceExclusiveLock(
- "ties_data.\"84E676149362F50C55FE1E004B98D4891916BBF3\"", "NRCellDU_1");
+ "teiv_data.\"84E676149362F50C55FE1E004B98D4891916BBF3\"", "NRCellDU_1");
//Try to insert an extra relationship. It's expected to fail, because the NRCellDU_1 entity already has the maximum number of relationships.
ParsedCloudEventData parsedCloudEventData3 = new ParsedCloudEventData(List.of(), List.of(redundantRelationship));
- assertThrows(MaximumCardinalityViolationException.class, () -> tiesDbOperations
+ assertThrows(MaximumCardinalityViolationException.class, () -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData3, "testSource"));
}
"TestEntityB_3", List.of()));
ParsedCloudEventData parsedCloudEventData = new ParsedCloudEventData(entities, relationships);
//It's expected to fail, because the TestEntityA_1 entity would be connected to 3 TestEntityB instances
- assertThrows(MaximumCardinalityViolationException.class, () -> tiesDbOperations
+ assertThrows(MaximumCardinalityViolationException.class, () -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, "testSource"));
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityA\"", "TestEntityA_1");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityA\"", "TestEntityA_1");
//The whole transaction is rolled back. Neither the entities nor the relationships are persisted.
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TestEntityA\"");
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TestEntityA\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"");
//Remove the extra relationship that caused the cardinality violation. Successfully insert the others.
Relationship redundantRelationship = relationships.remove(2);
ParsedCloudEventData parsedCloudEventData2 = new ParsedCloudEventData(entities, relationships);
- assertEquals(entities.size() + relationships.size(), tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ assertEquals(entities.size() + relationships.size(), teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData2, "testSource").size());
verify(spiedDbServiceForValidation, times(2)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityA\"", "TestEntityA_1");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityA\"", "TestEntityA_1");
verify(spiedDbServiceForValidation, times(2)).executeValidationQuery(any(), any(), any(), any(Long.class));
verifyNoMoreInteractions(spiedDbServiceForValidation);
//Try to insert an extra relationship. It's expected to fail, because the CloudNativeSystem_1 entity already has the maximum number of relationships.
ParsedCloudEventData parsedCloudEventData3 = new ParsedCloudEventData(List.of(), List.of(redundantRelationship));
- assertThrows(MaximumCardinalityViolationException.class, () -> tiesDbOperations
+ assertThrows(MaximumCardinalityViolationException.class, () -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData3, "testSource"));
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityA\"", "TestEntityA_1");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityA\"", "TestEntityA_1");
}
@Test
"TestEntityA_1", "TestEntityB_4", List.of()));
ParsedCloudEventData parsedCloudEventData = new ParsedCloudEventData(entities, relationships);
//It's expected to fail, because the TestEntityA_1 entity would be connected to 4 TestEntityB instances
- assertThrows(MaximumCardinalityViolationException.class, () -> tiesDbOperations
+ assertThrows(MaximumCardinalityViolationException.class, () -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, "testSource"));
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_1");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_1");
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityA\"", "TestEntityA_1");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityA\"", "TestEntityA_1");
//The whole transaction is rolled back. Neither the entities nor the relationships are persisted.
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TestEntityA\"");
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"");
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TestEntityA\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB\"");
//Test the other side's cardinality as well
relationships = new ArrayList<>();
ParsedCloudEventData parsedCloudEventData2 = new ParsedCloudEventData(entities, relationships);
//It's expected to fail, because the TestEntityB_1 entity would be connected to 3 TestEntityA instances
- assertThrows(MaximumCardinalityViolationException.class, () -> tiesDbOperations
+ assertThrows(MaximumCardinalityViolationException.class, () -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData2, "testSource"));
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_1");
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TestEntityA\"");
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"");
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB\"");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_1");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TestEntityA\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB\"");
}
@Test
"TestEntityB_1", List.of()));
ParsedCloudEventData parsedCloudEventData = new ParsedCloudEventData(entities, relationships);
//It's expected to fail, because the TestEntityB_1 entity would be connected to 3 TestEntityB instances
- assertThrows(MaximumCardinalityViolationException.class, () -> tiesDbOperations
+ assertThrows(MaximumCardinalityViolationException.class, () -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, "testSource"));
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_1");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_1");
//The whole transaction is rolled back. Neither the entities nor the relationships are persisted.
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TestEntityA\"");
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"");
- assertEmptyTable("ties_data.\"o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TestEntityA\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"");
+ assertEmptyTable("teiv_data.\"o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB\"");
//Test the other side's cardinality
entities.add(new Entity("o-ran-smo-teiv-ran", "TestEntityB", "TestEntityB_2", Map.of(), List.of()));
relationships.add(new Relationship("o-ran-smo-teiv-ran", "TESTENTITYA_GROUPS_TESTENTITYB", "rel_3", "TestEntityA_1",
"TestEntityB_3", List.of()));
ParsedCloudEventData parsedCloudEventData2 = new ParsedCloudEventData(entities, relationships);
- assertEquals(entities.size() + relationships.size(), tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ assertEquals(entities.size() + relationships.size(), teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData2, "testSource").size());
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_1");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_1");
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_2");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_2");
verify(spiedDbServiceForValidation, times(1)).acquireEntityInstanceExclusiveLock(
- "ties_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_3");
+ "teiv_data.\"o-ran-smo-teiv-ran_TestEntityB\"", "TestEntityB_3");
verify(spiedDbServiceForValidation, times(3)).executeValidationQuery(any(), any(), any(), any(Long.class));
verifyNoMoreInteractions(spiedDbServiceForValidation);
}
@Test
void testMaxCardinalityIsLong() {
- assertFalse(new TiesDbServiceForValidation(null).executeValidationQuery("", "", "", Long.MAX_VALUE));
+ assertFalse(new TeivDbServiceForValidation(null).executeValidationQuery("", "", "", Long.MAX_VALUE));
}
void assertEmptyTable(String tableName) {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.listener.audit.ExecutionStatus;
import org.oran.smo.teiv.listener.audit.IngestionAuditLogger;
import org.oran.smo.teiv.service.RelationshipMergeValidator;
-import org.oran.smo.teiv.service.TiesDbOperations;
+import org.oran.smo.teiv.service.TeivDbOperations;
import io.cloudevents.CloudEvent;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
-import org.oran.smo.teiv.service.TiesDbService;
+import org.oran.smo.teiv.service.TeivDbService;
+import org.oran.smo.teiv.service.TeivMetadataResolver;
import org.oran.smo.teiv.service.cloudevent.CloudEventParser;
import org.oran.smo.teiv.service.cloudevent.data.Entity;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
private CustomMetrics metrics;
@Mock
- private TiesDbService tiesDbService;
+ private TeivDbService teivDbService;
@Mock
private IngestionAuditLogger auditLogger;
- private TiesDbOperations tiesDbOperations;
+ private TeivDbOperations teivDbOperations;
@BeforeAll
static void setUpAll() throws SchemaLoaderException {
@BeforeEach
void setUp() {
- tiesDbOperations = new TiesDbOperations(tiesDbService, new IngestionOperationValidatorFactory(),
- new RelationshipMergeValidator());
- createTopologyProcessor = new CreateTopologyProcessor(cloudEventParser, metrics, tiesDbOperations, auditLogger);
+ teivDbOperations = new TeivDbOperations(teivDbService, new IngestionOperationValidatorFactory(),
+ new RelationshipMergeValidator(), new TeivMetadataResolver());
+ createTopologyProcessor = new CreateTopologyProcessor(cloudEventParser, metrics, teivDbOperations, auditLogger);
}
@Test
ParsedCloudEventData parsedData = new ParsedCloudEventData(List.of(entity), List.of());
when(cloudEventParser.getCloudEventData(any())).thenReturn(parsedData);
- doThrow(new RuntimeException("test error")).when(tiesDbService).execute(anyList());
+ doThrow(new RuntimeException("test error")).when(teivDbService).execute(anyList());
Assertions.assertDoesNotThrow(() -> createTopologyProcessor.process(event, anyString()));
- verify(tiesDbService, times(1)).execute(anyList());
+ verify(teivDbService, times(1)).execute(anyList());
verify(auditLogger).auditLog(eq(ExecutionStatus.FAILED), eq("create"), any(CloudEvent.class), anyString(),
anyString());
when(cloudEventParser.getCloudEventData(any())).thenReturn(parsedData);
createTopologyProcessor.process(event, anyString());
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumSuccessfullyParsedCreateCloudEvents();
verify(metrics, times(1)).incrementNumUnsuccessfullyPersistedCreateCloudEvents();
when(cloudEventParser.getCloudEventData(any())).thenReturn(parsedData);
createTopologyProcessor.process(event, anyString());
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumSuccessfullyParsedCreateCloudEvents();
verify(metrics, times(1)).incrementNumUnsuccessfullyPersistedCreateCloudEvents();
when(cloudEventParser.getCloudEventData(ArgumentMatchers.any())).thenReturn(null);
createTopologyProcessor.process(event, anyString());
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumUnsuccessfullyParsedCreateCloudEvents();
verifyNoMoreInteractions(metrics);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.listener.audit.ExecutionStatus;
import org.oran.smo.teiv.listener.audit.IngestionAuditLogger;
import org.oran.smo.teiv.service.RelationshipMergeValidator;
-import org.oran.smo.teiv.service.TiesDbOperations;
+import org.oran.smo.teiv.service.TeivDbOperations;
import io.cloudevents.CloudEvent;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
-import org.oran.smo.teiv.service.TiesDbService;
+import org.oran.smo.teiv.service.TeivDbService;
+import org.oran.smo.teiv.service.TeivMetadataResolver;
import org.oran.smo.teiv.service.cloudevent.CloudEventParser;
import org.oran.smo.teiv.service.cloudevent.data.Entity;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
private CustomMetrics metrics;
@Mock
- private TiesDbService tiesDbService;
+ private TeivDbService teivDbService;
@Mock
private IngestionAuditLogger auditLogger;
- private TiesDbOperations tiesDbOperations;
+ private TeivDbOperations teivDbOperations;
@BeforeAll
static void setUpAll() throws SchemaLoaderException {
@BeforeEach
void setUp() {
- tiesDbOperations = new TiesDbOperations(tiesDbService, new IngestionOperationValidatorFactory(),
- new RelationshipMergeValidator());
- deleteTopologyProcessor = new DeleteTopologyProcessor(cloudEventParser, tiesDbService, tiesDbOperations, metrics,
+ teivDbOperations = new TeivDbOperations(teivDbService, new IngestionOperationValidatorFactory(),
+ new RelationshipMergeValidator(), new TeivMetadataResolver());
+ deleteTopologyProcessor = new DeleteTopologyProcessor(cloudEventParser, teivDbService, teivDbOperations, metrics,
auditLogger);
}
ParsedCloudEventData parsedData = new ParsedCloudEventData(List.of(entity), List.of());
when(cloudEventParser.getCloudEventData(any())).thenReturn(parsedData);
- doThrow(new RuntimeException("Discard event by expected test behavior")).when(tiesDbService).execute(anyList());
+ doThrow(new RuntimeException("Discard event by expected test behavior")).when(teivDbService).execute(anyList());
Assertions.assertDoesNotThrow(() -> deleteTopologyProcessor.process(event, anyString()));
- verify(tiesDbService, times(1)).execute(anyList());
+ verify(teivDbService, times(1)).execute(anyList());
verify(auditLogger).auditLog(eq(ExecutionStatus.FAILED), eq("delete"), any(CloudEvent.class), anyString(),
anyString());
when(cloudEventParser.getCloudEventData(ArgumentMatchers.any())).thenReturn(null);
deleteTopologyProcessor.process(event, anyString());
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumUnsuccessfullyParsedDeleteCloudEvents();
verifyNoMoreInteractions(metrics);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.listener.audit.ExecutionStatus;
import org.oran.smo.teiv.listener.audit.IngestionAuditLogger;
import org.oran.smo.teiv.service.RelationshipMergeValidator;
-import org.oran.smo.teiv.service.TiesDbOperations;
+import org.oran.smo.teiv.service.TeivDbOperations;
import io.cloudevents.CloudEvent;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoaderException;
-import org.oran.smo.teiv.service.TiesDbService;
+import org.oran.smo.teiv.service.TeivDbService;
+import org.oran.smo.teiv.service.TeivMetadataResolver;
import org.oran.smo.teiv.service.cloudevent.CloudEventParser;
import org.oran.smo.teiv.service.cloudevent.data.Entity;
import org.oran.smo.teiv.service.cloudevent.data.ParsedCloudEventData;
private CustomMetrics metrics;
@Mock
- private TiesDbService tiesDbService;
+ private TeivDbService teivDbService;
@Mock
private IngestionAuditLogger auditLogger;
- private TiesDbOperations tiesDbOperations;
+ private TeivDbOperations teivDbOperations;
@BeforeAll
static void setUpAll() throws SchemaLoaderException {
@BeforeEach
void setUp() {
- tiesDbOperations = new TiesDbOperations(tiesDbService, new IngestionOperationValidatorFactory(),
- new RelationshipMergeValidator());
- mergeTopologyProcessor = new MergeTopologyProcessor(cloudEventParser, metrics, tiesDbOperations, auditLogger);
+ teivDbOperations = new TeivDbOperations(teivDbService, new IngestionOperationValidatorFactory(),
+ new RelationshipMergeValidator(), new TeivMetadataResolver());
+ mergeTopologyProcessor = new MergeTopologyProcessor(cloudEventParser, metrics, teivDbOperations, auditLogger);
}
@Test
ParsedCloudEventData parsedData = new ParsedCloudEventData(List.of(entity), List.of());
when(cloudEventParser.getCloudEventData(any())).thenReturn(parsedData);
- doThrow(new RuntimeException("Discard event by expected test behavior")).when(tiesDbService).execute(anyList());
+ doThrow(new RuntimeException("Discard event by expected test behavior")).when(teivDbService).execute(anyList());
Assertions.assertDoesNotThrow(() -> mergeTopologyProcessor.process(event, anyString()));
- verify(tiesDbService, times(1)).execute(anyList());
+ verify(teivDbService, times(1)).execute(anyList());
verify(auditLogger).auditLog(eq(ExecutionStatus.FAILED), eq("merge"), any(CloudEvent.class), anyString(),
anyString());
when(cloudEventParser.getCloudEventData(ArgumentMatchers.any())).thenReturn(parsedData);
mergeTopologyProcessor.process(event, anyString());
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumSuccessfullyParsedMergeCloudEvents();
verify(metrics, times(1)).incrementNumUnsuccessfullyPersistedMergeCloudEvents();
when(cloudEventParser.getCloudEventData(ArgumentMatchers.any())).thenReturn(parsedData);
mergeTopologyProcessor.process(event, anyString());
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumSuccessfullyParsedMergeCloudEvents();
verify(metrics, times(1)).incrementNumUnsuccessfullyPersistedMergeCloudEvents();
when(cloudEventParser.getCloudEventData(ArgumentMatchers.any())).thenReturn(null);
mergeTopologyProcessor.process(event, anyString());
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumUnsuccessfullyParsedMergeCloudEvents();
verifyNoMoreInteractions(metrics);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.oran.smo.teiv.schema.BidiDbNameMapper;
import org.oran.smo.teiv.schema.EntityType;
import org.oran.smo.teiv.schema.SchemaRegistry;
-import org.oran.smo.teiv.service.TiesDbOperations;
-import org.oran.smo.teiv.service.TiesDbService;
+import org.oran.smo.teiv.service.TeivDbOperations;
+import org.oran.smo.teiv.service.TeivDbService;
@ExtendWith(MockitoExtension.class)
class SourceEntityDeleteTopologyProcessorTest {
private CustomMetrics metrics;
@Mock
- private TiesDbService tiesDbService;
+ private TeivDbService teivDbService;
@Mock
- private TiesDbOperations tiesDbOperations;
+ private TeivDbOperations teivDbOperations;
@Mock
private IngestionAuditLogger auditLogger;
@BeforeEach
void setUp() {
- sourceEntityDeleteTopologyProcessor = new SourceEntityDeleteTopologyProcessor(tiesDbService, new ObjectMapper(),
- metrics, tiesDbOperations, auditLogger);
+ sourceEntityDeleteTopologyProcessor = new SourceEntityDeleteTopologyProcessor(teivDbService, new ObjectMapper(),
+ metrics, teivDbOperations, auditLogger);
}
@Test
assertDoesNotThrow(() -> sourceEntityDeleteTopologyProcessor.process(event, "messageKey"));
// then
mockedSchemaRegistry.verifyNoInteractions();
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumUnsuccessfullyParsedSourceEntityDeleteCloudEvents();
verifyNoMoreInteractions(metrics);
assertDoesNotThrow(() -> sourceEntityDeleteTopologyProcessor.process(event, "messageKey"));
// then
mockedSchemaRegistry.verifyNoInteractions();
- verifyNoInteractions(tiesDbService);
+ verifyNoInteractions(teivDbService);
verify(metrics, times(1)).incrementNumReceivedCloudEventNotSupported();
verifyNoMoreInteractions(metrics);
CloudEvent event = CloudEventTestUtil.getCloudEvent(EVENT_TYPE, "{\"type\":\"cmHandle\",\"value\":\"abc\"}");
mockedSchemaRegistry.when(SchemaRegistry::getEntityTypes).thenReturn(List.of(entityType));
- doThrow(new RuntimeException()).when(tiesDbService).execute(anyList());
+ doThrow(new RuntimeException()).when(teivDbService).execute(anyList());
// when
assertDoesNotThrow(() -> sourceEntityDeleteTopologyProcessor.process(event, "messageKey"));
// then
mockedSchemaRegistry.verify(SchemaRegistry::getEntityTypes, times(1));
- verify(tiesDbService, times(1)).execute(anyList());
+ verify(teivDbService, times(1)).execute(anyList());
verify(metrics, times(1)).incrementNumSuccessfullyParsedSourceEntityDeleteCloudEvents();
verify(metrics, times(1)).incrementNumUnsuccessfullyPersistedSourceEntityDeleteCloudEvents();
OperationResult mockOperationResult = mock(OperationResult.class);
EntityType gnbduFunction = EntityType.builder().name("GNBDUFunction").build();
when(SchemaRegistry.getEntityTypes()).thenReturn(List.of(gnbduFunction));
- when(tiesDbOperations.selectByCmHandleFormSourceIds(any(), anyString(), anyString())).thenReturn(List.of(
+ when(teivDbOperations.selectByCmHandleFormSourceIds(any(), anyString(), anyString())).thenReturn(List.of(
"result1"));
- when(tiesDbOperations.deleteEntity(any(), any(), anyString())).thenReturn(List.of(mockOperationResult));
+ when(teivDbOperations.deleteEntity(any(), any(), anyString())).thenReturn(List.of(mockOperationResult));
doAnswer(new Answer<Void>() {
@Override
public Void answer(InvocationOnMock invocation) {
});
return null;
}
- }).when(tiesDbService).execute(anyList());
+ }).when(teivDbService).execute(anyList());
// when
assertDoesNotThrow(() -> sourceEntityDeleteTopologyProcessor.process(event, "messageKey"));
// then
mockedSchemaRegistry.verify(SchemaRegistry::getEntityTypes, times(1));
- verify(tiesDbService, atLeastOnce()).execute(anyList());
- verify(tiesDbOperations, atLeastOnce()).selectByCmHandleFormSourceIds(any(), anyString(), anyString());
- verify(tiesDbOperations, atLeastOnce()).deleteEntity(any(), any(), anyString());
+ verify(teivDbService, atLeastOnce()).execute(anyList());
+ verify(teivDbOperations, atLeastOnce()).selectByCmHandleFormSourceIds(any(), anyString(), anyString());
+ verify(teivDbOperations, atLeastOnce()).deleteEntity(any(), any(), anyString());
verify(metrics, times(1)).incrementNumSuccessfullyParsedSourceEntityDeleteCloudEvents();
verify(metrics, times(1)).incrementNumSuccessfullyPersistedSourceEntityDeleteCloudEvents();
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.oran.smo.teiv.schema.DataType.GEOGRAPHIC;
import static org.oran.smo.teiv.schema.DataType.INTEGER;
import static org.oran.smo.teiv.schema.DataType.PRIMITIVE;
-import static org.oran.smo.teiv.schema.DataType.TIMESTAMPTZ;
-import static org.oran.smo.teiv.utils.TiesConstants.TEIV_DOMAIN;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DOMAIN;
public class MockSchemaLoader extends SchemaLoader {
"src/test/resources/pgsqlschema/01_init-oran-smo-teiv-model.sql"));
String line;
while ((line = reader.readLine()) != null) {
- if (line.startsWith("COPY ties_model." + tableName)) {
+ if (line.startsWith("COPY teiv_model." + tableName)) {
while (!(line = reader.readLine()).startsWith("\\.")) {
List<String> l = List.of(line.split("\t"));
modelInfo.add(l);
"src/test/resources/pgsqlschema/00_init-oran-smo-teiv-data.sql"));
String line;
while ((line = reader.readLine()) != null) {
- if (line.startsWith("CREATE TABLE IF NOT EXISTS ties_data.\"" + tableName + "\"")) {
+ if (line.startsWith("CREATE TABLE IF NOT EXISTS teiv_data.\"" + tableName + "\"")) {
while (!(line = reader.readLine()).startsWith(");")) {
List<String> l = List.of(line.trim().replace("\t\t\t", "\t").replaceAll("[\",]", "").split("\t"));
String fieldName = l.get(0);
extractFieldName(dataFields, fieldName, dataType);
}
}
- if (line.startsWith("ALTER TABLE ties_data.\"" + tableName + "\" ADD COLUMN IF NOT EXISTS")) {
+ if (line.startsWith("ALTER TABLE teiv_data.\"" + tableName + "\" ADD COLUMN IF NOT EXISTS")) {
String[] str = line.trim().split("\\s+");
String fieldName = str[str.length - 2].replaceAll("\"", "");
String dataType = str[str.length - 1].replace(";", "");
case "DECIMAL" -> dataFields.put(fieldName, DECIMAL);
case "jsonb" -> dataFields.put(fieldName, CONTAINER);
case "geography" -> dataFields.put(fieldName, GEOGRAPHIC);
- case "TIMESTAMPTZ" -> dataFields.put(fieldName, TIMESTAMPTZ);
case "BYTEA" -> dataFields.put(fieldName, BYTEA);
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.schema;
-import static org.oran.smo.teiv.exposure.tiespath.refiner.AliasMapper.hashAlias;
+import static org.oran.smo.teiv.exposure.teivpath.refiner.AliasMapper.hashAlias;
import static org.oran.smo.teiv.schema.RelationshipDataLocation.A_SIDE;
import static org.oran.smo.teiv.schema.RelationshipDataLocation.B_SIDE;
import static org.oran.smo.teiv.schema.RelationshipDataLocation.RELATION;
import static org.oran.smo.teiv.schema.SchemaRegistryErrorCode.ENTITY_NOT_FOUND_IN_DOMAIN;
import static org.oran.smo.teiv.schema.SchemaRegistryErrorCode.RELATIONSHIP_NOT_FOUND_IN_DOMAIN;
import static org.oran.smo.teiv.schema.SchemaRegistryErrorCode.RELATIONSHIP_NOT_FOUND_IN_MODULE;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.TEIV_DOMAIN;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DOMAIN;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA;
import static org.jooq.impl.DSL.field;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.Map;
import java.util.Set;
+import org.jooq.JSONB;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exposure.spi.Module;
class SchemaRegistryTest {
assertEquals(expectedDomain, oamToRanModule.getDomain());
assertEquals(expectedIncludedModules, oamToRanModule.getIncludedModuleNames());
- assertThrows(TiesException.class, () -> SchemaRegistry.getModuleByName("invalid-module"));
+ assertThrows(TeivException.class, () -> SchemaRegistry.getModuleByName("invalid-module"));
}
@Test
@Test
void testGetModuleByDomainThrowsUnknownDomainException() {
- assertThrows(TiesException.class, () -> SchemaRegistry.getModuleByDomain("throwError"));
+ assertThrows(TeivException.class, () -> SchemaRegistry.getModuleByDomain("throwError"));
}
//Entities
//given
EntityType oduFunction = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran", "ODUFunction");
//then
- assertEquals("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFunction.getTableName());
+ assertEquals("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFunction.getTableName());
}
@Test
@Test
void testGetFieldsForEntity() throws SchemaRegistryException {
//given
- EntityType oduFunction = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran", "ODUFunction");
+ EntityType OduFunction = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran", "ODUFunction");
//then
- assertEquals(Set.of(field("gNBDUId").as("o-ran-smo-teiv-ran:ODUFunction.attr.gNBDUId"), field("gNBId").as(
- "o-ran-smo-teiv-ran:ODUFunction.attr.gNBId"), field("gNBIdLength").as(
- "o-ran-smo-teiv-ran:ODUFunction.attr.gNBIdLength"), field("id").as(
- "o-ran-smo-teiv-ran:ODUFunction.id"), field("CD_sourceIds").as(
- "o-ran-smo-teiv-ran:ODUFunction.sourceIds"), field("CD_classifiers").as(
- "o-ran-smo-teiv-ran:ODUFunction.classifiers"), field("CD_decorators").as(
- "o-ran-smo-teiv-ran:ODUFunction.decorators"), field("dUpLMNId").as(
- "o-ran-smo-teiv-ran:ODUFunction.attr.dUpLMNId")),
- new HashSet<>(oduFunction.getAllFieldsWithId()));
+ assertEquals(Set.of(field("dUpLMNId", JSONB.class).as("o-ran-smo-teiv-ran:ODUFunction.attr.dUpLMNId"), field(
+ "gNBDUId").as("o-ran-smo-teiv-ran:ODUFunction.attr.gNBDUId"), field("gNBId").as(
+ "o-ran-smo-teiv-ran:ODUFunction.attr.gNBId"), field("gNBIdLength").as(
+ "o-ran-smo-teiv-ran:ODUFunction.attr.gNBIdLength"), field("id").as(
+ "o-ran-smo-teiv-ran:ODUFunction.id"), field("CD_sourceIds").as(
+ "o-ran-smo-teiv-ran:ODUFunction.sourceIds"), field("CD_classifiers").as(
+ "o-ran-smo-teiv-ran:ODUFunction.classifiers"), field(
+ "CD_decorators").as(
+ "o-ran-smo-teiv-ran:ODUFunction.decorators"), field(
+ "metadata").as(
+ "o-ran-smo-teiv-ran:ODUFunction.metadata")),
+ new HashSet<>(OduFunction.getAllFieldsWithId()));
}
@Test
@Test
void testGetTableNameForRelation() throws SchemaRegistryException {
//given
- String expectedManyToMany = "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"";
- String expectedOneToMany = "ties_data.\"o-ran-smo-teiv-ran_NRCellDU\"";
- String expectedManyToOne = "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"";
+ String expectedManyToMany = "teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"";
+ String expectedOneToMany = "teiv_data.\"o-ran-smo-teiv-ran_NRCellDU\"";
+ String expectedManyToOne = "teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\"";
//when
RelationType manyToMany = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-equipment-ran",
"ANTENNAMODULE_SERVES_ANTENNACAPABILITY");
RelationType antennamoduleServesAntennacapability = SchemaRegistry.getRelationTypeByModuleAndName(
"o-ran-smo-teiv-rel-equipment-ran", "ANTENNAMODULE_SERVES_ANTENNACAPABILITY");
//then
- assertEquals(Set.of(field(String.format(TIES_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String
+ assertEquals(Set.of(field(String.format(TEIV_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String
.format(QUOTED_STRING, "aSide_AntennaModule")).as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_ANTENNACAPABILITY.aSide")), field(String
- .format(TIES_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
+ .format(TEIV_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
QUOTED_STRING, "bSide_AntennaCapability")).as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_ANTENNACAPABILITY.bSide")),
- field(String.format(TIES_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
+ field(String.format(TEIV_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
QUOTED_STRING, "id")).as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_ANTENNACAPABILITY.id")), field(String
- .format(TIES_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String
+ .format(TEIV_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String
.format(QUOTED_STRING, "CD_sourceIds")).as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_ANTENNACAPABILITY.sourceIds")),
- field(String.format(TIES_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
+ field(String.format(TEIV_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
QUOTED_STRING, "CD_decorators")).as(hashAlias(
"o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_ANTENNACAPABILITY.decorators")),
- field(String.format(TIES_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
+ field(String.format(TEIV_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
QUOTED_STRING, "CD_classifiers")).as(hashAlias(
- "o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_ANTENNACAPABILITY.classifiers"))),
+ "o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_ANTENNACAPABILITY.classifiers")),
+ field(String.format(TEIV_DATA, "CFC235E0404703D1E4454647DF8AAE2C193DB402") + "." + String.format(
+ QUOTED_STRING, "metadata")).as(hashAlias(
+ "o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_ANTENNACAPABILITY.metadata"))),
new HashSet<>(antennamoduleServesAntennacapability.getAllFieldsWithId()));
}
@Test
void getAttributeColumnsWithFilterTest() throws SchemaRegistryException {
- Assertions.assertEquals(Map.of(field("ties_data.\"AntennaModule\".\"geo-location\"").as(
+ Assertions.assertEquals(Map.of(field("teiv_data.\"AntennaModule\".\"geo-location\"").as(
"o-ran-smo-teiv-equipment:AntennaModule.attr.geo-location"), DataType.GEOGRAPHIC), SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment", "AntennaModule")
.getSpecificAttributeColumns(List.of("geo-location")));
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
-import static org.oran.smo.teiv.utils.TiesTestConstants.KAFKA_RETRY_INTERVAL_10_MS;
-import static org.oran.smo.teiv.utils.TiesTestConstants.SPRING_BOOT_SERVER_HOST;
-import static org.oran.smo.teiv.utils.TiesTestConstants.SPRING_BOOT_SERVER_PORT;
+import static org.oran.smo.teiv.utils.JooqTypeConverter.jsonbToMap;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivTestConstants.KAFKA_RETRY_INTERVAL_10_MS;
+import static org.oran.smo.teiv.utils.TeivTestConstants.SPRING_BOOT_SERVER_HOST;
+import static org.oran.smo.teiv.utils.TeivTestConstants.SPRING_BOOT_SERVER_PORT;
import java.io.File;
import java.time.Duration;
+import java.time.OffsetDateTime;
+import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.Base64;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Stream;
import io.cloudevents.CloudEvent;
import org.apache.kafka.common.serialization.StringSerializer;
import org.awaitility.Awaitility;
import org.jooq.DSLContext;
+import org.jooq.JSONB;
import org.jooq.Record;
import org.jooq.Result;
+import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
import org.oran.smo.teiv.CustomMetrics;
import org.oran.smo.teiv.availability.DependentServiceAvailabilityKafka;
import org.oran.smo.teiv.config.KafkaConfig;
import org.oran.smo.teiv.utils.KafkaTestExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.kafka.config.KafkaListenerEndpointRegistry;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;
import org.springframework.kafka.core.KafkaAdmin;
import org.springframework.kafka.test.EmbeddedKafkaBroker;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.springframework.test.context.TestExecutionListeners;
+import org.testcontainers.shaded.org.checkerframework.checker.nullness.qual.Nullable;
@EmbeddedKafka
@ActiveProfiles({ "test", "ingestion" })
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest(properties = { SPRING_BOOT_SERVER_HOST, SPRING_BOOT_SERVER_PORT, KAFKA_RETRY_INTERVAL_10_MS,
"kafka.topic.replicas:1", "kafka.topology-ingestion.consumer.concurrency:2", "data-catalog.enabled:true" })
@TestExecutionListeners(listeners = KafkaTestExecutionListener.class, mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
private AppInit appInit;
- static Producer<String, CloudEvent> producer;
+ private DefaultKafkaProducerFactory<String, CloudEvent> factory;
+
+ private Producer<String, CloudEvent> producer;
+
+ @Autowired
+ private KafkaListenerEndpointRegistry kafkaListenerEndpointRegistry;
private static final String TEST_EVENT_FOLDER = "src/test/resources/cloudeventdata/end-to-end/";
private static final String EXPECTED_RESULTS_FOLDER = "src/test/resources/cloudeventdata/end-to-end/expected-results/";
registry.add("spring.datasource.write.password", () -> postgresqlContainer.getPassword());
}
+ private static final String FIRST_DISCOVERED = "firstDiscovered";
+ private static final String LAST_MODIFIED = "lastModified";
+ private static final String RELIABILITY_INDICATOR = "reliabilityIndicator";
+
+ private OffsetDateTime testStartTime;
+
@BeforeAll
static void beforeAll() {
TestPostgresqlContainer.loadData();
@BeforeEach
void setupEach() {
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA), writeDataDslContext);
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA), writeDataDslContext);
appInit = new AppInit(dependentServiceAvailabilityKafka, kafkaTopicService, listenerStarter);
appInit.startUpHandler();
- producer = new DefaultKafkaProducerFactory<>(new HashMap<>(KafkaTestUtils.producerProps(embeddedKafkaBroker)),
- new StringSerializer(), new CloudEventSerializer()).createProducer();
+ factory = new DefaultKafkaProducerFactory<>(KafkaTestUtils.producerProps(embeddedKafkaBroker),
+ new StringSerializer(), new CloudEventSerializer());
+ producer = factory.createProducer();
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
}
@AfterEach
- void tearDown() {
- embeddedKafkaBroker.destroy();
+ void cleanupEach() {
+ factory.destroy();
+ }
+
+ @AfterAll
+ void cleanupAll() {
+ kafkaListenerEndpointRegistry.stop();
+ Admin adminClient = Admin.create(kafkaAdmin.getConfigurationProperties());
+ adminClient.close();
}
- @DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD)
@Test
+ @DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD)
void testEndToEndDb() {
final String CREATE_ONE_TO_ONE_PATH = TEST_EVENT_FOLDER + "ce-create-one-to-one.json";
final String CREATE_MANY_TO_MANY_PATH = TEST_EVENT_FOLDER + "ce-create-many-to-many.json";
final String CREATE_INFERRED_ENTITIES = TEST_EVENT_FOLDER + "ce-create-inferred.json";
final String CREATE_GEOLOCATION_PATH = TEST_EVENT_FOLDER + "ce-create-geo-location.json";
final String MERGE_ONE_TO_MANY_PATH = TEST_EVENT_FOLDER + "ce-merge-one-to-many.json";
+ final String MERGE_ONE_TO_MANY3_PATH = TEST_EVENT_FOLDER + "ce-merge-one-to-many3.json";
+ final String MERGE_MANY_TO_MANY_PATH = TEST_EVENT_FOLDER + "ce-merge-many-to-many.json";
final String DELETE_MANY_TO_MANY_PATH = TEST_EVENT_FOLDER + "ce-delete-many-to-many.json";
final String DELETE_ONE_TO_ONE_PATH = TEST_EVENT_FOLDER + "ce-delete-one-to-one.json";
final String DELETE_CMHANDLE_PATH = TEST_EVENT_FOLDER + "ce-source-entity-delete-cm-handle.json";
final String EXP_CREATE_INFERRED_ENTITIES = EXPECTED_RESULTS_FOLDER + "exp-create-inferred.json";
final String EXP_CREATE_GEOLOCATION_PATH = EXPECTED_RESULTS_FOLDER + "exp-create-geo-location.json";
final String EXP_MERGE_ONE_TO_MANY_PATH = EXPECTED_RESULTS_FOLDER + "exp-merge-one-to-many.json";
+ final String EXP_MERGE_ONE_TO_MANY3_PATH = EXPECTED_RESULTS_FOLDER + "exp-merge-one-to-many3.json";
+ final String EXP_MERGE_MANY_TO_MANY_PATH = EXPECTED_RESULTS_FOLDER + "exp-merge-many-to-many.json";
final String EXP_DELETE_ONE_TO_ONE_PATH = EXPECTED_RESULTS_FOLDER + "exp-delete-one-to-one.json";
final String NOT_EXP_DELETE_ONE_TO_ONE_PATH = EXPECTED_RESULTS_FOLDER + "not-exp-delete-one-to-one.json";
final String NOT_EXP_DELETE_MANY_TO_MANY_PATH = EXPECTED_RESULTS_FOLDER + "not-exp-delete-many-to-many.json";
final String NOT_EXP_DELETE_CMHANDLE_PATH = EXPECTED_RESULTS_FOLDER + "not-exp-source-entity-delete-cm-handle.json";
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
validateReceivedCloudEventMetrics(0, 0, 0, 0);
sendEventFromFile(CREATE_ONE_TO_ONE_PATH);
- validateWithTimeout(20, () -> {
+ validateWithTimeout(15, () -> {
EndToEndExpectedResults expected = getExpectedResults(EXP_CREATE_ONE_TO_ONE_PATH);
assertDbContainsExpectedValues(expected);
validateReceivedCloudEventMetrics(1, 0, 0, 0);
});
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
sendEventFromFile(CREATE_MANY_TO_MANY_PATH);
validateWithTimeout(15, () -> {
EndToEndExpectedResults expected = getExpectedResults(EXP_CREATE_MANY_TO_MANY_PATH);
validateReceivedCloudEventMetrics(2, 0, 0, 0);
});
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
+ //Sends the same entities and relationships as previous CE, but with different entity attributes. Relationships same.
+ sendEventFromFile(MERGE_MANY_TO_MANY_PATH);
+ validateWithTimeout(15, () -> {
+ EndToEndExpectedResults expected = getExpectedResults(EXP_MERGE_MANY_TO_MANY_PATH);
+ assertDbContainsExpectedValues(expected);
+ validateReceivedCloudEventMetrics(2, 1, 0, 0);
+ });
+
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
sendEventFromFile(CREATE_GEOLOCATION_PATH);
- validateWithTimeout(20, () -> {
+ validateWithTimeout(15, () -> {
EndToEndExpectedResults expected = getExpectedResults(EXP_CREATE_GEOLOCATION_PATH);
assertDbContainsExpectedValues(expected);
- validateReceivedCloudEventMetrics(3, 0, 0, 0);
+ validateReceivedCloudEventMetrics(3, 1, 0, 0);
});
- sendEventFromFile(MERGE_ONE_TO_MANY_PATH);
-
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
+ sendEventFromFile(MERGE_ONE_TO_MANY_PATH);//This sends new entities even though it's a merge event
validateWithTimeout(15, () -> {
EndToEndExpectedResults expected = getExpectedResults(EXP_MERGE_ONE_TO_MANY_PATH);
assertDbContainsExpectedValues(expected);
- validateReceivedCloudEventMetrics(3, 1, 0, 0);
+ validateReceivedCloudEventMetrics(3, 2, 0, 0);
});
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
+ //Sends the same entities and relationships as previous CE, but with different entity attributes. Relationships same.
+ sendEventFromFile(MERGE_ONE_TO_MANY3_PATH);
+ validateWithTimeout(15, () -> {
+ EndToEndExpectedResults expected = getExpectedResults(EXP_MERGE_ONE_TO_MANY3_PATH);
+ assertDbContainsExpectedValues(expected);
+ validateReceivedCloudEventMetrics(3, 3, 0, 0);
+ });
+
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
sendEventFromFile(CREATE_SECOND_CASE_PATH);
validateWithTimeout(15, () -> {
EndToEndExpectedResults expected = getExpectedResults(EXP_CREATE_SECOND_CASE_PATH);
assertDbContainsExpectedValues(expected);
- validateReceivedCloudEventMetrics(4, 1, 0, 0);
+ validateReceivedCloudEventMetrics(4, 3, 0, 0);
});
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
sendEventFromFile(CREATE_INFERRED_ENTITIES);
- validateWithTimeout(20, () -> {
+
+ validateWithTimeout(25, () -> {
EndToEndExpectedResults expected = getExpectedResults(EXP_CREATE_INFERRED_ENTITIES);
assertDbContainsExpectedValues(expected);
- validateReceivedCloudEventMetrics(5, 1, 0, 0);
+ validateReceivedCloudEventMetrics(5, 3, 0, 0);
});
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
sendEventFromFile(CREATE_GEOLOCATION_PATH);
- validateWithTimeout(20, () -> {
+ validateWithTimeout(15, () -> {
EndToEndExpectedResults expected = getExpectedResults(EXP_CREATE_GEOLOCATION_PATH);
assertDbContainsExpectedValues(expected);
- validateReceivedCloudEventMetrics(6, 1, 0, 0);
+ validateReceivedCloudEventMetrics(6, 3, 0, 0);
});
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
sendEventFromFile(DELETE_MANY_TO_MANY_PATH);
validateWithTimeout(15, () -> {
EndToEndExpectedResults notExpected = getExpectedResults(NOT_EXP_DELETE_MANY_TO_MANY_PATH);
assertDbNotContainsExpectedValues(notExpected);
- validateReceivedCloudEventMetrics(6, 1, 1, 0);
+ validateReceivedCloudEventMetrics(6, 3, 1, 0);
});
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
sendEventFromFile(DELETE_ONE_TO_ONE_PATH);
validateWithTimeout(15, () -> {
EndToEndExpectedResults expected = getExpectedResults(EXP_DELETE_ONE_TO_ONE_PATH);
assertDbContainsExpectedValues(expected);
EndToEndExpectedResults notExpected = getExpectedResults(NOT_EXP_DELETE_ONE_TO_ONE_PATH);
assertDbNotContainsExpectedValues(notExpected);
- validateReceivedCloudEventMetrics(6, 1, 2, 0);
+ validateReceivedCloudEventMetrics(6, 3, 2, 0);
});
+ testStartTime = OffsetDateTime.now(ZoneOffset.UTC);
sendEventFromFile(DELETE_CMHANDLE_PATH);
validateWithTimeout(15, () -> {
EndToEndExpectedResults notExpected = getExpectedResults(NOT_EXP_DELETE_CMHANDLE_PATH);
- assertDbContainsExpectedValues(notExpected);
- validateReceivedCloudEventMetrics(6, 1, 2, 1);
+ assertDbNotContainsExpectedValues(notExpected);
+ validateReceivedCloudEventMetrics(6, 3, 2, 1);
});
}
- @DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD)
@Test
+ @DirtiesContext(methodMode = DirtiesContext.MethodMode.BEFORE_METHOD)
void testTopologyIngestionConcurrentListeners() {
final String COMMON_EVENT_FOLDER = "src/test/resources/cloudeventdata/common/";
cloudEventsForPartition2, cloudEventsForPartition3);
produceKafkaMessages(cloudEventPathLists, List.of(0, 1, 2, 3));
- validateWithTimeout(10, () -> {
+ validateWithTimeout(20, () -> {
assertEquals(2, assertDoesNotThrow(() -> getActiveConsumers(kafkaConfig.getTopologyIngestion().getGroupId())));
validateReceivedCloudEventMetrics(15, 2, 5, 1);
validatePersistedCloudEventMetrics(8, 2, 5, 1);
});
}
- private void assertDatabaseContainsValues(final String table, final Map<String, Object> attributes) {
- Result<Record> results = TiesDbServiceContainerizedTest.selectAllRowsFromTable(writeDataDslContext,
- "ties_data.\"" + table + "\"");
- boolean containsExpectedData = results.stream().anyMatch(row -> attributes.entrySet().stream().allMatch(
- expectedField -> {
- if (expectedField.getValue() != null) {
- if (row.get(expectedField.getKey()) == null) {
+ private void assertDatabaseContainsValues(final String table, final Map<String, Object> expectedFields) {
+ Result<Record> results = TeivDbServiceContainerizedTest.selectAllRowsFromTable(writeDataDslContext,
+ "teiv_data.\"" + table + "\"");
+ AtomicReference<String> debugInfo = new AtomicReference<>("");
+ AtomicReference<Record> targetRow = new AtomicReference<>();
+ boolean containsExpectedRow = results.stream().anyMatch(row -> {
+ if (Objects.equals(row.get("id"), expectedFields.get("id"))) {
+ targetRow.set(row);
+ return true;
+ }
+ return false;
+ });
+ assertTrue(containsExpectedRow, "Row not found with id = " + expectedFields.get("id"));
+ boolean containsExpectedData = expectedFields.entrySet().stream().allMatch(expectedField -> {
+ final String expectedFieldName = expectedField.getKey();
+ @Nullable Object actualFieldValue = targetRow.get().get(expectedFieldName);
+ if (expectedField.getValue() != null) {
+ if (actualFieldValue instanceof byte[]) {
+ String hashString = bytesToHex((byte[]) Objects.requireNonNull(actualFieldValue));
+ if (!Objects.equals(expectedField.getValue().toString(), hashString)) {
+ debugInfo.set(expectedField.getKey() + " not as expected for " + targetRow.get().get("id"));
+ return false;
+ } else {
+ return true;
+ }
+ }
+ if (expectedField.getKey().contains("metadata")) {//Will be true for the metadata of the entity, and of each relation
+ Map<String, Object> expectedMetadata = jsonbToMap((JSONB) expectedField.getValue());
+ if (actualFieldValue == null) {
+ debugInfo.set(expectedFieldName + " of " + expectedFields.get("id") + " is null");
+ return false;
+ }
+ Map<String, Object> actualMetadata = jsonbToMap((JSONB) Objects.requireNonNull(actualFieldValue));
+ if (expectedMetadata.containsKey(RELIABILITY_INDICATOR)) {
+ if (!Objects.equals(expectedMetadata.get(RELIABILITY_INDICATOR), actualMetadata.get(
+ RELIABILITY_INDICATOR))) {
+ debugInfo.set(RELIABILITY_INDICATOR + " of " + expectedField.getKey() + " of " + targetRow.get()
+ .get("id") + " should be " + expectedMetadata.get(
+ RELIABILITY_INDICATOR) + " but it is " + actualMetadata.get(
+ RELIABILITY_INDICATOR));
return false;
}
- if (row.get(expectedField.getKey()) instanceof byte[]) {
- String hashString = bytesToHex((byte[]) Objects.requireNonNull(row.get(expectedField
- .getKey())));
- return Objects.equals(expectedField.getValue().toString(), hashString);
- }
- return Objects.equals(expectedField.getValue().toString(), row.get(expectedField.getKey())
- .toString());
}
- return row.get(expectedField.getKey()) == null;
+ if (expectedMetadata.containsKey(FIRST_DISCOVERED)) {
+ return validateMetadataTimestamp(FIRST_DISCOVERED, expectedField, actualMetadata, debugInfo,
+ targetRow, expectedMetadata);
+ }
+ if (expectedMetadata.containsKey(LAST_MODIFIED)) {
+ return validateMetadataTimestamp(LAST_MODIFIED, expectedField, actualMetadata, debugInfo, targetRow,
+ expectedMetadata);
+ }
+ return true;
+ } else {
+ if (actualFieldValue == null || !Objects.equals(expectedField.getValue().toString(), actualFieldValue
+ .toString())) {
+ debugInfo.set(targetRow.get().get("id") + " " + expectedField
+ .getKey() + " should be " + expectedField.getValue() + " but it is " + actualFieldValue);
+ return false;
+ } else {
+ return true;
+ }
+ }
+ }
+ if (actualFieldValue != null) {
+ debugInfo.set(expectedFieldName + " should have been null.");
+ }
+ return actualFieldValue == null;
+ });
+ assertTrue(containsExpectedData, getAsserDbValuesFailureMessage(table, expectedFields, results, debugInfo.get()));
+ }
- }));
- assertTrue(containsExpectedData, getAsserDbValuesFailureMessage(table, attributes, results));
+ private boolean validateMetadataTimestamp(String timestampKeyToVerify, Map.Entry<String, Object> expectedField,
+ Map<String, Object> actualMetadata, AtomicReference<String> debugInfo, AtomicReference<Record> targetRow,
+ Map<String, Object> expectedMetadata) {
+ Object actualtimestampObject = actualMetadata.get(timestampKeyToVerify);
+ if (actualtimestampObject == null) {
+ debugInfo.set(targetRow.get().get("id") + ":\n" + timestampKeyToVerify + " should not be null");
+ return false;
+ }
+ OffsetDateTime actualTimestamp = OffsetDateTime.parse(actualtimestampObject.toString());
+ String expectedTimestamp = expectedMetadata.get(timestampKeyToVerify).toString();
+ if (expectedTimestamp.contains("AFTER TEST START TIME")) {
+ if (actualTimestamp.isBefore(testStartTime)) {
+ debugInfo.set(targetRow.get().get(
+ "id") + ":\n" + timestampKeyToVerify + " " + actualTimestamp + " should be after " + testStartTime + " in " + expectedField
+ .getKey());
+ return false;
+ }
+ } else if (expectedTimestamp.contains("BEFORE TEST START TIME")) {
+ if (actualTimestamp.isAfter(testStartTime)) {
+ debugInfo.set(targetRow.get().get(
+ "id") + ": " + timestampKeyToVerify + " " + actualTimestamp + " should be before " + testStartTime + " in " + expectedField
+ .getKey());
+ return false;
+ }
+ } else {
+ if (!actualTimestamp.isEqual(OffsetDateTime.parse("2025-01-08T10:40:36.46156500Z")) && !actualTimestamp.isEqual(
+ OffsetDateTime.parse("2025-01-09T10:40:36.461565Z"))) {
+ debugInfo.set(targetRow.get().get(
+ "id") + ": " + timestampKeyToVerify + " " + actualTimestamp + " should be " + "2025-01-08T10:40:36.46156500Z" + " in " + expectedField
+ .getKey());
+ return false;
+ }
+ }
+ return true;
}
private String bytesToHex(byte[] hashBytes) {
return Base64.getEncoder().encodeToString(hashBytes);
}
- private String getAsserDbValuesFailureMessage(String table, Map<String, Object> attributes, Result<Record> results) {
+ private String getAsserDbValuesFailureMessage(String table, Map<String, Object> attributes, Result<Record> results,
+ String extraInfo) {
return String.format(
"Database table \"%s\" does not contain expected data, but it should.\nExpected row:\n" + attributes + "\nActual data (all rows):\n" + results
- .formatCSV(), table);
+ .formatCSV() + "\n%s\n", table, extraInfo);
}
private void assertDatabaseDoesNotContainRecord(final String table, final String id) {
- Result<Record> results = TiesDbServiceContainerizedTest.selectAllRowsFromTable(writeDataDslContext,
- "ties_data.\"" + table + "\"");
+ Result<Record> results = TeivDbServiceContainerizedTest.selectAllRowsFromTable(writeDataDslContext,
+ "teiv_data.\"" + table + "\"");
if (results.isNotEmpty()) {
boolean containsRecord = results.stream().map(row -> row.get("id").toString()).anyMatch(id::equals);
assertFalse(containsRecord, String.format("Database table \"%s\" contains record: \"%s\", but it should not.",
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.mockito.MockedStatic;
import org.mockito.Mockito;
import org.oran.smo.teiv.startup.SchemaHandler;
-import org.oran.smo.teiv.utils.KafkaTestExecutionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import lombok.Getter;
import org.oran.smo.teiv.service.kafka.KafkaTopicService;
-import org.springframework.test.context.TestExecutionListeners;
@Slf4j
@EmbeddedKafka
@ActiveProfiles({ "test", "ingestion" })
@SpringBootTest
-@TestExecutionListeners(listeners = KafkaTestExecutionListener.class, mergeMode = TestExecutionListeners.MergeMode.MERGE_WITH_DEFAULTS)
class KafkaTopicServiceTest {
@Value("${spring.embedded.kafka.brokers}")
@Getter
adminClient.deleteTopics(listTopicsResult.names().get());
} catch (InterruptedException | ExecutionException e) {
log.info("Error deleting topics", e.getMessage());
+ } finally {
+ adminClient.close();
}
}
@Test
@DirtiesContext(methodMode = MethodMode.BEFORE_METHOD)
void test_isTopicCreated_ExecutionException() throws Exception {
-
Node controller = new Node(0, "localhost", 8121);
List<Node> brokers = Arrays.asList(controller, new Node(1, "localhost", 8122), new Node(2, "localhost", 8123));
Admin mockedAdminClient = new MockAdminClient(brokers, controller);
Mockito.reset(spiedAdminClient, topicListResult, kafkaFutures, spiedTopicService);
mockedStaticAdminClient.close();
+ mockedAdminClient.close();
+ spiedAdminClient.close();
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import static org.mockito.ArgumentMatchers.eq;
import static org.oran.smo.teiv.service.models.OperationResult.ENTITY_CATEGORY;
import static org.oran.smo.teiv.service.models.OperationResult.RELATIONSHIP_CATEGORY;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import org.oran.smo.teiv.db.TestPostgresqlContainer;
import org.oran.smo.teiv.exception.InvalidFieldInYangDataException;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.ingestion.DeadlockRetryPolicy;
import org.oran.smo.teiv.ingestion.validation.IngestionOperationValidatorFactory;
import org.oran.smo.teiv.ingestion.validation.MaximumCardinalityViolationException;
@Configuration
@SpringBootTest
@ActiveProfiles({ "test", "ingestion" })
-class TiesDbOperationResultsTest {
+class TeivDbOperationResultsTest {
private static TestPostgresqlContainer postgresqlContainer = TestPostgresqlContainer.getInstance();
- private static TiesDbService tiesDbService;
- private static TiesDbOperations tiesDbOperations;
+ private static TeivDbService teivDbService;
+ private static TeivDbOperations teivDbOperations;
private static DSLContext dslContext;
private static String VALIDATE_MANY_TO_ONE_DIR = "src/test/resources/cloudeventdata/validation/many-to-one/";
private static String VALIDATE_ONE_TO_MANY_DIR = "src/test/resources/cloudeventdata/validation/one-to-many/";
private static String VALIDATE_ONE_TO_ONE_DIR = "src/test/resources/cloudeventdata/validation/one-to-one/";
- private static String updatedTimeColumnName = "updated_time";
+ private static EntityType entityTypeMe;
+ private static EntityType entityTypeORU;
+ private static EntityType entityTypeAntennMod;
+ private static EntityType entityTypeAntennModLongName;
+ private static EntityType entityTypeAntennCap;
+ private static RelationType relTypeMeManagesORU;
+ private static RelationType relTypeantennServesAntennCap;
+ private static RelationType relTypeAntennModRealisedByAntennaModLongName;
@Autowired
CloudEventParser cloudEventParser;
String url = postgresqlContainer.getJdbcUrl();
DataSource ds = DataSourceBuilder.create().url(url).username("test").password("test").build();
dslContext = DSL.using(ds, SQLDialect.POSTGRES);
- tiesDbService = new TiesDbService(dslContext, dslContext, deadlockRetryPolicy);
- tiesDbOperations = new TiesDbOperations(tiesDbService, new IngestionOperationValidatorFactory(),
- new RelationshipMergeValidator());
+ teivDbService = new TeivDbService(dslContext, dslContext, deadlockRetryPolicy);
+ teivDbOperations = new TeivDbOperations(teivDbService, new IngestionOperationValidatorFactory(),
+ new RelationshipMergeValidator(), new TeivMetadataResolver());
TestPostgresqlContainer.loadIngestionTestData();
PostgresSchemaLoader postgresSchemaLoader = new PostgresSchemaLoader(dslContext, new ObjectMapper());
postgresSchemaLoader.loadSchemaRegistry();
}
@BeforeEach
- public void deleteAll() {
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA), dslContext);
+ public void deleteAllAndMakeTypes() {
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA), dslContext);
+ try {
+ entityTypeMe = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam", "ManagedElement");
+ entityTypeORU = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran", "ORUFunction");
+ entityTypeAntennMod = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment", "AntennaModule");
+ entityTypeAntennModLongName = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment",
+ "AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee");
+ entityTypeAntennCap = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran", "AntennaCapability");
+ relTypeMeManagesORU = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-oam-ran",
+ "MANAGEDELEMENT_MANAGES_ORUFUNCTION");
+ relTypeantennServesAntennCap = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-equipment-ran",
+ "ANTENNAMODULE_SERVES_ANTENNACAPABILITY");
+ relTypeAntennModRealisedByAntennaModLongName = SchemaRegistry.getRelationTypeByModuleAndName(
+ "o-ran-smo-teiv-equipment", "ANTENNAMODULEEEEEEEEEEEE_REALISED_BY_ANTENNAMODULEEEEEEEEEEEEEEE");
+ } catch (SchemaRegistryException e) {
+ throw new RuntimeException(e);
+ }
}
@Test
CloudEvent cloudEvent = CloudEventTestUtil.getCloudEventFromJsonFile(
"src/test/resources/cloudeventdata/end-to-end/ce-create-one-to-many.json");
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = assertDoesNotThrow(() -> tiesDbOperations
+ List<OperationResult> mergeResult = assertDoesNotThrow(() -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, "dmi-plugin:nm-1"));
assertEquals(3, mergeResult.size());
void testDeleteEntityById() throws SchemaRegistryException {
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "managed_element_entity_id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity);
// Delete operation - expected to succeed
- List<OperationResult> deleteResultMatch = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteResultMatch = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam", "ManagedElement"), "managed_element_entity_id1");
assertFalse(deleteResultMatch.isEmpty(), "Delete operation should return a non-empty list");
"The list should contain the delete operation result with id: 'managed_element_entity_id1'");
// Delete operation with the same EIID - expected to fail
- List<OperationResult> deleteResultNoMatch = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteResultNoMatch = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam", "ManagedElement"), "managed_element_entity_id1");
assertTrue(deleteResultNoMatch.isEmpty(),
"Delete operation should return an empty list for already deleted/non existing ID");
void testDeleteOneToOneByRelationId() throws SchemaRegistryException {
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "me-id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"28C9A375E800E82308EBE7DA2932EF2C0AF13C38\"", managedElementEntity,
- updatedTimeColumnName);
+ EntityType entityTypeMeLongName = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam",
+ "ManagedElementtttttttttttttttttttttttttttttttttttttttttttttttttt");
+ teivDbOperations.merge(dslContext, entityTypeMeLongName, managedElementEntity);
Map<String, Object> nrCellDuEntity = new HashMap<>();
nrCellDuEntity.put("id", "nrcelldu-id1");
nrCellDuEntity.put("020335B0F627C169E24167748C38FE756FB34AE2", 1);
- tiesDbOperations.merge(dslContext, "ties_data.\"84E676149362F50C55FE1E004B98D4891916BBF3\"", nrCellDuEntity,
- updatedTimeColumnName);
+ EntityType entityTypeNrCellDuLongName = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran",
+ "NRCellDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
+ teivDbOperations.merge(dslContext, entityTypeNrCellDuLongName, nrCellDuEntity);
Map<String, Object> meToNrcellduRelation = new HashMap<>();
meToNrcellduRelation.put("id", "me-id1");
meToNrcellduRelation.put("REL_ID_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU", "eiid1");
meToNrcellduRelation.put("REL_CD_1F61FA6DDAECE90540F9880F2A98037B1530A5A4", JooqTypeConverter.toJsonb(List.of(
"fdn1", "cmHandleId1")));
- tiesDbOperations.merge(dslContext, "ties_data.\"28C9A375E800E82308EBE7DA2932EF2C0AF13C38\"", meToNrcellduRelation,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMeLongName, meToNrcellduRelation);
// Delete operation for aSide - expected to succeed
- Optional<OperationResult> deleteASideResultMatch = tiesDbOperations.deleteRelationFromEntityTableByRelationId(
+ Optional<OperationResult> deleteASideResultMatch = teivDbOperations.deleteRelationFromEntityTableByRelationId(
dslContext, "eiid1", SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-oam-ran",
"ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU"));
"The delete operation result should be present for: 'eiid1'");
// Delete operation with the same EIID - expected to fail
- Optional<OperationResult> deleteResultNoMatch = tiesDbOperations.deleteRelationFromEntityTableByRelationId(
+ Optional<OperationResult> deleteResultNoMatch = teivDbOperations.deleteRelationFromEntityTableByRelationId(
dslContext, "eiid1", SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-oam-ran",
"ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU"));
assertTrue(deleteResultNoMatch.isEmpty(),
"Delete operation should return an empty list for already deleted/non existing ID");
- Result<Record> nrcellduRows = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"84E676149362F50C55FE1E004B98D4891916BBF3\"");
- Result<Record> managedElementRows = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"28C9A375E800E82308EBE7DA2932EF2C0AF13C38\"");
+ Result<Record> nrcellduRows = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"84E676149362F50C55FE1E004B98D4891916BBF3\"");
+ Result<Record> managedElementRows = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"28C9A375E800E82308EBE7DA2932EF2C0AF13C38\"");
assertEquals("me-id1", managedElementRows.get(0).get("id"));
assertEquals("nrcelldu-id1", nrcellduRows.get(0).get("id"));
assertNull(managedElementRows.get(0).get("REL_FK_used-nrCellDu"));
void testDeleteOneToManyByManySideEntityId() throws SchemaRegistryException {
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "me-id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity);
Map<String, Object> oruFunctionEntity = new HashMap<>();
oruFunctionEntity.put("id", "oru-id1");
oruFunctionEntity.put("oruId", 1);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ORUFunction\"", oruFunctionEntity,
- updatedTimeColumnName);
-
- Map<String, Object> meToEnodeBFuncRelation = new HashMap<>();
- meToEnodeBFuncRelation.put("id", "oru-id1");
- meToEnodeBFuncRelation.put("REL_FK_managed-by-managedElement", "me-id1");
- meToEnodeBFuncRelation.put("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION", "eiid1");
- meToEnodeBFuncRelation.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION", JooqTypeConverter.toJsonb(List.of(
+ teivDbOperations.merge(dslContext, entityTypeORU, oruFunctionEntity);
+
+ Map<String, Object> meToORUFuncRelation = new HashMap<>();
+ meToORUFuncRelation.put("id", "oru-id1");
+ meToORUFuncRelation.put("REL_FK_managed-by-managedElement", "me-id1");
+ meToORUFuncRelation.put("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION", "eiid1");
+ meToORUFuncRelation.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION", JooqTypeConverter.toJsonb(List.of(
"fdn1", "cmHandleId1")));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ORUFunction\"", meToEnodeBFuncRelation,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, relTypeMeManagesORU, meToORUFuncRelation);
// Delete operation with existing relationship
- List<OperationResult> deleteResultMatch = tiesDbOperations.deleteRelationshipByManySideEntityId(dslContext,
+ List<OperationResult> deleteResultMatch = teivDbOperations.deleteRelationshipByManySideEntityId(dslContext,
"oru-id1", "id", SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-oam-ran",
"MANAGEDELEMENT_MANAGES_ORUFUNCTION"));
"The list should contain the delete operation result with id: 'eiid1'");
// Delete operation with the same entity ID - expected to return an empty list
- List<OperationResult> deleteResultNoMatch = tiesDbOperations.deleteRelationshipByManySideEntityId(dslContext,
+ List<OperationResult> deleteResultNoMatch = teivDbOperations.deleteRelationshipByManySideEntityId(dslContext,
"oru-id1", "id", SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-oam-ran",
"MANAGEDELEMENT_MANAGES_ORUFUNCTION"));
void testDeleteOneToManyByOneSideEntityId() throws SchemaRegistryException {
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "me-id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity,
- updatedTimeColumnName);
-
- Map<String, Object> meToEnodeBFuncRelation1 = new HashMap<>();
- meToEnodeBFuncRelation1.put("id", "oru-id1");
- meToEnodeBFuncRelation1.put("REL_FK_managed-by-managedElement", "me-id1");
- meToEnodeBFuncRelation1.put("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION", "eiid1");
- meToEnodeBFuncRelation1.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION", JooqTypeConverter.toJsonb(List
- .of("fdn1", "cmHandleId1")));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ORUFunction\"", meToEnodeBFuncRelation1,
- updatedTimeColumnName);
- Map<String, Object> meToEnodeBFuncRelation2 = new HashMap<>();
- meToEnodeBFuncRelation2.put("id", "oru-id2");
- meToEnodeBFuncRelation2.put("REL_FK_managed-by-managedElement", "me-id1");
- meToEnodeBFuncRelation2.put("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION", "eiid2");
- meToEnodeBFuncRelation2.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION", JooqTypeConverter.toJsonb(List
- .of("fdn1", "cmHandleId1")));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ORUFunction\"", meToEnodeBFuncRelation2,
- updatedTimeColumnName);
- Map<String, Object> meToEnodeBFuncRelation3 = new HashMap<>();
- meToEnodeBFuncRelation3.put("id", "oru-id3");
- meToEnodeBFuncRelation3.put("REL_FK_managed-by-managedElement", "me-id1");
- meToEnodeBFuncRelation3.put("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION", "eiid3");
- meToEnodeBFuncRelation3.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION", JooqTypeConverter.toJsonb(List
- .of("fdn1", "cmHandleId1")));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ORUFunction\"", meToEnodeBFuncRelation3,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity);
+
+ Map<String, Object> meToORUFuncRelation1 = new HashMap<>();
+ meToORUFuncRelation1.put("id", "oru-id1");
+ meToORUFuncRelation1.put("REL_FK_managed-by-managedElement", "me-id1");
+ meToORUFuncRelation1.put("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION", "eiid1");
+ meToORUFuncRelation1.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION", JooqTypeConverter.toJsonb(List.of(
+ "fdn1", "cmHandleId1")));
+ teivDbOperations.merge(dslContext, relTypeMeManagesORU, meToORUFuncRelation1);
+ Map<String, Object> meToORUFuncRelation2 = new HashMap<>();
+ meToORUFuncRelation2.put("id", "oru-id2");
+ meToORUFuncRelation2.put("REL_FK_managed-by-managedElement", "me-id1");
+ meToORUFuncRelation2.put("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION", "eiid2");
+ meToORUFuncRelation2.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION", JooqTypeConverter.toJsonb(List.of(
+ "fdn1", "cmHandleId1")));
+ teivDbOperations.merge(dslContext, relTypeMeManagesORU, meToORUFuncRelation2);
+ Map<String, Object> meToORUFuncRelation3 = new HashMap<>();
+ meToORUFuncRelation3.put("id", "oru-id3");
+ meToORUFuncRelation3.put("REL_FK_managed-by-managedElement", "me-id1");
+ meToORUFuncRelation3.put("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION", "eiid3");
+ meToORUFuncRelation3.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION", JooqTypeConverter.toJsonb(List.of(
+ "fdn1", "cmHandleId1")));
+ teivDbOperations.merge(dslContext, relTypeMeManagesORU, meToORUFuncRelation3);
// Delete operation for me-id1
- List<OperationResult> deleteResultMatch = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteResultMatch = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam", "ManagedElement"), "me-id1");
assertFalse(deleteResultMatch.isEmpty(), "Delete operation should return a non-empty list");
"The list should contain the delete operation result with id: 'eiid3'");
// Verify all related entities have their relationships deleted
- Result<Record> rows = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_ORUFunction\"");
+ Result<Record> rows = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"o-ran-smo-teiv-ran_ORUFunction\"");
assertEquals(3, rows.size());
for (Record row : rows) {
assertNull(row.get("REL_FK_managed-by-managedElement"),
rel2.put("aSide_AntennaModule", "antennamodule_id1");
rel2.put("bSide_AntennaCapability", "antennacapability_id2");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"", antennaModule1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"", antennaCapability1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"", antennaCapability2,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"", rel1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"", rel2,
- updatedTimeColumnName);
-
- Result<Record> row1 = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"");
+ teivDbOperations.merge(dslContext, entityTypeAntennMod, antennaModule1);
+ teivDbOperations.merge(dslContext, entityTypeAntennCap, antennaCapability1);
+ teivDbOperations.merge(dslContext, entityTypeAntennCap, antennaCapability2);
+ teivDbOperations.merge(dslContext, relTypeantennServesAntennCap, rel1);
+ teivDbOperations.merge(dslContext, relTypeantennServesAntennCap, rel2);
+
+ Result<Record> row1 = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\"");
assertEquals(1, row1.size());
- Result<Record> row2 = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"");
+ Result<Record> row2 = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\"");
assertEquals(2, row2.size());
- Result<Record> row3 = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"");
+ Result<Record> row3 = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"");
assertEquals(2, row3.size());
RelationType relType = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-equipment-ran",
"ANTENNAMODULE_SERVES_ANTENNACAPABILITY");
// Test deletion of a relationship by ID (expected success)
- Optional<OperationResult> deleteResultMatch = tiesDbOperations.deleteManyToManyRelationByRelationId(dslContext,
+ Optional<OperationResult> deleteResultMatch = teivDbOperations.deleteManyToManyRelationByRelationId(dslContext,
relType, "rel_id1");
assertTrue(deleteResultMatch.isPresent(), "Delete operation should return a present Optional");
assertEquals(OperationResult.builder().id("rel_id1").type("ANTENNAMODULE_SERVES_ANTENNACAPABILITY").category(
RELATIONSHIP_CATEGORY).build(), deleteResultMatch.get(), "Deleted relationship ID should match 'rel_id1'");
// Test deletion of the same relationship ID again (expected failure)
- Optional<OperationResult> deleteResultNoMatch = tiesDbOperations.deleteManyToManyRelationByRelationId(dslContext,
+ Optional<OperationResult> deleteResultNoMatch = teivDbOperations.deleteManyToManyRelationByRelationId(dslContext,
relType, "rel_id1");
assertTrue(deleteResultNoMatch.isEmpty(), "Delete operation should not return a present Optional");
}
rel2.put("aSide_AntennaModule", "antennamodule_id1");
rel2.put("bSide_AntennaCapability", "antennacapability_id2");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"", antennaModule1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"", antennaCapability1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"", antennaCapability2,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"", rel1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"", rel2,
- updatedTimeColumnName);
-
- assertEquals(1, TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"").size(), "Expected one AntennaModule record");
- assertEquals(2, TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"").size(), "Expected two AntennaCapability records");
- assertEquals(2, TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"").size(),
+ teivDbOperations.merge(dslContext, entityTypeAntennMod, antennaModule1);
+ teivDbOperations.merge(dslContext, entityTypeAntennCap, antennaCapability1);
+ teivDbOperations.merge(dslContext, entityTypeAntennCap, antennaCapability2);
+ teivDbOperations.merge(dslContext, relTypeantennServesAntennCap, rel1);
+ teivDbOperations.merge(dslContext, relTypeantennServesAntennCap, rel2);
+
+ assertEquals(1, TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\"").size(), "Expected one AntennaModule record");
+ assertEquals(2, TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\"").size(), "Expected two AntennaCapability records");
+ assertEquals(2, TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"").size(),
"Expected two ANTENNAMODULE_SERVES_ANTENNACAPABILITY relations");
RelationType relType = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-equipment-ran",
"ANTENNAMODULE_SERVES_ANTENNACAPABILITY");
// Test deletion of relations by entity ID (expected to delete two relations)
- List<OperationResult> deleteResultMatch = tiesDbOperations.deleteManyToManyRelationByEntityId(dslContext, relType,
+ List<OperationResult> deleteResultMatch = teivDbOperations.deleteManyToManyRelationByEntityId(dslContext, relType,
"antennamodule_id1", "aSide_AntennaModule", "bSide_AntennaCapability");
assertEquals(2, deleteResultMatch.size(), "Expected two relations to be deleted");
assertTrue(deleteResultMatch.contains(OperationResult.builder().id("rel_id1").type(
// Test deletion of relations by the same entity ID again (expected to find no
// relations to delete)
- List<OperationResult> deleteResultNoMatch = tiesDbOperations.deleteManyToManyRelationByEntityId(dslContext, relType,
+ List<OperationResult> deleteResultNoMatch = teivDbOperations.deleteManyToManyRelationByEntityId(dslContext, relType,
"antennamodule_id1", "aSide_AntennaModule", "bSide_AntennaCapability");
assertTrue(deleteResultNoMatch.isEmpty(),
"Delete operation should return an empty list for already deleted/non existing ID");
rel2.put("aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C", "module_id2");
rel2.put("bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E", "module_id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"53017288F3FE983848689A3DD21D48D298CCD23E\"", antennaModule1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"53017288F3FE983848689A3DD21D48D298CCD23E\"", antennaModule2,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"53089669D370B15C78B7E8376D434921D1C94240\"", rel1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"53089669D370B15C78B7E8376D434921D1C94240\"", rel2,
- updatedTimeColumnName);
-
- Result<Record> row1 = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"53017288F3FE983848689A3DD21D48D298CCD23E\"");
+ teivDbOperations.merge(dslContext, entityTypeAntennModLongName, antennaModule1);
+ teivDbOperations.merge(dslContext, entityTypeAntennModLongName, antennaModule2);
+ teivDbOperations.merge(dslContext, relTypeAntennModRealisedByAntennaModLongName, rel1);
+ teivDbOperations.merge(dslContext, relTypeAntennModRealisedByAntennaModLongName, rel2);
+
+ Result<Record> row1 = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"53017288F3FE983848689A3DD21D48D298CCD23E\"");
assertEquals(2, row1.size());
- Result<Record> row2 = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"53089669D370B15C78B7E8376D434921D1C94240\"");
+ Result<Record> row2 = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"53089669D370B15C78B7E8376D434921D1C94240\"");
assertEquals(2, row2.size());
RelationType antennaRelType1 = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-equipment",
"ANTENNAMODULEEEEEEEEEEEE_REALISED_BY_ANTENNAMODULEEEEEEEEEEEEEEE");
// Test deletion of a relationship by ID (expected success)
- Optional<OperationResult> deleteResultMatch = tiesDbOperations.deleteManyToManyRelationByRelationId(dslContext,
+ Optional<OperationResult> deleteResultMatch = teivDbOperations.deleteManyToManyRelationByRelationId(dslContext,
antennaRelType1, "rel_id1");
assertTrue(deleteResultMatch.isPresent(), "Delete operation should return a present Optional");
deleteResultMatch.get(), "Deleted relationship ID should match 'rel_id1'");
// Test deletion of the same relationship ID again (expected failure)
- Optional<OperationResult> deleteResultNoMatch = tiesDbOperations.deleteManyToManyRelationByRelationId(dslContext,
+ Optional<OperationResult> deleteResultNoMatch = teivDbOperations.deleteManyToManyRelationByRelationId(dslContext,
antennaRelType1, "rel_id1");
assertTrue(deleteResultNoMatch.isEmpty(), "Delete operation should not return a present Optional");
rel2.put("aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C", "module_id2");
rel2.put("bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E", "module_id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"53017288F3FE983848689A3DD21D48D298CCD23E\"", antennaModule1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"53017288F3FE983848689A3DD21D48D298CCD23E\"", antennaModule2,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"53089669D370B15C78B7E8376D434921D1C94240\"", rel1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"53089669D370B15C78B7E8376D434921D1C94240\"", rel2,
- updatedTimeColumnName);
-
- assertEquals(2, TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"53017288F3FE983848689A3DD21D48D298CCD23E\"").size(), "Expected two AntennaModule records");
- assertEquals(2, TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
- "ties_data.\"53089669D370B15C78B7E8376D434921D1C94240\"").size(),
+ teivDbOperations.merge(dslContext, entityTypeAntennModLongName, antennaModule1);
+ teivDbOperations.merge(dslContext, entityTypeAntennModLongName, antennaModule2);
+ teivDbOperations.merge(dslContext, relTypeAntennModRealisedByAntennaModLongName, rel1);
+ teivDbOperations.merge(dslContext, relTypeAntennModRealisedByAntennaModLongName, rel2);
+
+ assertEquals(2, TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"53017288F3FE983848689A3DD21D48D298CCD23E\"").size(), "Expected two AntennaModule records");
+ assertEquals(2, TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext,
+ "teiv_data.\"53089669D370B15C78B7E8376D434921D1C94240\"").size(),
"Expected two ANTENNAMODULE_REALISED_BY_ANTENNAMODULE relations");
RelationType relType = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-equipment",
"ANTENNAMODULEEEEEEEEEEEE_REALISED_BY_ANTENNAMODULEEEEEEEEEEEEEEE");
// Test deletion of relations by entity ID (expected to delete two relations)
- List<OperationResult> deleteResultMatch = tiesDbOperations.deleteManyToManyRelationByEntityId(dslContext, relType,
+ List<OperationResult> deleteResultMatch = teivDbOperations.deleteManyToManyRelationByEntityId(dslContext, relType,
"module_id1", "aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C",
"bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E");
assertEquals(2, deleteResultMatch.size(), "Expected two relations to be deleted");
// Test deletion of relations by the same entity ID again (expected to find no
// relations to delete)
- List<OperationResult> deleteResultNoMatch = tiesDbOperations.deleteManyToManyRelationByEntityId(dslContext, relType,
+ List<OperationResult> deleteResultNoMatch = teivDbOperations.deleteManyToManyRelationByEntityId(dslContext, relType,
"module_id1", "aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C",
"bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E");
assertTrue(deleteResultNoMatch.isEmpty(),
// Merge entities and relationship
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> mergeResult = teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(25, mergeResult.size());
}
// Merge topology data
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> mergeResult = teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(25, mergeResult.size());
// Entity with One_To_One relationship
- List<OperationResult> deleteEntityResult1 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult1 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam",
"ManagedElementtttttttttttttttttttttttttttttttttttttttttttttttttt"), "ManagedElement_3");
assertEquals(2, deleteEntityResult1.size());
// Entity with One_To_Many relationship
- List<OperationResult> deleteEntityResult2 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult2 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran",
"ODUFunctionnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn"), "ODUFunction_1");
assertEquals(2, deleteEntityResult2.size());
// Entity and Many_To_One relationship
- List<OperationResult> deleteEntityResult3 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult3 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran",
"LTESectorCarrierrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr"), "LTESectorCarrier_id1");
assertEquals(2, deleteEntityResult3.size());
// Entity with Many_To_Many relationship
- List<OperationResult> deleteEntityResult4 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult4 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment",
"AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), "AntennaModule_7");
assertEquals(2, deleteEntityResult4.size());
// Entity with One_To_Many relationship ConnectingSameEntity
- List<OperationResult> deleteEntityResult5 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult5 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment",
"AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), "AntennaModule_5");
assertEquals(2, deleteEntityResult5.size());
// Entity with One_To_One relationship ConnectingSameEntity
- List<OperationResult> deleteEntityResult6 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult6 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment",
"AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), "AntennaModule_1");
assertEquals(2, deleteEntityResult6.size());
// Merge topology data
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> mergeResult = teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(25, mergeResult.size());
// Entity with One_To_One relationship
- List<OperationResult> deleteEntityResult1 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult1 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran",
"NRCellDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"), "NRCellDU_2");
assertEquals(2, deleteEntityResult1.size());
// Entity with One_To_Many relationship
- List<OperationResult> deleteEntityResult2 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult2 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran",
"NRCellDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU"), "NRCellDU_1");
assertEquals(2, deleteEntityResult2.size());
// Entity with Many_To_One relationship
- List<OperationResult> deleteEntityResult3 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult3 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran",
"AntennaCapabilityyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"), "AntennaCapability_id2");
assertEquals(2, deleteEntityResult3.size());
// Entity with Many_To_Many relationship
- List<OperationResult> deleteEntityResult4 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult4 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran",
"AntennaCapabilityyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"), "AntennaCapability_id1");
assertEquals(2, deleteEntityResult4.size());
// Entity with One_To_Many relationship ConnectingSameEntity
- List<OperationResult> deleteEntityResult5 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult5 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment",
"AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), "AntennaModule_6");
assertEquals(2, deleteEntityResult5.size());
// Entity with One_To_One relationship ConnectingSameEntity
- List<OperationResult> deleteEntityResult6 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult6 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment",
"AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"), "AntennaModule_2");
assertEquals(2, deleteEntityResult6.size());
// Again delete AntennaCapability(id=AntennaCapability_id1) should
// return empty result list
- List<OperationResult> deleteEntityResult7 = tiesDbOperations.deleteEntity(dslContext, SchemaRegistry
+ List<OperationResult> deleteEntityResult7 = teivDbOperations.deleteEntity(dslContext, SchemaRegistry
.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran",
"AntennaCapabilityyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"), "AntennaCapability_id1");
assertTrue(deleteEntityResult7.isEmpty(),
// Merge topology data
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> mergeResult = teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(25, mergeResult.size());
"ManagedElement_3", "NRCellDU_2", List.of());
RelationType oneToOneRelationType = SchemaRegistry.getRelationTypeByModuleAndName(oneToOneRelationship.getModule(),
oneToOneRelationship.getType());
- Optional<OperationResult> deleteOneToOneRelationshipResult = tiesDbOperations
+ Optional<OperationResult> deleteOneToOneRelationshipResult = teivDbOperations
.deleteRelationFromEntityTableByRelationId(dslContext, oneToOneRelationship.getId(), oneToOneRelationType);
assertTrue(deleteOneToOneRelationshipResult.isPresent(), "Delete operation should return a present Optional");
"MANAGEDELEMENT_MANAGES_ODUFUNCTION_relation_1", "ManagedElement_1", "ODUFunction_1", List.of());
RelationType oneToManyRelationType = SchemaRegistry.getRelationTypeByModuleAndName(oneToManyRelationship
.getModule(), oneToManyRelationship.getType());
- Optional<OperationResult> deleteOneToManyRelationshipResult = tiesDbOperations
+ Optional<OperationResult> deleteOneToManyRelationshipResult = teivDbOperations
.deleteRelationFromEntityTableByRelationId(dslContext, oneToManyRelationship.getId(),
oneToManyRelationType);
assertTrue(deleteOneToManyRelationshipResult.isPresent(), "Delete operation should return a present Optional");
.of());
RelationType manyToOneRelationType = SchemaRegistry.getRelationTypeByModuleAndName(manyToOneRelationship
.getModule(), manyToOneRelationship.getType());
- Optional<OperationResult> deleteManyToOneRelationshipResult = tiesDbOperations
+ Optional<OperationResult> deleteManyToOneRelationshipResult = teivDbOperations
.deleteRelationFromEntityTableByRelationId(dslContext, manyToOneRelationship.getId(),
manyToOneRelationType);
assertTrue(deleteManyToOneRelationshipResult.isPresent(), "Delete operation should return a present Optional");
"ANTENNAMODULE_SERVES_ANTENNACAPABILITY_relation_1", "AntennaModule_7", "AntennaCapability_id1", List.of());
RelationType manyToManyRelationType = SchemaRegistry.getRelationTypeByModuleAndName(manyToManyRelationship
.getModule(), manyToManyRelationship.getType());
- Optional<OperationResult> deleteManyToManyRelationshipResult = tiesDbOperations
+ Optional<OperationResult> deleteManyToManyRelationshipResult = teivDbOperations
.deleteManyToManyRelationByRelationId(dslContext, manyToManyRelationType, manyToManyRelationship.getId());
assertTrue(deleteManyToManyRelationshipResult.isPresent(), "Delete operation should return a present Optional");
"ANTENNAMODULE_REALISED_BY_ANTENNAMODULE_relation_1", "AntennaModule_1", "AntennaModule_2", List.of());
RelationType connectingSameEntityType = SchemaRegistry.getRelationTypeByModuleAndName(
connectingSameEntityOneToOneRelationship.getModule(), connectingSameEntityOneToOneRelationship.getType());
- Optional<OperationResult> deleteConnectingSameEntityOneToOneRelationshipResult = tiesDbOperations
+ Optional<OperationResult> deleteConnectingSameEntityOneToOneRelationshipResult = teivDbOperations
.deleteManyToManyRelationByRelationId(dslContext, connectingSameEntityType,
connectingSameEntityOneToOneRelationship.getId());
assertTrue(deleteConnectingSameEntityOneToOneRelationshipResult.isPresent(),
"ANTENNAMODULE_DEPLOYED_ON_ANTENNAMODULE_relation_1", "AntennaModule_5", "AntennaModule_6", List.of());
connectingSameEntityType = SchemaRegistry.getRelationTypeByModuleAndName(connectingSameEntityOneToManyRelationship
.getModule(), connectingSameEntityOneToManyRelationship.getType());
- Optional<OperationResult> deleteConnectingSameEntityOneToManyRelationshipResult = tiesDbOperations
+ Optional<OperationResult> deleteConnectingSameEntityOneToManyRelationshipResult = teivDbOperations
.deleteManyToManyRelationByRelationId(dslContext, connectingSameEntityType,
connectingSameEntityOneToManyRelationship.getId());
assertTrue(deleteConnectingSameEntityOneToManyRelationshipResult.isPresent(),
}
@Test
- void testSelectByCmHandleFormSourceIds() {
+ void testSelectByCmHandleFormSourceIds() throws SchemaRegistryException {
Map<String, Object> antennaModule1 = new HashMap<>();
antennaModule1.put("id", "module_id1");
antennaModule1.put("CD_sourceIds", JSONB.jsonb(
antennaModule2.put("CD_sourceIds", JSONB.jsonb(
"[\"urn:3gpp:dn:fdn\"," + "\"urn:cmHandle:395221E080CCF0FD1924103B15873815\"]"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"", antennaModule1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"", antennaModule2,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeAntennMod, antennaModule1);
+ teivDbOperations.merge(dslContext, entityTypeAntennMod, antennaModule2);
- List<String> ids = tiesDbOperations.selectByCmHandleFormSourceIds(dslContext,
- "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"", "395221E080CCF0FD1924103B15873814");
+ List<String> ids = teivDbOperations.selectByCmHandleFormSourceIds(dslContext,
+ "teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\"", "395221E080CCF0FD1924103B15873814");
assertEquals(List.of("module_id1"), ids);
}
CloudEvent cloudEvent = CloudEventTestUtil.getCloudEventFromJsonFile(
"src/test/resources/cloudeventdata/end-to-end/ce-create-many-to-many.json");
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> mergeResult = teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(6, mergeResult.size());
new ArrayList<>());
final ParsedCloudEventData finalParsedCloudEventData = new ParsedCloudEventData(new ArrayList<>(), List.of(
manyToManyRelationship));
- assertThrows(TiesException.class, () -> tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ assertThrows(TeivException.class, () -> teivDbOperations.executeEntityAndRelationshipMergeOperations(
finalParsedCloudEventData, "dmi-plugin:nm-1"));
}
CloudEvent cloudEvent = CloudEventTestUtil.getCloudEventFromJsonFile(
"src/test/resources/cloudeventdata/end-to-end/ce-create-many-to-many.json");
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> mergeResult = teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(6, mergeResult.size());
new ArrayList<>());
final ParsedCloudEventData finalParsedCloudEventData = new ParsedCloudEventData(new ArrayList<>(), List.of(
manyToManyRelationship));
- List<OperationResult> result = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> result = teivDbOperations.executeEntityAndRelationshipMergeOperations(
finalParsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(1, result.size());
CloudEvent cloudEvent = CloudEventTestUtil.getCloudEventFromJsonFile(
"src/test/resources/cloudeventdata/end-to-end/ce-create-many-to-many.json");
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> mergeResult = teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(6, mergeResult.size());
"ANTENNAMODULE_SERVES_ANTENNACAPABILITY", "relation_5", "AntennaModule_5", "AntennaCapability_5",
new ArrayList<>());
parsedCloudEventData = new ParsedCloudEventData(new ArrayList<>(), List.of(manyToManyRelationship));
- List<OperationResult> result = tiesDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData,
+ List<OperationResult> result = teivDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData,
"dmi-plugin:nm-1");
assertEquals(3, result.size());
CloudEvent cloudEvent = CloudEventTestUtil.getCloudEventFromJsonFile(
"src/test/resources/cloudeventdata/end-to-end/ce-create-many-to-many.json");
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = tiesDbOperations.executeEntityAndRelationshipMergeOperations(
+ List<OperationResult> mergeResult = teivDbOperations.executeEntityAndRelationshipMergeOperations(
parsedCloudEventData, "dmi-plugin:nm-1");
assertEquals(6, mergeResult.size());
"ANTENNAMODULE_SERVES_ANTENNACAPABILITY", "relation_5", "AntennaModule_2", "AntennaCapability_5",
new ArrayList<>());
parsedCloudEventData = new ParsedCloudEventData(new ArrayList<>(), List.of(manyToManyRelationship));
- List<OperationResult> result = tiesDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData,
+ List<OperationResult> result = teivDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData,
"dmi-plugin:nm-1");
assertEquals(2, result.size());
assertEquals("ODU_1", manyToOneCreateResult.get(0).getId());
assertEquals("ODU_1", manyToOneCreateResult.get(0).getId());
assertEquals("ODUFunction", manyToOneCreateResult.get(0).getType());
- Map<String, Object> eNodeBAttributes = manyToOneCreateResult.get(0).getAttributes();
- assertTrue(eNodeBAttributes.containsKey("dUpLMNId"));
- assertEquals(JSONB.jsonb("{\"mcc\":\"209\",\"mnc\":\"751\"}"), eNodeBAttributes.get("dUpLMNId"));
+ Map<String, Object> ORUAttributes = manyToOneCreateResult.get(0).getAttributes();
+ assertTrue(ORUAttributes.containsKey("dUpLMNId"));
+ assertEquals(JSONB.jsonb("{\"mcc\":\"209\",\"mnc\":\"751\"}"), ORUAttributes.get("dUpLMNId"));
assertEquals("NRSectorCarrier_1", manyToOneCreateResult.get(1).getId());
assertEquals("NRSectorCarrier", manyToOneCreateResult.get(1).getType());
VALIDATE_MANY_TO_ONE_DIR + "ce-merge-many-to-one-null-attribute.json");
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- List<OperationResult> mergeResult = assertDoesNotThrow(() -> tiesDbOperations
+ List<OperationResult> mergeResult = assertDoesNotThrow(() -> teivDbOperations
.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, "dmi-plugin:nm-1"));
assertEquals(3, mergeResult.size());
assertEquals("ODU_1", mergeResult.get(0).getId());
assertEquals("ODUFunction", mergeResult.get(0).getType());
- eNodeBAttributes = mergeResult.get(0).getAttributes();
- assertTrue(eNodeBAttributes.containsKey("dUpLMNId"));
- assertNull(eNodeBAttributes.get("dUpLMNId"));
+ ORUAttributes = mergeResult.get(0).getAttributes();
+ assertTrue(ORUAttributes.containsKey("dUpLMNId"));
+ assertNull(ORUAttributes.get("dUpLMNId"));
assertEquals("NRSectorCarrier_1", mergeResult.get(1).getId());
assertEquals("NRSectorCarrier", mergeResult.get(1).getType());
assertDbContainsOperationResults(oneToManyResult);
assertDbContainsOperationResults(oneToOneResult);
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_MANY_TO_ONE_DIR + "ce-create-many-to-one2.json"));
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_ONE_TO_MANY_DIR + "ce-create-one-to-many2.json"));
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_ONE_TO_ONE_DIR + "ce-create-one-to-one2.json"));
}
assertDbContainsOperationResults(oneToManyResult);
assertDbContainsOperationResults(oneToOneResult);
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_MANY_TO_ONE_DIR + "ce-create-many-to-one4.json"));
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_ONE_TO_MANY_DIR + "ce-create-one-to-many4.json"));
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_ONE_TO_ONE_DIR + "ce-create-one-to-one4.json"));
}
assertDbContainsOperationResults(oneToManyResult);
assertDbContainsOperationResults(oneToOneResult);
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_MANY_TO_ONE_DIR + "ce-create-many-to-one8.json"));
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_ONE_TO_MANY_DIR + "ce-create-one-to-many8.json"));
- assertThrows(TiesException.class, () -> mergeSingleTestEvent(
+ assertThrows(TeivException.class, () -> mergeSingleTestEvent(
VALIDATE_ONE_TO_ONE_DIR + "ce-create-one-to-one8.json"));
}
RelationType relationType = SchemaRegistry.getRelationTypeByModuleAndName(relationship.getModule(), relationship
.getType());
- assertEquals("ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", relationType.getNotStoringSideTableName());
+ assertEquals("teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"", relationType.getNotStoringSideTableName());
assertEquals("REL_FK_provided-by-oduFunction", relationType
.getNotStoringSideEntityIdColumnNameInStoringSideTable());
assertEquals("NRCellDU", relationType.getStoringSideEntityType().getName());
InvalidFieldInYangDataException {
CloudEvent cloudEvent = CloudEventTestUtil.getCloudEventFromJsonFile(path);
ParsedCloudEventData parsedCloudEventData = cloudEventParser.getCloudEventData(cloudEvent);
- return tiesDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, "dmi-plugin:nm-1");
+ return teivDbOperations.executeEntityAndRelationshipMergeOperations(parsedCloudEventData, "dmi-plugin:nm-1");
}
private void assertDbContainsOperationResults(List<OperationResult> results) {
}
private void tableContainsId(String tableName, String idColumn, OperationResult result) {
- Result<Record> dbResults = TiesDbServiceContainerizedTest.selectAllRowsFromTable(dslContext, tableName);
+ Result<Record> dbResults = TeivDbServiceContainerizedTest.selectAllRowsFromTable(dslContext, tableName);
final boolean contains = dbResults.stream().map(row -> row.get(idColumn)).filter(Objects::nonNull).map(
Object::toString).anyMatch(result.getId()::equals);
assertTrue(contains);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.oran.smo.teiv.service;
import static org.oran.smo.teiv.ingestion.DeadlockRetryPolicy.POSTGRES_DEADLOCK_ERROR_CODE;
-import static org.oran.smo.teiv.utils.TiesConstants.QUOTED_STRING;
-import static org.oran.smo.teiv.utils.TiesConstants.TIES_DATA_SCHEMA;
+import static org.oran.smo.teiv.utils.TeivConstants.QUOTED_STRING;
+import static org.oran.smo.teiv.utils.TeivConstants.TEIV_DATA_SCHEMA;
import static org.jooq.impl.DSL.field;
import static org.jooq.impl.DSL.name;
import static org.jooq.impl.DSL.table;
import org.jooq.util.xml.jaxb.Column;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import org.oran.smo.teiv.schema.EntityType;
+import org.oran.smo.teiv.schema.RelationType;
import org.oran.smo.teiv.schema.SchemaRegistryException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.DynamicPropertySource;
import org.oran.smo.teiv.db.TestPostgresqlContainer;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.schema.SchemaRegistry;
import org.oran.smo.teiv.utils.JooqTypeConverter;
-import org.oran.smo.teiv.utils.TiesConstants;
+import org.oran.smo.teiv.utils.TeivConstants;
import org.oran.smo.teiv.utils.schema.Geography;
@Configuration
@SpringBootTest
-class TiesDbServiceContainerizedTest {
+class TeivDbServiceContainerizedTest {
private static TestPostgresqlContainer postgreSQLContainer = TestPostgresqlContainer.getInstance();
+ private static EntityType entityTypeMe;
+ private static EntityType entityTypeODU;
+ private static EntityType entityTypeSector;
+ private static EntityType entityTypeAntennMod;
+ private static EntityType entityTypeAntennCap;
+ private static RelationType relTypeantennServesAntennCap;
+ private static RelationType relTypeMeManagesODU;
@Autowired
- private TiesDbService tiesDbService;
+ private TeivDbService teivDbService;
@Autowired
- private TiesDbOperations tiesDbOperations;
+ private TeivDbOperations teivDbOperations;
@Autowired
@Qualifier("writeDataDslContext")
@Value("${database.retry-policies.deadlock.retry-attempts}")
private int maxRetryAttemptsForDeadlock;
- private static String updatedTimeColumnName = "updated_time";
-
@DynamicPropertySource
static void setProperties(DynamicPropertyRegistry registry) {
registry.add("spring.datasource.read.jdbc-url", () -> postgreSQLContainer.getJdbcUrl());
}
@BeforeEach
- public void deleteAll() {
- TestPostgresqlContainer.truncateSchemas(List.of(TIES_DATA_SCHEMA), dslContext);
+ public void deleteAllAndMakeTypes() {
+ TestPostgresqlContainer.truncateSchemas(List.of(TEIV_DATA_SCHEMA), dslContext);
+ try {
+ entityTypeMe = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam", "ManagedElement");
+ entityTypeODU = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran", "ODUFunction");
+ entityTypeSector = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran", "Sector");
+ entityTypeAntennMod = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-equipment", "AntennaModule");
+ entityTypeAntennCap = SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-ran", "AntennaCapability");
+ relTypeMeManagesODU = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-oam-ran",
+ "MANAGEDELEMENT_MANAGES_ODUFUNCTION");
+ relTypeantennServesAntennCap = SchemaRegistry.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-equipment-ran",
+ "ANTENNAMODULE_SERVES_ANTENNACAPABILITY");
+ } catch (SchemaRegistryException e) {
+ throw new RuntimeException(e);
+ }
}
@Test
- void testMergeManagedElement() {
+ void testMergeManagedElement() throws SchemaRegistryException {
Map<String, Object> map1 = new HashMap<>();
map1.put("id", "id1");
map1.put("CD_sourceIds", JSONB.jsonb("[\"sourceId1\",\"sourceId2\"]"));
map1.put("metadata", Map.of("reliabilityIndicator", "OK"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", map1, updatedTimeColumnName);
-
- Result<Record> rows = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ teivDbOperations.merge(dslContext, entityTypeMe, map1);
+ Result<Record> rows = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals("{\"reliabilityIndicator\":\"OK\"}", rows.get(0).get("metadata").toString());
map1.remove("metadata");
for (Entry<String, Object> e : map1.entrySet()) {
map2.put("id", "id1");
map2.put("CD_sourceIds", JSONB.jsonb("[\"sourceId3\",\"sourceId4\"]"));
map2.put("metadata", new HashMap<>());
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", map2, updatedTimeColumnName);
-
- Result<Record> rows2 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
- assertEquals("{}", rows2.get(0).get("metadata").toString());
+ teivDbOperations.merge(dslContext, entityTypeMe, map2);
+ Result<Record> rows2 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ assertEquals("{\"reliabilityIndicator\":\"OK\"}", rows2.get(0).get("metadata").toString());
map2.remove("metadata");
for (Entry<String, Object> e : map2.entrySet()) {
assertEquals(e.getValue(), rows2.get(0).get(e.getKey()));
}
@Test
- void testMergeSector() throws IOException {
+ void testMergeSector() throws IOException, SchemaRegistryException {
Map<String, Object> mapWithGeoLocation = new HashMap<>();
mapWithGeoLocation.put("id", "id1");
mapWithGeoLocation.put("sectorId", 7);
mapWithGeoLocation.put("geo-location", new Geography("{\"longitude\": 19.040236,\"latitude\": 47.497913}"));
mapWithGeoLocation.put("azimuth", 7.3);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_Sector\"", mapWithGeoLocation,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeSector, mapWithGeoLocation);
Map<String, Object> mapWithGeoLocationAndHeight = new HashMap<>();
mapWithGeoLocationAndHeight.put("id", "id2");
mapWithGeoLocationAndHeight.put("geo-location", new Geography(
"{\"longitude\": 19.040236,\"latitude\": 47.497913,\"height\": 111.1}"));
mapWithGeoLocationAndHeight.put("azimuth", 8.3);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_Sector\"", mapWithGeoLocationAndHeight,
- updatedTimeColumnName);
-
+ teivDbOperations.merge(dslContext, entityTypeSector, mapWithGeoLocationAndHeight);
Result<?> rows = dslContext.select(field("id"), field("\"sectorId\"").as("sectorId"), field(
- "ST_AsText(\"geo-location\")"), field("azimuth")).from(table("ties_data.\"o-ran-smo-teiv-ran_Sector\""))
+ "ST_AsText(\"geo-location\")"), field("azimuth")).from(table("teiv_data.\"o-ran-smo-teiv-ran_Sector\""))
.fetch();
-
assertEquals("id1", rows.get(0).get("id"));
assertEquals(7L, rows.get(0).get("sectorId"));
assertEquals("POINT(19.040236 47.497913)", rows.get(0).get("ST_AsText(\"geo-location\")"));
Map<String, Object> map1 = new HashMap<>();
map1.put("id", "id1");
map1.put("CD_sourceIds", JSONB.jsonb("[\"sourceId1\",\"sourceId2\"]"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", map1, updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("id", "id2");
map2.put("CD_sourceIds", JSONB.jsonb("[\"sourceId3\",\"sourceId4\"]"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", map2, updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, map2);
- Result<Record> row1 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ Result<Record> row1 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(2, row1.size());
- tiesDbOperations.deleteEntity(dslContext, SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam",
+ teivDbOperations.deleteEntity(dslContext, SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam",
"ManagedElement"), "id1");
- Result<Record> row2 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ Result<Record> row2 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(1, row2.size());
}
@Test
- void testCascadeOnDelete() {
+ void testCascadeOnDelete() throws SchemaRegistryException {
List<Consumer<DSLContext>> dbOperations = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("id", "id1");
map1.put("positionWithinSector", "center");
map1.put("antennaBeamWidth", JSONB.jsonb("[2,4,5]"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"", map1,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeAntennMod, map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("id", "id1");
map2.put("eUtranFqBands", JSONB.jsonb("[\"eUtranFqBands1\",\"eUtranFqBands2\"]"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"", map2,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeAntennCap, map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("id", "id1");
map3.put("aSide_AntennaModule", "id1");
map3.put("bSide_AntennaCapability", "id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"", map3,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, relTypeantennServesAntennCap, map3);
- Result<Record> row1 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"");
+ Result<Record> row1 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\"");
assertEquals(1, row1.size());
- Result<Record> row2 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"");
+ Result<Record> row2 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\"");
assertEquals(1, row2.size());
- Result<Record> row3 = selectAllRowsFromTable(dslContext, "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"");
+ Result<Record> row3 = selectAllRowsFromTable(dslContext, "teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"");
assertEquals(1, row3.size());
dbOperations.add(dslContext -> {
try {
- tiesDbOperations.deleteEntity(dslContext, SchemaRegistry.getEntityTypeByModuleAndName(
+ teivDbOperations.deleteEntity(dslContext, SchemaRegistry.getEntityTypeByModuleAndName(
"o-ran-smo-teiv-equipment", "AntennaModule"), "id1");
} catch (SchemaRegistryException e) {
throw new RuntimeException(e);
}
});
- assertDoesNotThrow(() -> tiesDbService.execute(dbOperations));
+ assertDoesNotThrow(() -> teivDbService.execute(dbOperations));
- Result<Record> row4 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-equipment_AntennaModule\"");
+ Result<Record> row4 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-equipment_AntennaModule\"");
assertEquals(0, row4.size());
- Result<Record> row5 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-ran_AntennaCapability\"");
+ Result<Record> row5 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-ran_AntennaCapability\"");
assertEquals(1, row5.size());
- Result<Record> row6 = selectAllRowsFromTable(dslContext, "ties_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"");
+ Result<Record> row6 = selectAllRowsFromTable(dslContext, "teiv_data.\"CFC235E0404703D1E4454647DF8AAE2C193DB402\"");
assertEquals(0, row6.size());
}
@Test
- void testTriggerOnDelete() {
+ void testTriggerOnDelete() throws SchemaRegistryException {
List<Consumer<DSLContext>> dbOperations = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("id", "id1");
map1.put("gNBId", 1);
map1.put("dUpLMNId", JSONB.jsonb("{\"mcc\":\"dUpLMNId1\"}"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", map1, updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, map1);
Map<String, Object> map2 = new HashMap<>();
map2.put("id", "id1");
map2.put("CD_sourceIds", JSONB.jsonb("[\"sourceId1\",\"sourceId2\"]"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", map2, updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, map2);
Map<String, Object> map3 = new HashMap<>();
map3.put("id", "id1");
map3.put("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "relId");
map3.put("REL_FK_managed-by-managedElement", "id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", map3, updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, map3);
- Result<Record> row2 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ Result<Record> row2 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(1, row2.size());
- Result<Record> row1 = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ Result<Record> row1 = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals(1, row1.size());
dbOperations.add(dslContext -> {
try {
- tiesDbOperations.deleteEntity(dslContext, SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam",
+ teivDbOperations.deleteEntity(dslContext, SchemaRegistry.getEntityTypeByModuleAndName("o-ran-smo-teiv-oam",
"ManagedElement"), "id1");
} catch (SchemaRegistryException e) {
throw new RuntimeException(e);
}
});
- assertDoesNotThrow(() -> tiesDbService.execute(dbOperations));
+ assertDoesNotThrow(() -> teivDbService.execute(dbOperations));
Result<Record> oduFuctionRecords = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals("id1", oduFuctionRecords.get(0).get("id"));
assertEquals(1L, oduFuctionRecords.get(0).get("gNBId"));
assertNull(oduFuctionRecords.get(0).get("REL_FK_managed-by-managedElement"));
assertNull(oduFuctionRecords.get(0).get("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION"));
Result<Record> managedElementRecords = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(0, managedElementRecords.size());
}
@Test
- void testMergeOneToManyRelationship() {
+ void testMergeOneToManyRelationship() throws SchemaRegistryException {
Map<String, Object> oduFuctionEntity1 = new HashMap<>();
oduFuctionEntity1.put("id", "id1");
oduFuctionEntity1.put("gNBId", 1);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFuctionEntity1,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, oduFuctionEntity1);
Map<String, Object> managedElementEntity1 = new HashMap<>();
managedElementEntity1.put("id", "id1");
managedElementEntity1.put("CD_sourceIds", JSONB.jsonb("{\"name\":\"Hellmann1\"}"));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity1,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity1);
Map<String, Object> rel = new HashMap<>();
rel.put("id", "id1");
rel.put("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "rel_id1");
rel.put("REL_FK_managed-by-managedElement", "id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", rel, updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, relTypeMeManagesODU, rel);
- Result<Record> rowsBeforeMerge = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ Result<Record> rowsBeforeMerge = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals("id1", rowsBeforeMerge.get(0).get("id"));
assertEquals(1L, rowsBeforeMerge.get(0).get("gNBId"));
assertEquals("id1", rowsBeforeMerge.get(0).get("REL_FK_managed-by-managedElement"));
Map<String, Object> oduFuctionEntity2 = new HashMap<>();
oduFuctionEntity2.put("id", "id2");
oduFuctionEntity2.put("gNBId", 2);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFuctionEntity2,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, oduFuctionEntity2);
Map<String, Object> modifiedRel = new HashMap<>();
modifiedRel.put("id", "id2");
modifiedRel.put("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "rel_id2");
modifiedRel.put("REL_FK_managed-by-managedElement", "id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", modifiedRel,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, relTypeMeManagesODU, modifiedRel);
- Result<?> rowsAfterMerge = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ Result<?> rowsAfterMerge = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals("id1", rowsBeforeMerge.get(0).get("id"));
assertEquals(1L, rowsBeforeMerge.get(0).get("gNBId"));
void testDeleteOneToManyRelationship() throws SchemaRegistryException {
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "me-id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity);
Map<String, Object> oduFuctionEntity = new HashMap<>();
oduFuctionEntity.put("id", "odu-id1");
oduFuctionEntity.put("gNBId", 1);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFuctionEntity,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, oduFuctionEntity);
Map<String, Object> meToOduFuncRelation = new HashMap<>();
meToOduFuncRelation.put("id", "odu-id1");
meToOduFuncRelation.put("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "eiid1");
meToOduFuncRelation.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION", JooqTypeConverter.toJsonb(List.of(
"fdn1", "cmHandleId1")));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", meToOduFuncRelation,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, meToOduFuncRelation);
- tiesDbOperations.deleteRelationFromEntityTableByRelationId(dslContext, "eiid1", SchemaRegistry
+ teivDbOperations.deleteRelationFromEntityTableByRelationId(dslContext, "eiid1", SchemaRegistry
.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-oam-ran", "MANAGEDELEMENT_MANAGES_ODUFUNCTION"));
- Result<Record> rows = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ Result<Record> rows = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals("odu-id1", rows.get(0).get("id"));
assertEquals(1L, rows.get(0).get("gNBId"));
assertNull(rows.get(0).get("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION"));
}
@Test
- void testTransactionalMergeSucceeds() {
+ void testTransactionalMergeSucceeds() throws SchemaRegistryException {
List<Consumer<DSLContext>> dbOperations = new ArrayList<>();
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "me-id1");
- dbOperations.add(wrDSLContext -> tiesDbOperations.merge(wrDSLContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity, updatedTimeColumnName));
+ dbOperations.add(wrDSLContext -> teivDbOperations.merge(wrDSLContext, entityTypeMe, managedElementEntity));
Map<String, Object> oduFuctionEntity = new HashMap<>();
oduFuctionEntity.put("id", "odu-id1");
oduFuctionEntity.put("gNBId", 1);
- dbOperations.add(wrDSLContext -> tiesDbOperations.merge(wrDSLContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFuctionEntity, updatedTimeColumnName));
+ dbOperations.add(wrDSLContext -> teivDbOperations.merge(wrDSLContext, entityTypeODU, oduFuctionEntity));
Map<String, Object> meToOduFuncRelation = new HashMap<>();
meToOduFuncRelation.put("id", "odu-id1");
meToOduFuncRelation.put("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "eiid1");
meToOduFuncRelation.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION", JooqTypeConverter.toJsonb(List.of(
"fdn1", "cmHandleId1")));
- dbOperations.add(wrDSLContext -> tiesDbOperations.merge(wrDSLContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", meToOduFuncRelation, updatedTimeColumnName));
+ dbOperations.add(wrDSLContext -> teivDbOperations.merge(wrDSLContext, entityTypeODU, meToOduFuncRelation));
- assertDoesNotThrow(() -> tiesDbService.execute(dbOperations));
+ assertDoesNotThrow(() -> teivDbService.execute(dbOperations));
Result<Record> rowsFromOduFuctionTable = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals(1, rowsFromOduFuctionTable.size());
assertEquals("me-id1", rowsFromOduFuctionTable.get(0).get("REL_FK_managed-by-managedElement"));
assertEquals("eiid1", rowsFromOduFuctionTable.get(0).get("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION"));
"REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION"));
Result<Record> rowsFromManagedElement = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(1, rowsFromManagedElement.size());
}
@Test
- void testTransactionalMergeRollsBackAfterRelationshipError() {
+ void testTransactionalMergeRollsBackAfterRelationshipError() throws SchemaRegistryException {
List<Consumer<DSLContext>> dbOperations = new ArrayList<>();
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "me-id1");
- dbOperations.add(wrDSLContext -> tiesDbOperations.merge(wrDSLContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity, updatedTimeColumnName));
+ dbOperations.add(wrDSLContext -> teivDbOperations.merge(wrDSLContext, entityTypeMe, managedElementEntity));
Map<String, Object> oduFuctionEntity = new HashMap<>();
oduFuctionEntity.put("id", "odu-id1");
oduFuctionEntity.put("gNBId", 1);
- dbOperations.add(wrDSLContext -> tiesDbOperations.merge(wrDSLContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFuctionEntity, updatedTimeColumnName));
+ dbOperations.add(wrDSLContext -> teivDbOperations.merge(wrDSLContext, entityTypeODU, oduFuctionEntity));
// Create a faulty relationship map to trigger the rollback
Map<String, Object> faultyCloudNativeSystemRelationship = new HashMap<>();
faultyCloudNativeSystemRelationship.put("id", "odu_id1");
faultyCloudNativeSystemRelationship.put("REL_MANAGEDELEMENT_MANAGES_ODUFUNCTION_BAAAD", "managed_element_id1");
faultyCloudNativeSystemRelationship.put("REL_MANAGEDELEMENT_MANAGES_ODUFUNCTION_EIID", "eiid1");
- dbOperations.add(wrDSLContext -> tiesDbOperations.merge(wrDSLContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", faultyCloudNativeSystemRelationship,
- updatedTimeColumnName));
+ dbOperations.add(wrDSLContext -> teivDbOperations.merge(wrDSLContext, entityTypeODU,
+ faultyCloudNativeSystemRelationship));
- assertThrows(TiesException.class, () -> tiesDbService.execute(dbOperations));
+ assertThrows(TeivException.class, () -> teivDbService.execute(dbOperations));
Result<Record> rowsFromManagedElementTable = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(0, rowsFromManagedElementTable.size());
Result<Record> rowsFromCloudNativeSystem = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals(0, rowsFromCloudNativeSystem.size());
}
@Test
- void testTransactionalDeleteSucceeds() {
+ void testTransactionalDeleteSucceeds() throws SchemaRegistryException {
List<Consumer<DSLContext>> dbOperations = new ArrayList<>();
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "me-id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity);
Map<String, Object> oduFuctionEntity = new HashMap<>();
oduFuctionEntity.put("id", "odu-id1");
oduFuctionEntity.put("gNBId", 1);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFuctionEntity,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, oduFuctionEntity);
Map<String, Object> meToOduFuncRelation = new HashMap<>();
meToOduFuncRelation.put("id", "odu-id1");
meToOduFuncRelation.put("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "eiid1");
meToOduFuncRelation.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION", JooqTypeConverter.toJsonb(List.of(
"fdn1", "cmHandleId1")));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", meToOduFuncRelation,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, meToOduFuncRelation);
Result<Record> rowsFromOduFuctionBeforeDelete = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals(1, rowsFromOduFuctionBeforeDelete.size());
assertEquals("me-id1", rowsFromOduFuctionBeforeDelete.get(0).get("REL_FK_managed-by-managedElement"));
assertEquals("eiid1", rowsFromOduFuctionBeforeDelete.get(0).get("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION"));
"REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION"));
Result<Record> rowsFromManagedElementBeforeDelete = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(1, rowsFromManagedElementBeforeDelete.size());
dbOperations.add(wrDSLContext -> {
try {
- tiesDbOperations.deleteEntity(wrDSLContext, SchemaRegistry.getEntityTypeByModuleAndName(
+ teivDbOperations.deleteEntity(wrDSLContext, SchemaRegistry.getEntityTypeByModuleAndName(
"o-ran-smo-teiv-ran", "ODUFunction"), "odu-id1");
} catch (SchemaRegistryException e) {
e.printStackTrace();
dbOperations.add(wrDSLContext -> {
try {
- tiesDbOperations.deleteEntity(wrDSLContext, SchemaRegistry.getEntityTypeByModuleAndName(
+ teivDbOperations.deleteEntity(wrDSLContext, SchemaRegistry.getEntityTypeByModuleAndName(
"o-ran-smo-teiv-oam", "ManagedElement"), "me-id1");
} catch (SchemaRegistryException e) {
e.printStackTrace();
dbOperations.add(wrDSLContext -> {
try {
- tiesDbOperations.deleteRelationFromEntityTableByRelationId(wrDSLContext, "eiid1", SchemaRegistry
+ teivDbOperations.deleteRelationFromEntityTableByRelationId(wrDSLContext, "eiid1", SchemaRegistry
.getRelationTypeByModuleAndName("o-ran-smo-teiv-rel-oam-ran",
"MANAGEDELEMENT_MANAGES_ODUFUNCTION"));
} catch (SchemaRegistryException e) {
}
});
- assertDoesNotThrow(() -> tiesDbService.execute(dbOperations));
+ assertDoesNotThrow(() -> teivDbService.execute(dbOperations));
Result<Record> rowsFromManagedElementTable = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(0, rowsFromManagedElementTable.size());
- Result<Record> rowsOduFuction = selectAllRowsFromTable(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ Result<Record> rowsOduFuction = selectAllRowsFromTable(dslContext, "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals(0, rowsOduFuction.size());
}
@Test
- void testTransactionalDeleteRollbackAfterRelationshipError() {
+ void testTransactionalDeleteRollbackAfterRelationshipError() throws SchemaRegistryException {
List<Consumer<DSLContext>> dbOperations = new ArrayList<>();
Map<String, Object> managedElementEntity = new HashMap<>();
managedElementEntity.put("id", "me-id1");
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity);
Map<String, Object> oduFuctionEntity = new HashMap<>();
oduFuctionEntity.put("id", "odu-id1");
oduFuctionEntity.put("gNBId", 1);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", oduFuctionEntity,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, oduFuctionEntity);
Map<String, Object> meToOduFuncRelation = new HashMap<>();
meToOduFuncRelation.put("id", "odu-id1");
meToOduFuncRelation.put("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "eiid1");
meToOduFuncRelation.put("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION", JooqTypeConverter.toJsonb(List.of(
"fdn1", "cmHandleId1")));
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"", meToOduFuncRelation,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeODU, meToOduFuncRelation);
Result<Record> rowsFromManagedElementBeforeDelete = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(1, rowsFromManagedElementBeforeDelete.size());
Result<Record> rowsFromOduFuctionBeforeDelete = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals(1, rowsFromOduFuctionBeforeDelete.size());
assertEquals(1, rowsFromOduFuctionBeforeDelete.size());
assertEquals("me-id1", rowsFromOduFuctionBeforeDelete.get(0).get("REL_FK_managed-by-managedElement"));
dbOperations.add(wrDSLContext -> {
try {
- tiesDbOperations.deleteEntity(wrDSLContext, SchemaRegistry.getEntityTypeByModuleAndName(
+ teivDbOperations.deleteEntity(wrDSLContext, SchemaRegistry.getEntityTypeByModuleAndName(
"o-ran-smo-teiv-oam", "ManagedElement"), "me-id1");
} catch (SchemaRegistryException e) {
e.printStackTrace();
});
dbOperations.add(wrDSLContext -> {
try {
- tiesDbOperations.deleteEntity(wrDSLContext, SchemaRegistry.getEntityTypeByModuleAndName(
+ teivDbOperations.deleteEntity(wrDSLContext, SchemaRegistry.getEntityTypeByModuleAndName(
"o-ran-smo-teiv-ran", "ODUFunction"), "odu-id1");
} catch (SchemaRegistryException e) {
e.printStackTrace();
// Add a faulty relationship delete to trigger the rollback
dbOperations.add(wrDSLContext -> {
- tiesDbOperations.deleteRelationFromEntityTableByRelationId(wrDSLContext, "eiid1", null);
+ teivDbOperations.deleteRelationFromEntityTableByRelationId(wrDSLContext, "eiid1", null);
});
- assertThrows(TiesException.class, () -> tiesDbService.execute(dbOperations));
+ assertThrows(TeivException.class, () -> teivDbService.execute(dbOperations));
Result<Record> rowsFromManagedElement = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(1, rowsFromManagedElement.size());
Result<Record> rowsFromOduFuction = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
+ "teiv_data.\"o-ran-smo-teiv-ran_ODUFunction\"");
assertEquals(1, rowsFromOduFuction.size());
assertEquals(1, rowsFromOduFuction.size());
assertEquals("me-id1", rowsFromOduFuction.get(0).get("REL_FK_managed-by-managedElement"));
}
@Test
- void testDeadlockRetry() throws InterruptedException {
+ void testDeadlockRetry() throws InterruptedException, SchemaRegistryException {
List<Consumer<DSLContext>> dbOperations1 = new ArrayList<>();
List<Consumer<DSLContext>> dbOperations2 = new ArrayList<>();
final CountDownLatch firstTransactionCompletedMergeEntity1 = new CountDownLatch(1);
final CountDownLatch secondTransactionCompletedMergeEntity2 = new CountDownLatch(1);
dbOperations1.add(dslContext -> {
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity1,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity1);
firstTransactionCompletedMergeEntity1.countDown();
try {
secondTransactionCompletedMergeEntity2.await();
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity2,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity3,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity2);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity3);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
// Try to add the same rows in another transaction in another order.
dbOperations2.add(dslContext -> {
try {
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity2,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity2);
secondTransactionCompletedMergeEntity2.countDown();
firstTransactionCompletedMergeEntity1.await();
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity1,
- updatedTimeColumnName);
- tiesDbOperations.merge(dslContext, "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"", managedElementEntity4,
- updatedTimeColumnName);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity1);
+ teivDbOperations.merge(dslContext, entityTypeMe, managedElementEntity4);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
});
- Thread t1 = new Thread(() -> tiesDbService.execute(dbOperations1));
- Thread t2 = new Thread(() -> tiesDbService.execute(dbOperations2));
+ Thread t1 = new Thread(() -> teivDbService.execute(dbOperations1));
+ Thread t2 = new Thread(() -> teivDbService.execute(dbOperations2));
t1.start();
t2.start();
t1.join();
t2.join();
Result<Record> rowsFromManagedElement = selectAllRowsFromTable(dslContext,
- "ties_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
+ "teiv_data.\"o-ran-smo-teiv-oam_ManagedElement\"");
assertEquals(4, rowsFromManagedElement.size());
}
throw new DataAccessException("A deadlock occurred in the db", new SQLException("details",
POSTGRES_DEADLOCK_ERROR_CODE));
});
- assertThrows(TiesException.class, () -> tiesDbService.execute(dbOperations));
+ assertThrows(TeivException.class, () -> teivDbService.execute(dbOperations));
assertEquals(maxRetryAttemptsForDeadlock, attempts.get());
}
*
* @param readDataDslContext
* @param tableName
- * For example: ties_data."AntennaModule"
+ * For example: teiv_data."AntennaModule"
* @return the fetched rows. Values of geography type are represented as String
* values.
*/
List<Column> columns = readDataDslContext.meta(table).informationSchema().getColumns();
List<Field<?>> columnsToSelect = columns.stream().map(c -> {
if ("geography".equals(c.getDataType())) {
- return field(String.format(TiesConstants.ST_TO_STRING, String.format(QUOTED_STRING, c.getColumnName())));
+ return field(String.format(TeivConstants.ST_TO_STRING, String.format(QUOTED_STRING, c.getColumnName())));
} else if ("jsonb".equals(c.getDataType())) {
return field(name(c.getColumnName()), JSONB.class);
} else {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.utils;
-import static org.oran.smo.teiv.utils.TiesConstants.CLASSIFIERS;
-import static org.oran.smo.teiv.utils.TiesConstants.DECORATORS;
+import static org.oran.smo.teiv.utils.TeivConstants.CLASSIFIERS;
+import static org.oran.smo.teiv.utils.TeivConstants.DECORATORS;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.exception.YangException;
import org.oran.smo.teiv.schema.MockSchemaLoader;
import org.oran.smo.teiv.schema.SchemaLoader;
MultipartFile wrongClassifiersFile = new MockMultipartFile("file", "file.yang", MediaType.MULTIPART_FORM_DATA_VALUE,
("module module-rapp-module1 {\n" + " \n" + "\tyang-version 1.1;\n" + "\tnamespace \"urn:module-rapp-model\";\n" + "\tprefix testModule;\n" + "\t\n" + " import o-ran-smo-teiv-common-yang-types { prefix model; }\n" + "\timport o-ran-smo-teiv-common-yang-extensions {prefix or-teiv-yext; }\n" + "\t\n" + "\trevision \"2024-05-08\" {\n" + "\t\tdescription\n" + "\t\t\"Initial revision.\";\n" + "\t\tor-teiv-yext:label 0.3.0;\n" + "\t}\n" + "\t\n" + "\taugment /model:decorators {\n" + " leaf test1 {\n" + " type string;\n" + " }\n" + "\t\tleaf test2 {\n" + " type boolean;\n" + " }\n" + "\t\tleaf test3 {\n" + " type uint32;\n" + " }\n" + " }\n" + "\t\n" + "\tidentity geo-classifier {\n" + "\t\tbase geo-classifier;\n" + "\t}\n" + " \n" + " identity urban {\n" + " base geo-classifier;\n" + " }\n" + "\t\n" + "\tidentity rural {\n" + " base geo-classifier;\n" + " }\n" + "\n" + "}")
.getBytes());
- assertThrows(TiesException.class, () -> ExposureYangParser.validateSchemasYang(wrongClassifiersFile));
+ assertThrows(TeivException.class, () -> ExposureYangParser.validateSchemasYang(wrongClassifiersFile));
}
@Test
MultipartFile wrongDecoratorsFile = new MockMultipartFile("file", "file.yang", MediaType.MULTIPART_FORM_DATA_VALUE,
("module module-rapp-module1 {\n" + " \n" + "\tyang-version 1.1;\n" + "\tnamespace \"urn:module-rapp-model\";\n" + "\tprefix testModule;\n" + "\t\n" + " import o-ran-smo-teiv-common-yang-types { prefix model; }\n" + "\timport o-ran-smo-teiv-common-yang-extensions {prefix or-teiv-yext; }\n" + "\t\n" + "\trevision \"2024-05-08\" {\n" + "\t\tdescription\n" + "\t\t\"Initial revision.\";\n" + "\t\tor-teiv-yext:label 0.3.0;\n" + "\t}\n" + "\t\n" + "\taugment /model:decorators {\n" + " leaf test1 {\n" + " type test;\n" + " }\n" + "\t\tleaf test2 {\n" + " type boolean;\n" + " }\n" + "\t\tleaf test3 {\n" + " type uint32;\n" + " }\n" + " }\n" + "\t\n" + "\tidentity geo-classifier {\n" + "\t\tbase geo-classifier;\n" + "\t}\n" + " \n" + " identity urban {\n" + " base geo-classifier;\n" + " }\n" + "\t\n" + "\tidentity rural {\n" + " base geo-classifier;\n" + " }\n" + "\n" + "}")
.getBytes());
- assertThrows(TiesException.class, () -> ExposureYangParser.validateSchemasYang(wrongDecoratorsFile));
+ assertThrows(TeivException.class, () -> ExposureYangParser.validateSchemasYang(wrongDecoratorsFile));
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import org.junit.jupiter.api.Test;
import org.oran.smo.teiv.exception.InvalidFieldInYangDataException;
-import org.oran.smo.teiv.exception.TiesException;
+import org.oran.smo.teiv.exception.TeivException;
import org.oran.smo.teiv.utils.schema.Geography;
class JooqTypeConverterTest {
@Test
void testThrowExceptionJsonbToList() {
final JSONB invalidJson = JSONB.valueOf("[\"one\", \"two]");
- Assertions.assertThrowsExactly(TiesException.class, () -> JooqTypeConverter.jsonbToList(invalidJson));
+ Assertions.assertThrowsExactly(TeivException.class, () -> JooqTypeConverter.jsonbToList(invalidJson));
}
@Test
void testThrowExceptionJsonbToMap() {
final JSONB invalidJson = JSONB.valueOf("{\"key\": \"valu");
- Assertions.assertThrowsExactly(TiesException.class, () -> JooqTypeConverter.jsonbToList(invalidJson));
+ Assertions.assertThrowsExactly(TeivException.class, () -> JooqTypeConverter.jsonbToList(invalidJson));
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*/
package org.oran.smo.teiv.utils;
-public class TiesTestConstants {
+public class TeivTestConstants {
public static final String APPLICATION_JSON = "application/json";
public static final String SPRING_BOOT_SERVER_HOST = "kafka.server.bootstrap-server-host:#{environment.getProperty(\"spring.embedded.kafka.brokers\").split(\":\")[0]}";
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
@Test
- void testReturnAllTiesSchemas() {
+ void testReturnAllTeivSchemas() {
//when
- List<OranTeivSchema> OranTeivSchemasMetaDataList = YangParser.returnAllTiesSchemas(yangParser.extractYangData());
+ List<OranTeivSchema> OranTeivSchemasMetaDataList = YangParser.returnAllTeivSchemas(yangParser.extractYangData());
//then
Assertions.assertEquals(10, OranTeivSchemasMetaDataList.size());
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
assertThrows(IOException.class, () -> new Geography("{\"longitude\": 19.040236 \"height\": 19.040236}"));
assertThrows(IOException.class, () -> new Geography("{\"latitude\": 47.497913 \"height\": 19.040236}"));
+
+ assertThrows(IOException.class, () -> new Geography(
+ "{\"longitude\": 180.040236 \"latitude\": 47.497913 \"height\": 19.040236}"));
+ assertThrows(IOException.class, () -> new Geography(
+ "{\"longitude\": 19.040236 \"latitude\": -147.497913 \"height\": 19.040236}"));
}
}
# ============LICENSE_END=========================================================
#
-spring.profiles.active: test
-
#Metrics related configurations
management:
endpoint:
"type": "ran-logical-topology.create",
"time": "2023-10-25T13:30:01Z",
"datacontenttype": "application/json",
- "dataschema": "https://ties:8080/schemas/v1/r1-topology",
+ "dataschema": "https://teiv:8080/schemas/v1/r1-topology",
"data": {
"entities": [
{
"type": "ran-logical-topology.create",
"time": "2023-10-25T13:30:01Z",
"datacontenttype": "application/json",
- "dataschema": "https://ties:8080/schemas/v1/r1-topology",
+ "dataschema": "https://teiv:8080/schemas/v1/r1-topology",
"data": {
"entities": [
{
"type": "ran-logical-topology.create",
"time": "2023-10-25T13:30:01Z",
"datacontenttype": "application/json",
- "dataschema": "https://ties:8080/schemas/v1/r1-topology",
+ "dataschema": "https://teiv:8080/schemas/v1/r1-topology",
"data": {
"entities": [
{
}
},
"sourceIds": [
- "source1",
- "source2"
+ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Ireland,MeContext=NR01gNodeBRadio00009,ManagedElement=NR01gNodeBRadio00009,OCUCPFunction=1",
+ "urn:cmHandle:395221E080CCF0FD1929103B15999999"
]
}
]
"type": "ran-logical-topology.create",
"time": "2023-10-25T13:30:01Z",
"datacontenttype": "application/json",
- "dataschema": "https://ties:8080/schemas/v1/r1-topology",
+ "dataschema": "https://teiv:8080/schemas/v1/r1-topology",
"data": {
"entities": [
{
"aSide": "AntennaModule_1",
"bSide": "AntennaCapability_1",
"sourceIds": [
- "source12",
- "source22"
+ "source1",
+ "source2"
]
},
{
"aSide": "AntennaModule_2",
"bSide": "AntennaCapability_2",
"sourceIds": [
- "source12",
- "source22"
+ "source1",
+ "source2"
]
}
]
--- /dev/null
+{
+ "specversion": "1.0",
+ "id": "a30e63c9-d29e-46ff-b99a-b63ed83f0002",
+ "source": "dmi-plugin:enm-1",
+ "type": "topology-inventory-ingestion.merge",
+ "time": "2023-10-25T13:30:12Z",
+ "datacontenttype": "application/json",
+ "dataschema": "topology-inventory-ingestion:events:merge:1.0.0",
+ "data": {
+ "entities": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "ODU_1",
+ "attributes": {
+ "dUpLMNId": {
+ "mcc": "777",
+ "mnc": "888"
+ },
+ "gNBDUId": 44,
+ "gNBId": 4321,
+ "gNBIdLength": 9
+ },
+ "sourceIds": [
+ "source1",
+ "source2"
+ ]
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "NRCellDU_1",
+ "attributes": {
+ "cellLocalId": 4589,
+ "nCI": 2
+ },
+ "sourceIds": [
+ "source1",
+ "source2"
+ ]
+ },
+ {
+ "id": "NRCellDU_2",
+ "attributes": {
+ "cellLocalId": 45891
+ },
+ "sourceIds": [
+ "source1",
+ "source2"
+ ]
+ },
+ {
+ "id": "NRCellDU_3",
+ "attributes": {
+ "cellLocalId": 964
+ },
+ "sourceIds": [
+ "source1",
+ "source2"
+ ]
+ }
+ ]
+ }
+ ],
+ "relationships": [
+ {
+ "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU": [
+ {
+ "id": "relation_7",
+ "aSide": "ODU_1",
+ "bSide": "NRCellDU_1",
+ "sourceIds": [
+ "source1",
+ "source2"
+ ]
+ },
+ {
+ "id": "relation_8",
+ "aSide": "ODU_1",
+ "bSide": "NRCellDU_2",
+ "sourceIds": [
+ "source1",
+ "source2"
+ ]
+ },
+ {
+ "id": "relation_9",
+ "aSide": "ODU_1",
+ "bSide": "NRCellDU_3",
+ "sourceIds": [
+ "source1",
+ "source2"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+}
"id": "NRCellDU_51",
"CD_sourceIds": [
"relation_one_to_one_missing_bSide"
- ]
+ ],
+ "metadata": {
+ "reliabilityIndicator": "ADVISED",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
],
"28C9A375E800E82308EBE7DA2932EF2C0AF13C38": [
"CD_sourceIds": [
"relation_one_to_one_missing_aSide"
],
+ "metadata": {
+ "reliabilityIndicator": "ADVISED",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
"REL_CD_1F61FA6DDAECE90540F9880F2A98037B1530A5A4": [
"source1",
"source2"
{
"id": "NRCellDU_4",
"cellLocalId": 470,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
"REL_FK_provided-by-oduFunction": "ODU_3",
"REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_one_to_many_aSide_missing",
"REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU": [
"CD_sourceIds": [
"relation_one_to_many_bSide_missing"
],
+ "metadata": {
+ "reliabilityIndicator": "ADVISED",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
"REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU": [
"source1",
"source2"
},
"gNBDUId": 13,
"gNBId": 12345,
- "gNBIdLength": 5
+ "gNBIdLength": 5,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "ODU_3",
"CD_sourceIds": [
"relation_one_to_many_aSide_missing"
- ]
+ ],
+ "metadata": {
+ "reliabilityIndicator": "ADVISED",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
],
"o-ran-smo-teiv-equipment_AntennaModule": [
"id": "AntennaModule_123",
"CD_sourceIds": [
"relation_many_to_many_aSide_missing"
- ]
+ ],
+ "metadata": {
+ "reliabilityIndicator": "ADVISED",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "AntennaModule_11",
"CD_sourceIds": [
"relation_many_to_many_both_sides_missing"
- ]
+ ],
+ "metadata": {
+ "reliabilityIndicator": "ADVISED",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
],
"o-ran-smo-teiv-ran_AntennaCapability": [
"id": "AntennaCapability_123",
"CD_sourceIds": [
"relation_many_to_many_bSide_missing"
- ]
+ ],
+ "metadata": {
+ "reliabilityIndicator": "ADVISED",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "AntennaCapability_22",
"CD_sourceIds": [
"relation_many_to_many_both_sides_missing"
- ]
+ ],
+ "metadata": {
+ "reliabilityIndicator": "ADVISED",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
],
"CFC235E0404703D1E4454647DF8AAE2C193DB402": [
"o-ran-smo-teiv-equipment_AntennaModule": [
{
"id": "AntennaModule_1",
- "positionWithinSector": "center"
+ "positionWithinSector": "center",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "AntennaModule_2",
- "positionWithinSector": "center2"
+ "positionWithinSector": "center2",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
],
"o-ran-smo-teiv-ran_AntennaCapability": [
"geranFqBands": {
"attribute_1": "1",
"attribute_2": "2"
+ },
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
}
},
{
"geranFqBands": {
"attribute_1": "1",
"attribute_2": "2"
+ },
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
}
}
],
{
"id": "relation_1",
"aSide_AntennaModule": "AntennaModule_1",
- "bSide_AntennaCapability": "AntennaCapability_1"
+ "bSide_AntennaCapability": "AntennaCapability_1",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "relation_2",
"aSide_AntennaModule": "AntennaModule_2",
- "bSide_AntennaCapability": "AntennaCapability_2"
+ "bSide_AntennaCapability": "AntennaCapability_2",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
]
}
{
"id": "ManagedElement_21",
"REL_FK_used-nrCellDu": "NRCellDU_21",
- "REL_ID_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU": "relation_11"
+ "REL_ID_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU": "relation_11",
+ "REL_metadata_C9E09FBCCBA1F6A3252B71B869B269EF28AACDFB": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "ManagedElement_41",
"REL_FK_used-nrCellDu": "NRCellDU_31",
- "REL_ID_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU": "relation_12"
+ "REL_ID_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU": "relation_12",
+ "REL_metadata_C9E09FBCCBA1F6A3252B71B869B269EF28AACDFB": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
]
}
"o-ran-smo-teiv-equipment_AntennaModule": [
{
"id": "AntennaModule_3",
- "positionWithinSector": "center"
+ "positionWithinSector": "center",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "AntennaModule_4",
- "positionWithinSector": "center2"
+ "positionWithinSector": "center2",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
],
"o-ran-smo-teiv-ran_AntennaCapability": [
"attribute_2": "2"
},
"eUtranFqBands": null,
- "nRFqBands": null
+ "nRFqBands": null,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "AntennaCapability_4",
"attribute_2": "2"
},
"eUtranFqBands": null,
- "nRFqBands": null
+ "nRFqBands": null,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
],
"CFC235E0404703D1E4454647DF8AAE2C193DB402": [
{
"id": "relation_3",
"aSide_AntennaModule": "AntennaModule_3",
- "bSide_AntennaCapability": "AntennaCapability_3"
+ "bSide_AntennaCapability": "AntennaCapability_3",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "relation_4",
"aSide_AntennaModule": "AntennaModule_4",
- "bSide_AntennaCapability": "AntennaCapability_4"
+ "bSide_AntennaCapability": "AntennaCapability_4",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
]
}
"id": "ManagedElement_41",
"REL_FK_used-nrCellDu": null,
"REL_ID_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU": null,
- "REL_metadata_780D8ABEAC14A0B2ET73FC4EB093C446F7CD3E56": null
+ "REL_metadata_C9E09FBCCBA1F6A3252B71B869B269EF28AACDFB": null
}
]
}
--- /dev/null
+{
+ "o-ran-smo-teiv-equipment_AntennaModule": [
+ {
+ "id": "AntennaModule_1",
+ "positionWithinSector": "left",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ },
+ {
+ "id": "AntennaModule_2",
+ "positionWithinSector": "left2",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ }
+ ],
+ "o-ran-smo-teiv-ran_AntennaCapability": [
+ {
+ "id": "AntennaCapability_1",
+ "geranFqBands": {
+ "attribute_1": "2",
+ "attribute_2": "3"
+ },
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ },
+ {
+ "id": "AntennaCapability_2",
+ "geranFqBands": {
+ "attribute_1": "23",
+ "attribute_2": "23"
+ }
+ }
+ ],
+ "CFC235E0404703D1E4454647DF8AAE2C193DB402": [
+ {
+ "id": "relation_1",
+ "aSide_AntennaModule": "AntennaModule_1",
+ "bSide_AntennaCapability": "AntennaCapability_1",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ },
+ {
+ "id": "relation_2",
+ "aSide_AntennaModule": "AntennaModule_2",
+ "bSide_AntennaCapability": "AntennaCapability_2",
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ }
+ ]
+}
"nCI": 2,
"nRPCI": null,
"nRTAC": null,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
"REL_FK_provided-by-oduFunction": "ODU_1",
- "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_7"
+ "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_7",
+ "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "NRCellDU_2",
"cellLocalId": 45891,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
"REL_FK_provided-by-oduFunction": "ODU_1",
- "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_8"
+ "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_8",
+ "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
},
{
"id": "NRCellDU_3",
"cellLocalId": 469,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
"REL_FK_provided-by-oduFunction": "ODU_1",
- "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_9"
+ "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_9",
+ "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
],
"o-ran-smo-teiv-ran_ODUFunction": [
},
"gNBDUId": 12,
"gNBId": 1234,
- "gNBIdLength": 4
+ "gNBIdLength": 4,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
}
]
}
--- /dev/null
+{
+ "o-ran-smo-teiv-ran_NRCellDU": [
+ {
+ "id": "NRCellDU_1",
+ "cellLocalId": 4589,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
+ "REL_FK_provided-by-oduFunction": "ODU_1",
+ "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_7",
+ "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ },
+ {
+ "id": "NRCellDU_2",
+ "cellLocalId": 45891,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
+ "REL_FK_provided-by-oduFunction": "ODU_1",
+ "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_8",
+ "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ },
+ {
+ "id": "NRCellDU_3",
+ "cellLocalId": 964,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ },
+ "REL_FK_provided-by-oduFunction": "ODU_1",
+ "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU": "relation_9",
+ "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ }
+ ],
+ "o-ran-smo-teiv-ran_ODUFunction": [
+ {
+ "id": "ODU_1",
+ "dUpLMNId": {
+ "mcc": "777",
+ "mnc": "888"
+ },
+ "gNBDUId": 44,
+ "gNBId": 4321,
+ "gNBIdLength": 9,
+ "metadata": {
+ "reliabilityIndicator": "OK",
+ "firstDiscovered": "<BEFORE TEST START TIME>",
+ "lastModified": "<AFTER TEST START TIME>"
+ }
+ }
+ ]
+}
"o-ran-smo-teiv-ran_NRCellDU": [
{
"id": "myReliabilityCell_1",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": 51,
"nCI": 61,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
},
{
"id": "myReliabilityCell_2",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": 51,
"nCI": 61,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
},
{
"id": "myReliabilityCell_3",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": 51,
"nCI": 61,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
},
{
"id": "myReliabilityCell_4",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": 51,
"nCI": 61,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
},
{
"id": "myReliabilityCell_5",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": 51,
"nCI": 61,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
},
{
"id": "myReliabilityCell_6",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": null,
"nCI": null,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
},
{
"id": "myReliabilityCell_7",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": 51,
"nCI": 61,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
},
{
"id": "myReliabilityCell_8",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": 51,
"nCI": 61,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
},
{
"id": "myReliabilityCell_9",
+ "metadata": {
+ "lastModified": "<AFTER TEST START TIME>",
+ "firstDiscovered": "<AFTER TEST START TIME>",
+ "reliabilityIndicator": "OK"
+ },
"cellLocalId": 51,
"nCI": 61,
"nRPCI": 701,
- "nRTAC": 401,
- "RI_nRTAC": "OK"
+ "nRTAC": 401
}
]
}
"type": "ran-logical-topology.create",
"time": "2023-10-25T13:30:01Z",
"datacontenttype": "application/json",
- "dataschema": "https://ties:8080/schemas/v1/r1-topology",
+ "dataschema": "https://teiv:8080/schemas/v1/r1-topology",
"data": {
"entities": [
{
"type": "ran-logical-topology.merge",
"time": "2023-10-25T13:30:01Z",
"datacontenttype": "application/json",
- "dataschema": "https://ties:8080/schemas/v1/r1-topology",
+ "dataschema": "https://teiv:8080/schemas/v1/r1-topology",
"data": {
"entities": [
{
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].classifiers[2]', byEquality())
}
}
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get all topology entities of type ODUFunction with classifiers in scopeFilter."
+ request {
+ method GET()
+ url "topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "attributes": {
+ "gNBId" : 19
+ }
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].attributes.gNBId', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get all topology entities of type ODUFunction with classifiers in scopeFilter."
+ request {
+ method GET()
+ url "topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural'] | /provided-nrCellDu/classifiers[@item='test-app-module:Indoor']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "attributes": {
+ "gNBId" : 19
+ }
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural'] | /provided-nrCellDu/classifiers[@item='test-app-module:Indoor']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural'] | /provided-nrCellDu/classifiers[@item='test-app-module:Indoor']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural'] | /provided-nrCellDu/classifiers[@item='test-app-module:Indoor']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural'] | /provided-nrCellDu/classifiers[@item='test-app-module:Indoor']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural'] | /provided-nrCellDu/classifiers[@item='test-app-module:Indoor']"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].attributes.gNBId', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get all topology entities of type ODUFunction with classifiers in scopeFilter."
+ request {
+ method GET()
+ url "topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural' and @item='test-app-module:Weekend']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "attributes": {
+ "gNBId" : 19
+ }
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural' and @item='test-app-module:Weekend']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural' and @item='test-app-module:Weekend']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural' and @item='test-app-module:Weekend']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural' and @item='test-app-module:Weekend']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(gNBId)&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural' and @item='test-app-module:Weekend']"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].attributes.gNBId', byEquality())
+ }
+ }
}
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
}
},
+ Contract.make {
+ description "SUCCESS - 200: Get classifiers using getEntitiesByDomain - EQUALS"
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?targetFilter=/classifiers&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/provided-nrCellDu/classifiers[@item='test-app-module:Rural']"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ }
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
"test-app-module:Weekend"
],
"entityIds": [
- "WRONG_ENTITY_ID",
+ "urn:WRONG_ENTITY_ID",
"urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A"
],
"operation": "merge"
body('''{
"status": "NOT_FOUND",
"message": "Resource Not Found",
- "details": "The requested resource with the following ids cannot be found. Entities: [WRONG_ENTITY_ID] Relationships: []"
+ "details": "The requested resource with the following ids cannot be found. Entities: [urn:WRONG_ENTITY_ID] Relationships: []"
}''')
bodyMatchers {
jsonPath('$.status', byEquality())
}
}
},
+ Contract.make {
+ description "ERROR - 400: Merge classifiers where entity id does not start with urn:"
+ request {
+ method POST()
+ url "/topology-inventory/v1alpha11/classifiers"
+ headers {
+ contentType("application/json")
+ accept('application/problem+json')
+ }
+ body('''{
+ "classifiers": [
+ "test-app-module:Rural",
+ "test-app-module:Weekend"
+ ],
+ "entityIds": [
+ "WRONG_ENTITY_ID",
+ "urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A"
+ ],
+ "operation": "merge"
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/problem+json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Topology ID format not supported",
+ "details": "Topology ID : WRONG_ENTITY_ID is not in supported format. Topology ID should start with urn:"
+ }''')
+ }
+ },
Contract.make {
description "NOT FOUND - 404: Merge classifiers with wrong relationship ids."
request {
],
"relationshipIds": [
"urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=44F4F4FC906E9A7525065E4565246F7469CBD11FC7752C61EA6D74776845900AFF472DCAACA1F66443490B6CE0DD9AC9A5E1467022118599F6B4C6EC63400512",
- "WRONG_RELATIONSHIP_ID"
+ "urn:WRONG_RELATIONSHIP_ID"
],
"operation": "merge"
}''')
body('''{
"status": "NOT_FOUND",
"message": "Resource Not Found",
- "details": "The requested resource with the following ids cannot be found. Entities: [] Relationships: [WRONG_RELATIONSHIP_ID]"
+ "details": "The requested resource with the following ids cannot be found. Entities: [] Relationships: [urn:WRONG_RELATIONSHIP_ID]"
}''')
bodyMatchers {
jsonPath('$.status', byEquality())
}
}
},
+ Contract.make {
+ description "NOT FOUND - 404: Merge classifiers with wrong relationship ids."
+ request {
+ method POST()
+ url "/topology-inventory/v1alpha11/classifiers"
+ headers {
+ contentType("application/json")
+ accept('application/problem+json')
+ }
+ body('''{
+ "classifiers": [
+ "test-app-module:Rural",
+ "test-app-module:Weekend"
+ ],
+ "relationshipIds": [
+ "urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=44F4F4FC906E9A7525065E4565246F7469CBD11FC7752C61EA6D74776845900AFF472DCAACA1F66443490B6CE0DD9AC9A5E1467022118599F6B4C6EC63400512",
+ "WRONG_RELATIONSHIP_ID"
+ ],
+ "operation": "merge"
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/problem+json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Topology ID format not supported",
+ "details": "Topology ID : WRONG_RELATIONSHIP_ID is not in supported format. Topology ID should start with urn:"
+ }''')
+ }
+ },
Contract.make {
description "SUCCESS - 204: Merge valid classifiers to entities and relationships (add)."
request {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
},
"attributeA1WithAttributeNameLengthLongerThanSixtyThreeCharacters": "someStringValue"
},
- "id": "LongEntityType1"
+ "id": "urn:LongEntityType1"
}
]
}
}
}
},
+ //10
Contract.make {
description "SUCCESS - 200: Get all topology entities of type NRCellDU with scopeFilter on association."
request {
}
},
Contract.make {
- description "SUCCESS - 200: Get all topology entities of type OCUCPFunction with scopeFilter on complex attribute STRING value - EQUALS - KEY AND VALUE EXISTS"
+ description 'SUCCESS - 200: Get all topology entities of type ODUFunction with scopeFilter on complex attribute STRING value - EQUALS - KEY AND VALUE EXISTS'
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
}
response {
status OK()
body('''{
"items": [
{
- "o-ran-smo-teiv-ran:OCUCPFunction": [
+ "o-ran-smo-teiv-ran:ODUFunction": [
{
- "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUCPFunction=10",
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10",
"attributes": {
- "pLMNId": {
+ "dUpLMNId": {
"mcc": "456",
"mnc": "83"
}
]
},
{
- "o-ran-smo-teiv-ran:OCUCPFunction": [
+ "o-ran-smo-teiv-ran:ODUFunction": [
{
- "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUCPFunction=16",
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16",
"attributes": {
- "pLMNId": {
+ "dUpLMNId": {
"mcc": "456",
"mnc": "86"
}
}
],
"self": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"first": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"prev": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"next": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"last": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"totalCount": 2
}''')
jsonPath('$.items', byType {
occurrence(2)
})
- jsonPath('$.items[0].o-ran-smo-teiv-ran:OCUCPFunction[0].id', byEquality())
- jsonPath('$.items[1].o-ran-smo-teiv-ran:OCUCPFunction[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
}
}
},
Contract.make {
- description "SUCCESS - 200: Get all topology entities of type OCUCPFunction with scopeFilter on complex attribute STRING value - EQUALS - KEY AND VALUE EXISTS"
+ description 'SUCCESS - 200: Get all topology entities of type ODUFunction with scopeFilter on complex attribute STRING value - EQUALS - KEY AND VALUE EXISTS'
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
}
response {
status OK()
body('''{
"items": [
{
- "o-ran-smo-teiv-ran:OCUCPFunction": [
+ "o-ran-smo-teiv-ran:ODUFunction": [
{
- "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUCPFunction=10",
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10",
"attributes": {
- "pLMNId": {
+ "dUpLMNId": {
"mcc": "456",
"mnc": "83"
}
]
},
{
- "o-ran-smo-teiv-ran:OCUCPFunction": [
+ "o-ran-smo-teiv-ran:ODUFunction": [
{
- "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUCPFunction=16",
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16",
"attributes": {
- "pLMNId": {
+ "dUpLMNId": {
"mcc": "456",
"mnc": "86"
}
}
],
"self": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"first": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"prev": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"next": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"last": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[@mcc='456']"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[@mcc='456']"
},
"totalCount": 2
}''')
jsonPath('$.items', byType {
occurrence(2)
})
- jsonPath('$.items[0].o-ran-smo-teiv-ran:OCUCPFunction[0].id', byEquality())
- jsonPath('$.items[1].o-ran-smo-teiv-ran:OCUCPFunction[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
}
}
},
Contract.make {
- description "SUCCESS - 200: Get all topology entities of type OCUCPFunction with scopeFilter on complex attribute STRING value - CONTAINS - KEY AND VALUE EXISTS"
+ description 'SUCCESS - 200: Get all topology entities of type ODUFunction with scopeFilter on complex attribute STRING value - CONTAINS - KEY AND VALUE EXISTS'
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[contains(@mcc,'78')]"
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[contains(@mcc,'78')]"
}
response {
status OK()
body('''{
"items": [
{
- "o-ran-smo-teiv-ran:OCUCPFunction": [
+ "o-ran-smo-teiv-ran:ODUFunction": [
{
- "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUCPFunction=13",
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13",
"attributes": {
- "pLMNId": {
+ "dUpLMNId": {
"mcc": "789",
"mnc": "84"
}
]
},
{
- "o-ran-smo-teiv-ran:OCUCPFunction": [
+ "o-ran-smo-teiv-ran:ODUFunction": [
{
- "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUCPFunction=19",
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
"attributes": {
- "pLMNId": {
+ "dUpLMNId": {
"mcc": "789",
"mnc": "87"
}
}
],
"self": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[contains(@mcc,'78')]"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[contains(@mcc,'78')]"
},
"first": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[contains(@mcc,'78')]"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[contains(@mcc,'78')]"
},
"prev": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[contains(@mcc,'78')]"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[contains(@mcc,'78')]"
},
"next": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[contains(@mcc,'78')]"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[contains(@mcc,'78')]"
},
"last": {
- "href": "/domains/RAN/entity-types/OCUCPFunction/entities?offset=0&limit=500&targetFilter=/attributes(pLMNId)&scopeFilter=/attributes/pLMNId[contains(@mcc,'78')]"
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/attributes(dUpLMNId)&scopeFilter=/attributes/dUpLMNId[contains(@mcc,'78')]"
},
"totalCount": 2
}''')
jsonPath('$.items', byType {
occurrence(2)
})
- jsonPath('$.items[0].o-ran-smo-teiv-ran:OCUCPFunction[0].id', byEquality())
- jsonPath('$.items[1].o-ran-smo-teiv-ran:OCUCPFunction[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
}
}
},
}
}
},
+ //20
Contract.make {
description "SUCCESS - 200: Get all topology entities of type AntennaCapability with scopeFilter on complex attribute STRING array - PARTIAL MATCH - VALUE NOT EXISTS"
request {
}''')
}
},
+ //30
Contract.make {
description "ERROR - 400: Get all topology entities with invalid scopeFilter (attribute not prefixed with @)"
request {
}
}
},
+ //40
Contract.make {
description 'SUCCESS - 200: Get entities of type AntennaModule inside the specified Polygon'
request {
description "SUCCESS - 200: Get entities of type NRCellDU by Sector id"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
}
response {
status OK()
}
],
"self": {
- "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"first": {
- "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"prev": {
- "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"next": {
- "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"last": {
- "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"totalCount": 3
}''')
}
},
Contract.make {
- description "SUCCESS - 200: Get topology entities of type EntityTypeA where used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters id is 'LongEntityType1'. One to One"
+ description "SUCCESS - 200: Get topology entities of type EntityTypeA where used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters id is 'urn:LongEntityType1'. One to One"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
}
response {
status OK()
{
"test-built-in-module:EntityTypeA": [
{
- "id": "EntityType1"
+ "id": "urn:EntityType1"
}
]
}
],
"self": {
- "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"first": {
- "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"prev": {
- "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"next": {
- "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"last": {
- "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeA/entities?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"totalCount": 1
}''')
description "SUCCESS - 200: Get topology entities of type EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters where used-by-entityTypeA id is 'EntityType1'. One to One"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='EntityType1']"
+ url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='urn:EntityType1']"
}
response {
status OK()
{
"test-built-in-module:EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters": [
{
- "id": "LongEntityType1"
+ "id": "urn:LongEntityType1"
}
]
}
],
"self": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='EntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='urn:EntityType1']"
},
"first": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='EntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='urn:EntityType1']"
},
"prev": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='EntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='urn:EntityType1']"
},
"next": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='EntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='urn:EntityType1']"
},
"last": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='EntityType1']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities?offset=0&limit=100&scopeFilter=/used-by-entityTypeA[@id='urn:EntityType1']"
},
"totalCount": 1
}''')
}
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities using lastModified in metadata - LESS THAN'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@lastModified<'2025-01-11T23:40:36.461565Z']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-09T11:40:36.461565Z",
+ "firstDiscovered": "2025-01-09T11:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-11T09:40:36.461565Z",
+ "firstDiscovered": "2025-01-11T09:40:36.461565Z",
+ "reliabilityIndicator": "ADVISED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,ODUFunction=14"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-09T10:40:36.461565Z",
+ "firstDiscovered": "2025-01-09T10:40:36.461565Z",
+ "reliabilityIndicator": "OK"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<'2025-01-11T23:40:36.461565Z']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<'2025-01-11T23:40:36.461565Z']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<'2025-01-11T23:40:36.461565Z']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<'2025-01-11T23:40:36.461565Z']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<'2025-01-11T23:40:36.461565Z']"
+ },
+ "totalCount": 3
+}''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities using lastModified in metadata - GREATER THAN'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2025-01-11T09:40:36.461565Z']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-11T23:40:36.461565Z",
+ "firstDiscovered": "2025-01-11T23:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-12T21:40:36.461565Z",
+ "firstDiscovered": "2025-01-12T21:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2025-01-11T09:40:36.461565Z']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2025-01-11T09:40:36.461565Z']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2025-01-11T09:40:36.461565Z']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2025-01-11T09:40:36.461565Z']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2025-01-11T09:40:36.461565Z']"
+ },
+ "totalCount": 2
+}''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities using lastModified in metadata - GREATER THAN AND LESS THAN'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-09T11:40:36.461565Z",
+ "firstDiscovered": "2025-01-09T11:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-11T23:40:36.461565Z",
+ "firstDiscovered": "2025-01-11T23:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-11T09:40:36.461565Z",
+ "firstDiscovered": "2025-01-11T09:40:36.461565Z",
+ "reliabilityIndicator": "ADVISED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,ODUFunction=14"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-12T21:40:36.461565Z",
+ "firstDiscovered": "2025-01-12T21:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-09T10:40:36.461565Z",
+ "firstDiscovered": "2025-01-09T10:40:36.461565Z",
+ "reliabilityIndicator": "OK"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "totalCount": 5
+}''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(5)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities using lastModified in metadata - LESS THAN OR EQUALS WITH DIFFERENT TIMEZONE'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@lastModified<='2025-01-09T11:40:36.46156500+01:00']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+{
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-09T10:40:36.461565Z",
+ "firstDiscovered": "2025-01-09T10:40:36.461565Z",
+ "reliabilityIndicator": "OK"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<='2025-01-09T11:40:36.46156500+01:00']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<='2025-01-09T11:40:36.46156500+01:00']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<='2025-01-09T11:40:36.46156500+01:00']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<='2025-01-09T11:40:36.46156500+01:00']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified<='2025-01-09T11:40:36.46156500+01:00']"
+ },
+ "totalCount": 1
+}''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities using lastModified in metadata - GREATER THAN OR EQUALS'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@lastModified>='2025-01-11T23:40:36.461565Z']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-11T23:40:36.461565Z",
+ "firstDiscovered": "2025-01-11T23:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-12T21:40:36.461565Z",
+ "firstDiscovered": "2025-01-12T21:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>='2025-01-11T23:40:36.461565Z']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>='2025-01-11T23:40:36.461565Z']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>='2025-01-11T23:40:36.461565Z']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>='2025-01-11T23:40:36.461565Z']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified>='2025-01-11T23:40:36.461565Z']"
+ },
+ "totalCount": 2
+}''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ },
+ //50
+ Contract.make {
+ description 'SUCCESS - 200: Get entities using lastModified in metadata - EQUALS'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@lastModified='2025-01-09T11:40:36.461565Z']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-09T11:40:36.461565Z",
+ "firstDiscovered": "2025-01-09T11:40:36.461565Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified='2025-01-09T11:40:36.461565Z']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified='2025-01-09T11:40:36.461565Z']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified='2025-01-09T11:40:36.461565Z']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified='2025-01-09T11:40:36.461565Z']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@lastModified='2025-01-09T11:40:36.461565Z']"
+ },
+ "totalCount": 1
+}''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities using lastModified in metadata - GREATER THAN AND LESS THAN WITH RELIABILITY INDICATOR'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@reliabilityIndicator='OK' and @lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-09T10:40:36.461565Z",
+ "firstDiscovered": "2025-01-09T10:40:36.461565Z",
+ "reliabilityIndicator": "OK"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@reliabilityIndicator='OK' and @lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@reliabilityIndicator='OK' and @lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@reliabilityIndicator='OK' and @lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@reliabilityIndicator='OK' and @lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@reliabilityIndicator='OK' and @lastModified>'2024-01-21T11:12:48.628172460Z' and @lastModified<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "totalCount": 1
+}''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities using lastModified in metadata - GREATER THAN OR EQUALS AND LESS THAN OR EQUALS WITH DIFFERENT TIMEZONE'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-09T10:40:36.461565Z",
+ "firstDiscovered": "2025-01-09T10:40:36.461565Z",
+ "reliabilityIndicator": "OK"
+ },
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/ODUFunction/entities?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>='2025-01-06T12:34:56.789+05:30' and @firstDiscovered<='2025-01-09T16:10:36.461565+05:30']"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Get entities using lastModified in metadata - invalid timeformat'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@lastModified<'2025-23-23T27:12:48.62817246Z']"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid query condition",
+ "details": "Invalid timestamp: 2025-23-23T27:12:48.62817246Z"
+ }''')
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Get entities using lastModified in metadata - invalid date format'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/ODUFunction/entities?targetFilter=/metadata&scopeFilter=/metadata[@lastModified<'202510-11T20:12:48.62817246Z']"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid query condition",
+ "details": "Invalid timestamp: 202510-11T20:12:48.62817246Z"
+ }''')
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get all topology entities of type NRCellDU with scopeFilter - LESS THAN ignored.'
+ request {
+ method GET()
+ url '/topology-inventory/v1alpha11/domains/REL_EQUIPMENT_RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/NRCellDU/attributes[@cellLocalId<2]'
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=91"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=92"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=93"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/REL_EQUIPMENT_RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/NRCellDU/attributes[@cellLocalId<2]"
+ },
+ "first": {
+ "href": "/domains/REL_EQUIPMENT_RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/NRCellDU/attributes[@cellLocalId<2]"
+ },
+ "prev": {
+ "href": "/domains/REL_EQUIPMENT_RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/NRCellDU/attributes[@cellLocalId<2]"
+ },
+ "next": {
+ "href": "/domains/REL_EQUIPMENT_RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/NRCellDU/attributes[@cellLocalId<2]"
+ },
+ "last": {
+ "href": "/domains/REL_EQUIPMENT_RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/NRCellDU/attributes[@cellLocalId<2]"
+ },
+ "totalCount": 6
+}''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(6)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of type AntennaCapability inside the specified Polygon of AntennaModule'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:AntennaCapability": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:AntennaCapability[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get entities of type AntennaCapability by AntennaModule id"
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:AntennaCapability": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/AntennaCapability/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:AntennaCapability[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of type NRCellDU 500 meters radius of AntennaModule'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of type NRCellDU 500 meters radius of AntennaModule'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/NRCellDU/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/NRCellDU/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/NRCellDU/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/NRCellDU/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/NRCellDU/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/NRCellDU/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of type NRCellDU where AntennaModule antennaModelNumber is 5 or 501205'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5'] | /serving-antennaModule/attributes[@antennaModelNumber='501205']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5'] | /serving-antennaModule/attributes[@antennaModelNumber='501205']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5'] | /serving-antennaModule/attributes[@antennaModelNumber='501205']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5'] | /serving-antennaModule/attributes[@antennaModelNumber='501205']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5'] | /serving-antennaModule/attributes[@antennaModelNumber='501205']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5'] | /serving-antennaModule/attributes[@antennaModelNumber='501205']"
+ },
+ "totalCount": 2
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of type NRCellDU where AntennaModule antennaModelNumber is 5 and electricalAntennaTilt is 11'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5']; /serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5']; /serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5']; /serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5']; /serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5']; /serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@antennaModelNumber='5']; /serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "totalCount": 2
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get all topology entities of type AntennaModule with scopeFilter on sourceIds'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1']"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get all topology entities of type AntennaModule with scopeFilter on sourceIds'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/metadata[@reliabilityIndicator='OK']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/metadata[@reliabilityIndicator='OK']"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/metadata[@reliabilityIndicator='OK']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/metadata[@reliabilityIndicator='OK']"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/metadata[@reliabilityIndicator='OK']"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/metadata[@reliabilityIndicator='OK']"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of type NRCellDU where Sector sectorId is 2'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "totalCount": 3
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Missing container type for queried leaf antennaModelNumber'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@antennaModelNumber='5']"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Grammar error",
+ "details": "Missing container type for queried leaf antennaModelNumber"
+ }''')
+ bodyMatchers {
+ jsonPath('$.status', byEquality())
+ jsonPath('$.message', byEquality())
+ jsonPath('$.details', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Wrong sysntax for association id is not an attribute'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@id='5']"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid parameters for association",
+ "details": "Invalid parameters provided for association serving-antennaModule"
+ }''')
+ bodyMatchers {
+ jsonPath('$.status', byEquality())
+ jsonPath('$.message', byEquality())
+ jsonPath('$.details', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get all topology entities of type AntennaModule with scopeFilter association on AntennaCapability complex attribute STRING array - EXACT MATCH - VALUE EXISTS'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[@item='456']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-equipment:AntennaModule": [
+ {
+ "id": "urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-equipment:AntennaModule": [
+ {
+ "id": "urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[@item='456']"
+ },
+ "first": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[@item='456']"
+ },
+ "prev": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[@item='456']"
+ },
+ "next": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[@item='456']"
+ },
+ "last": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[@item='456']"
+ },
+ "totalCount": 2
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-equipment:AntennaModule[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-equipment:AntennaModule[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get all topology entities of type AntennaModule with scopeFilter association on AntennaCapability complex attribute STRING array - EXACT MATCH - VALUE EXISTS'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[contains(@item,'45')]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-equipment:AntennaModule": [
+ {
+ "id": "urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-equipment:AntennaModule": [
+ {
+ "id": "urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[contains(@item,'45')]"
+ },
+ "first": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[contains(@item,'45')]"
+ },
+ "prev": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[contains(@item,'45')]"
+ },
+ "next": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[contains(@item,'45')]"
+ },
+ "last": {
+ "href": "/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/serviced-antennaCapability/attributes/eUtranFqBands[contains(@item,'45')]"
+ },
+ "totalCount": 2
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-equipment:AntennaModule[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-equipment:AntennaModule[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Root object doesnt match with entity name'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/EQUIPMENT/entity-types/AntennaModule/entities?offset=0&limit=500&scopeFilter=/NRCellDU/serviced-antennaCapability/attributes/eUtranFqBands[contains(@item,'45')]"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Grammar error",
+ "details": "Target/Scope filter can only contain Root Object types mentioned in the path parameter"
+ }''')
+ bodyMatchers {
+ jsonPath('$.status', byEquality())
+ jsonPath('$.message', byEquality())
+ jsonPath('$.details', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Invalid format for association.'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/provided-by-oduFunction/attributes/sourceIds[@item='789']"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Grammar error",
+ "details": "More than one valid containerType appeared in path: attributes, sourceIds"
+ }''')
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Invalid format for association.'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/provided-by-oduFunction/attributes/decorators[@test-app-module:textdata='Ericsson']"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Grammar error",
+ "details": "More than one valid containerType appeared in path: attributes, decorators"
+ }''')
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get all topology entities of type AntennaModule with scopeFilter association on AntennaCapability complex attribute STRING array - EXACT MATCH - VALUE EXISTS'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/OAM/entity-types/ManagedElement/entities?offset=0&limit=500&scopeFilter=/managed-ocucpFunction/attributes/pLMNId[@mcc='01']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-oam:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-oam:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-oam:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-oam:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-oam:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-oam:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-oam:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/OAM/entity-types/ManagedElement/entities?offset=0&limit=500&scopeFilter=/managed-ocucpFunction/attributes/pLMNId[@mcc='01']"
+ },
+ "first": {
+ "href": "/domains/OAM/entity-types/ManagedElement/entities?offset=0&limit=500&scopeFilter=/managed-ocucpFunction/attributes/pLMNId[@mcc='01']"
+ },
+ "prev": {
+ "href": "/domains/OAM/entity-types/ManagedElement/entities?offset=0&limit=500&scopeFilter=/managed-ocucpFunction/attributes/pLMNId[@mcc='01']"
+ },
+ "next": {
+ "href": "/domains/OAM/entity-types/ManagedElement/entities?offset=0&limit=500&scopeFilter=/managed-ocucpFunction/attributes/pLMNId[@mcc='01']"
+ },
+ "last": {
+ "href": "/domains/OAM/entity-types/ManagedElement/entities?offset=0&limit=500&scopeFilter=/managed-ocucpFunction/attributes/pLMNId[@mcc='01']"
+ },
+ "totalCount": 7
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(7)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-oam:ManagedElement[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-oam:ManagedElement[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-oam:ManagedElement[0].id', byEquality())
+ jsonPath('$.items[3].o-ran-smo-teiv-oam:ManagedElement[0].id', byEquality())
+ jsonPath('$.items[4].o-ran-smo-teiv-oam:ManagedElement[0].id', byEquality())
+ jsonPath('$.items[5].o-ran-smo-teiv-oam:ManagedElement[0].id', byEquality())
+ jsonPath('$.items[6].o-ran-smo-teiv-oam:ManagedElement[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Invalid format for association.'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/managed-by-managedElement/attributes/NRCellDU/ManagedElement/attributes"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Grammar error",
+ "details": "Invalid data in scopeFilter"
+ }''')
+ }
+ },
+ Contract.make {
+ description 'ERROR - 400: Invalid format for association.'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/grouped-by-sector/attributes@sectorId=1"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Grammar error",
+ "details": "Invalid data in scopeFilter"
+ }''')
+ }
}
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
},
Contract.make {
- description "ERROR - 400: Get topology for ODUFunction entity with non existing id 'non-existing-id'."
+ description "ERROR - 400: Get topology for ODUFunction entity with non existing id 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=99999'."
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/REL_EQUIPMENT_RAN/entity-types/ODUFunction/entities/non-existing-id"
+ url "/topology-inventory/v1alpha11/domains/REL_EQUIPMENT_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=99999"
}
response {
status NOT_FOUND()
body('''{
"status": "NOT_FOUND",
"message": "Resource Not Found",
- "details": "The requested resource is not found. ID: non-existing-id"
+ "details": "The requested resource is not found. ID: urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=99999"
+ }''')
+ }
+ },
+ Contract.make {
+ description "ERROR - 400: Get topology for ODUFunction entity with with no supported topology id - 3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 ."
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/REL_EQUIPMENT_RAN/entity-types/ODUFunction/entities/3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9"
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Topology ID format not supported",
+ "details": "Topology ID : 3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 is not in supported format. Topology ID should start with urn:"
}''')
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
"o-ran-smo-teiv-ran:SECTOR_GROUPS_NRCELLDU": [
{
"bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1",
- "aSide": "Sector=2",
+ "aSide": "urn:Sector=2",
"id": "urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=4BBE73F685A98EF799968ACFE76F376D795F4CC3B56A6B867642048CDF4C1B8E323430EA7C6C38E4031FB891158763CC5459A8704E1A9FBFBD53CE8AD23BF463"
}
]
"o-ran-smo-teiv-ran:SECTOR_GROUPS_NRCELLDU": [
{
"bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1",
- "aSide": "Sector=2",
+ "aSide": "urn:Sector=2",
"id": "urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=4BBE73F685A98EF799968ACFE76F376D795F4CC3B56A6B867642048CDF4C1B8E323430EA7C6C38E4031FB891158763CC5459A8704E1A9FBFBD53CE8AD23BF463"
}
]
}
},
Contract.make {
- description "SUCCESS - 200: Get all relationships for long entity type name with id as LongEntityType1 (OneToOne, ManyToOne, ManyToMany and Same Entity with aSide of relationship)"
+ description "SUCCESS - 200: Get all relationships for long entity type name with id as urn:LongEntityType1 (OneToOne, ManyToOne, ManyToMany and Same Entity with aSide of relationship)"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships"
+ url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships"
}
response {
status OK()
{
"test-built-in-module:ENTITYTYPEA_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType1",
- "aSide": "EntityType1",
- "id": "RelId_OneToOne_EntityType1_LongEntityType1"
+ "bSide": "urn:LongEntityType1",
+ "aSide": "urn:EntityType1",
+ "id": "urn:RelId_OneToOne_EntityType1_LongEntityType1"
}
]
},
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType2",
- "aSide": "LongEntityType1",
- "id": "Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
+ "bSide": "urn:LongEntityType2",
+ "aSide": "urn:LongEntityType1",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
}
]
},
{
"test-built-in-module:ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType1",
- "aSide": "EntityType2",
- "id": "Rel_ManyToOne_EntityType2_LongEntityType1"
+ "bSide": "urn:LongEntityType1",
+ "aSide": "urn:EntityType2",
+ "id": "urn:Rel_ManyToOne_EntityType2_LongEntityType1"
}
]
},
{
"test-built-in-module:ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType1",
- "aSide": "EntityType1",
- "id": "Rel_ManyToMany_EntityType1_LongEntityType1"
+ "bSide": "urn:LongEntityType1",
+ "aSide": "urn:EntityType1",
+ "id": "urn:Rel_ManyToMany_EntityType1_LongEntityType1"
}
]
}
],
"self": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500"
},
"first": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500"
},
"prev": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500"
},
"next": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500"
},
"last": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500"
},
"totalCount": 4
}''')
}
},
Contract.make {
- description "SUCCESS - 200: Get all relationships for long entity type name with id as LongEntityType2 (OneToMany and Same Entity with bSide of relationship)"
+ description "SUCCESS - 200: Get all relationships for long entity type name with id as urn:LongEntityType2 (OneToMany and Same Entity with bSide of relationship)"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships"
+ url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships"
}
response {
status OK()
{
"test-built-in-module:ENTITYTYPEA_PROVIDES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType2",
- "aSide": "EntityType2",
- "id": "Rel_OneToMany_EntityType2_LongEntityType2"
+ "bSide": "urn:LongEntityType2",
+ "aSide": "urn:EntityType2",
+ "id": "urn:Rel_OneToMany_EntityType2_LongEntityType2"
}
]
},
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType2",
- "aSide": "LongEntityType1",
- "id": "Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
+ "bSide": "urn:LongEntityType2",
+ "aSide": "urn:LongEntityType1",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
}
]
},
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType3",
- "aSide": "LongEntityType2",
- "id": "Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3"
+ "bSide": "urn:LongEntityType3",
+ "aSide": "urn:LongEntityType2",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3"
}
]
}
],
"self": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500"
},
"first": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500"
},
"prev": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500"
},
"next": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500"
},
"last": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500"
},
"totalCount": 3
}''')
}
},
Contract.make {
- description "SUCCESS - 200: Get all relationships for long entity type name with id as LongEntityType1 and with scope filter on sourceIds"
+ description "SUCCESS - 200: Get all relationships for long entity type name with id as urn:LongEntityType1 and with scope filter on sourceIds"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']&targetFilter=/sourceIds"
+ url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']&targetFilter=/sourceIds"
}
response {
status OK()
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType2",
- "aSide": "LongEntityType1",
- "id": "Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
+ "bSide": "urn:LongEntityType2",
+ "aSide": "urn:LongEntityType1",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
}
]
}
],
"self": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
},
"first": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
},
"prev": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
},
"next": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
},
"last": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType1/relationships?offset=0&limit=500&targetFilter=/sourceIds&scopeFilter=/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616']"
},
"totalCount": 1
}''')
}
},
Contract.make {
- description "SUCCESS - 200: Get all relationships for long entity type name with id as LongEntityType3 and with scope filter on classifiers"
+ description "SUCCESS - 200: Get all relationships for long entity type name with id as urn:LongEntityType3 and with scope filter on classifiers"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType3/relationships?scopeFilter=/classifiers[@item='test-app-module:Weekend']&targetFilter=/classifiers"
+ url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType3/relationships?scopeFilter=/classifiers[@item='test-app-module:Weekend']&targetFilter=/classifiers"
}
response {
status OK()
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType3",
- "aSide": "LongEntityType2",
- "id": "Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3"
+ "bSide": "urn:LongEntityType3",
+ "aSide": "urn:LongEntityType2",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3"
}
]
}
],
"self": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
},
"first": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
},
"prev": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
},
"next": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
},
"last": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType3/relationships?offset=0&limit=500&targetFilter=/classifiers&scopeFilter=/classifiers[@item='test-app-module:Weekend']"
},
"totalCount": 1
}''')
}
},
Contract.make {
- description "SUCCESS - 200: Get all relationships for long entity type name with id as LongEntityType2 and with scope filter on decorators"
+ description "SUCCESS - 200: Get all relationships for long entity type name with id as urn:LongEntityType2 and with scope filter on decorators"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]&targetFilter=/decorators"
+ url "/topology-inventory/v1alpha11/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]&targetFilter=/decorators"
}
response {
status OK()
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType2",
- "aSide": "LongEntityType1",
- "id": "Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
+ "bSide": "urn:LongEntityType2",
+ "aSide": "urn:LongEntityType1",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
}
]
},
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType3",
- "aSide": "LongEntityType2",
- "id": "Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3"
+ "bSide": "urn:LongEntityType3",
+ "aSide": "urn:LongEntityType2",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3"
}
]
}
],
"self": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
},
"first": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
},
"prev": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
},
"next": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
},
"last": {
- "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ "href": "/domains/TEST/entity-types/EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters/entities/urn:LongEntityType2/relationships?offset=0&limit=500&targetFilter=/decorators&scopeFilter=/decorators[contains(@test-app-module:textdata, 'ORAN')]"
},
"totalCount": 2
}''')
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE":[
{
"bSide":"urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A",
- "aSide":"Sector=2",
+ "aSide":"urn:Sector=2",
"id":"urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=44F4F4FC906E9A7525065E4565246F7469CBD11FC7752C61EA6D74776845900AFF472DCAACA1F66443490B6CE0DD9AC9A5E1467022118599F6B4C6EC63400512"
}
]
description "ERROR - 404: Get all relationships for non existing NRCellDU id."
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities/non-existent/relationships"
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities/urn:non-existent/relationships"
}
response {
status NOT_FOUND()
body('''{
"status": "NOT_FOUND",
"message": "Resource Not Found",
- "details": "The requested resource is not found. ID: non-existent"
+ "details": "The requested resource is not found. ID: urn:non-existent"
}''')
}
},
jsonPath('$.items[0].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].bSide', byEquality())
}
}
+ },
+ Contract.make {
+ description "SUCCESS - 200 Get all relationships with entityId for ODUFunction using firstDiscovered in metadata as filter - LESS THAN"
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered<'2025-01-21T11:12:48.628172460Z']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''
+{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-08T10:40:36.46156500Z",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=93",
+ "aSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "id": "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=7723E5D5B3332E0890EAA620C77A6A47065E15A2EA28AD83F3B3CFEA5A7E3BB5965AE78890F1BF000EAA89BF8DE209E506192BF5EA6871426603ED76CBFAF088"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-08T10:40:36.46156500Z",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "ADVISED"
+ },
+ "bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=92",
+ "aSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "id": "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=DDECCEFB8831FA4EB21B121BA35EAB07ED8D841B5A38580C5F3AD11E66FE73D2FC42E823C6C73288860C7562B610C3D07B6C39FD386171A3BE622096F4B3D006"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-13T16:40:36.461565Z",
+ "firstDiscovered": "2025-01-13T16:40:36.461565Z",
+ "reliabilityIndicator": "OK"
+ },
+ "bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "aSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19",
+ "id": "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=6BD25E5C8FB7842F69010736253CC47F43535D7238E9E9A03E8092E8C019C83270DE47C96EF1049C40B83A130F9F129AE93B9C8538B6B004AE89BD0A098E48DD"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "first": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "prev": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "next": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "last": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered<'2025-01-21T11:12:48.628172460Z']"
+ },
+ "totalCount": 3
+}
+ ''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].aSide', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].bSide', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].aSide', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].bSide', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].aSide', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].bSide', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description "SUCCESS - 200 Get all relationships with entityId for ODUFunction using firstDiscovered in metadata as filter - GREATER THAN"
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2024-01-21T11:12:48.628172460+01:00']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''
+{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-08T10:40:36.46156500Z",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "RESTORED"
+ },
+ "bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=93",
+ "aSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "id": "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=7723E5D5B3332E0890EAA620C77A6A47065E15A2EA28AD83F3B3CFEA5A7E3BB5965AE78890F1BF000EAA89BF8DE209E506192BF5EA6871426603ED76CBFAF088"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-08T10:40:36.46156500Z",
+ "firstDiscovered": "2025-01-08T10:40:36.46156500Z",
+ "reliabilityIndicator": "ADVISED"
+ },
+ "bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=92",
+ "aSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "id": "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=DDECCEFB8831FA4EB21B121BA35EAB07ED8D841B5A38580C5F3AD11E66FE73D2FC42E823C6C73288860C7562B610C3D07B6C39FD386171A3BE622096F4B3D006"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION": [
+ {
+ "metadata": {
+ "lastModified": "2025-01-13T16:40:36.461565Z",
+ "firstDiscovered": "2025-01-13T16:40:36.461565Z",
+ "reliabilityIndicator": "OK"
+ },
+ "bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "aSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19",
+ "id": "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=6BD25E5C8FB7842F69010736253CC47F43535D7238E9E9A03E8092E8C019C83270DE47C96EF1049C40B83A130F9F129AE93B9C8538B6B004AE89BD0A098E48DD"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2024-01-21T11:12:48.628172460+01:00']"
+ },
+ "first": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2024-01-21T11:12:48.628172460+01:00']"
+ },
+ "prev": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2024-01-21T11:12:48.628172460+01:00']"
+ },
+ "next": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2024-01-21T11:12:48.628172460+01:00']"
+ },
+ "last": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2024-01-21T11:12:48.628172460+01:00']"
+ },
+ "totalCount": 3
+}
+ ''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].aSide', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].bSide', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].aSide', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU[0].bSide', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.reliabilityIndicator', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].aSide', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].bSide', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description "SUCCESS - 200 Get all relationships with entityId for ODUFunction using firstDiscovered in metadata as filter - LESS THAN AND GREATER THAN"
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2025-01-21T11:12:48.628172460Z' and @firstDiscovered<'2025-01-31T11:12:48.628172460Z']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''
+{
+ "items": [],
+ "self": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2025-01-21T11:12:48.628172460Z' and @firstDiscovered<'2025-01-31T11:12:48.628172460Z']"
+ },
+ "first": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2025-01-21T11:12:48.628172460Z' and @firstDiscovered<'2025-01-31T11:12:48.628172460Z']"
+ },
+ "prev": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2025-01-21T11:12:48.628172460Z' and @firstDiscovered<'2025-01-31T11:12:48.628172460Z']"
+ },
+ "next": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2025-01-21T11:12:48.628172460Z' and @firstDiscovered<'2025-01-31T11:12:48.628172460Z']"
+ },
+ "last": {
+ "href": "/domains/REL_OAM_RAN/entity-types/ODUFunction/entities/urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19/relationships?offset=0&limit=500&targetFilter=/metadata&scopeFilter=/metadata[@firstDiscovered>'2025-01-21T11:12:48.628172460Z' and @firstDiscovered<'2025-01-31T11:12:48.628172460Z']"
+ },
+ "totalCount": 0
+}
+ ''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(0)
+ })
+ }
+ }
}
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
},
Contract.make {
- description "SUCCESS - 200: Get topology relationships of type ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS where used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters id is 'Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2'."
+ description "SUCCESS - 200: Get topology relationships of type ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS where used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters id is 'urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2'."
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ url "/topology-inventory/v1alpha11/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
}
response {
status OK()
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType2",
- "aSide": "LongEntityType1",
- "id": "Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
+ "bSide": "urn:LongEntityType2",
+ "aSide": "urn:LongEntityType1",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
}
]
}
],
"self": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"first": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"prev": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"next": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"last": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType1']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType1']"
},
"totalCount": 1
}''')
}
},
Contract.make {
- description "SUCCESS - 200: Get topology relationships of type ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS where used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters id is 'Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2'."
+ description "SUCCESS - 200: Get topology relationships of type ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS where used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters id is 'urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2'."
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType2']"
+ url "/topology-inventory/v1alpha11/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType2']"
}
response {
status OK()
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType2",
- "aSide": "LongEntityType1",
- "id": "Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
+ "bSide": "urn:LongEntityType2",
+ "aSide": "urn:LongEntityType1",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
}
]
}
],
"self": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType2']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType2']"
},
"first": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType2']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType2']"
},
"prev": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType2']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType2']"
},
"next": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType2']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType2']"
},
"last": {
- "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='LongEntityType2']"
+ "href": "/domains/TEST/relationship-types/ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS/relationships?offset=0&limit=100&scopeFilter=/used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters[@id='urn:LongEntityType2']"
},
"totalCount": 1
}''')
"o-ran-smo-teiv-ran:SECTOR_GROUPS_NRCELLDU": [
{
"bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1",
- "aSide": "Sector=2",
+ "aSide": "urn:Sector=2",
"id": "urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=4BBE73F685A98EF799968ACFE76F376D795F4CC3B56A6B867642048CDF4C1B8E323430EA7C6C38E4031FB891158763CC5459A8704E1A9FBFBD53CE8AD23BF463"
}
]
"o-ran-smo-teiv-ran:SECTOR_GROUPS_NRCELLDU": [
{
"bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1",
- "aSide": "Sector=2",
+ "aSide": "urn:Sector=2",
"id": "urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=4BBE73F685A98EF799968ACFE76F376D795F4CC3B56A6B867642048CDF4C1B8E323430EA7C6C38E4031FB891158763CC5459A8704E1A9FBFBD53CE8AD23BF463"
}
]
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType2",
- "aSide": "LongEntityType1",
- "id": "Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
+ "bSide": "urn:LongEntityType2",
+ "aSide": "urn:LongEntityType1",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2"
}
]
},
{
"test-built-in-module:ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS": [
{
- "bSide": "LongEntityType3",
- "aSide": "LongEntityType2",
- "id": "Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3"
+ "bSide": "urn:LongEntityType3",
+ "aSide": "urn:LongEntityType2",
+ "id": "urn:Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3"
}
]
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
"o-ran-smo-teiv-rel-equipment-ran:SECTOR_GROUPS_ANTENNAMODULE": [
{
"bSide": "urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A",
- "aSide": "Sector=2",
+ "aSide": "urn:Sector=2",
"id": "urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=44F4F4FC906E9A7525065E4565246F7469CBD11FC7752C61EA6D74776845900AFF472DCAACA1F66443490B6CE0DD9AC9A5E1467022118599F6B4C6EC63400512",
"sourceIds": []
}
}
},
Contract.make {
- description "ERROR - 400: Get relationship with non existing id 'non-existing-id'"
+ description "ERROR - 400: Get relationship with non existing id 'urn:non-existing-id'"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/REL_OAM_RAN/relationship-types/MANAGEDELEMENT_MANAGES_ODUFUNCTION/relationships/non-existing-id"
+ url "/topology-inventory/v1alpha11/domains/REL_OAM_RAN/relationship-types/MANAGEDELEMENT_MANAGES_ODUFUNCTION/relationships/urn:non-existing-id"
}
response {
status NOT_FOUND()
body('''{
"status": "NOT_FOUND",
"message": "Resource Not Found",
- "details": "The requested resource is not found. ID: non-existing-id"
+ "details": "The requested resource is not found. ID: urn:non-existing-id"
}''')
}
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get relationship with metadata for specified id "
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/REL_OAM_RAN/relationship-types/MANAGEDELEMENT_MANAGES_ODUFUNCTION/relationships/urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=6BD25E5C8FB7842F69010736253CC47F43535D7238E9E9A03E8092E8C019C83270DE47C96EF1049C40B83A130F9F129AE93B9C8538B6B004AE89BD0A098E48DD"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/yang.data+json')
+ }
+ body('''{
+ "o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION": [
+ {
+ "metadata": {
+ "lastModified":"2025-01-13T16:40:36.461565Z",
+ "firstDiscovered":"2025-01-13T16:40:36.461565Z",
+ "reliabilityIndicator": "OK"
+ },
+ "bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19",
+ "aSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19",
+ "id": "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=6BD25E5C8FB7842F69010736253CC47F43535D7238E9E9A03E8092E8C019C83270DE47C96EF1049C40B83A130F9F129AE93B9C8538B6B004AE89BD0A098E48DD",
+ "sourceIds": []
+ }
+ ]
+ }''')
+ bodyMatchers {
+ jsonPath('o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].id', byEquality())
+ jsonPath('o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].aSide', byEquality())
+ jsonPath('o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].bSide', byEquality())
+ jsonPath('o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.lastModified', byEquality())
+ jsonPath('o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.firstDiscovered', byEquality())
+ jsonPath('o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION[0].metadata.reliabilityIndicator', byEquality())
+ }
+ }
}
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
contentType('application/json')
}
body('''{
- "items": [
+ "items": [
{
"o-ran-smo-teiv-ran:OCUCPFunction": [
{
contentType('application/json')
}
body('''{
- "items": [
+ "items": [
{
"o-ran-smo-teiv-ran:OCUCPFunction": [
{
contentType('application/json')
}
body('''{
- "items": [
+ "items": [
{
"o-ran-smo-teiv-ran:NRCellDU": [
{
}
},
Contract.make {
- description "SUCCESS - 200: Get entities in RAN domain with scopeFilter on 2 different entity types and combining the condition on complex attributes"
+ description 'SUCCESS - 200: Get entities in RAN domain with scopeFilter on 2 different entity types and combining the condition on complex attributes'
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/RAN/entities?scopeFilter=/NRCellDU/attributes[@nCI=1];/OCUCPFunction/attributes/pLMNId[@mcc='456' or @mnc='83']"
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?scopeFilter=/NRCellDU/attributes[@nCI=1];/ODUFunction/attributes/dUpLMNId[@mcc='456' or @mnc='83']"
}
response {
status OK()
]
},
{
- "o-ran-smo-teiv-ran:OCUCPFunction": [
+ "o-ran-smo-teiv-ran:ODUFunction": [
{
- "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUCPFunction=10"
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10"
}
]
},
{
- "o-ran-smo-teiv-ran:OCUCPFunction": [
+ "o-ran-smo-teiv-ran:ODUFunction": [
{
- "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUCPFunction=16"
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16"
}
]
}
],
"self": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/OCUCPFunction/attributes/pLMNId[@mcc='456' or @mnc='83']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/ODUFunction/attributes/dUpLMNId[@mcc='456' or @mnc='83']"
},
"first": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/OCUCPFunction/attributes/pLMNId[@mcc='456' or @mnc='83']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/ODUFunction/attributes/dUpLMNId[@mcc='456' or @mnc='83']"
},
"prev": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/OCUCPFunction/attributes/pLMNId[@mcc='456' or @mnc='83']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/ODUFunction/attributes/dUpLMNId[@mcc='456' or @mnc='83']"
},
"next": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/OCUCPFunction/attributes/pLMNId[@mcc='456' or @mnc='83']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/ODUFunction/attributes/dUpLMNId[@mcc='456' or @mnc='83']"
},
"last": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/OCUCPFunction/attributes/pLMNId[@mcc='456' or @mnc='83']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/NRCellDU/attributes[@nCI=1];/ODUFunction/attributes/dUpLMNId[@mcc='456' or @mnc='83']"
},
"totalCount": 3
}''')
jsonPath('$.items', byType {
occurrence(3)
})
- jsonPath('$.items[1].o-ran-smo-teiv-ran:OCUCPFunction[0].id', byEquality())
- jsonPath('$.items[2].o-ran-smo-teiv-ran:OCUCPFunction[0].id', byEquality())
jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
}
}
},
"o-ran-smo-teiv-ran:ODUFunction": [
{
"metadata": {
+ "lastModified":"2025-01-09T10:40:36.461565Z",
+ "firstDiscovered":"2025-01-09T10:40:36.461565Z",
"reliabilityIndicator": "OK"
},
"id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9"
occurrence(1)
})
jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.lastModified', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.firstDiscovered', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].metadata.reliabilityIndicator', byEquality())
}
}
},
description "SUCCESS - 200: Get entities of domain RAN by Sector id"
request {
method GET()
- url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
}
response {
status OK()
}
],
"self": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"first": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"prev": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"next": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"last": {
- "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='Sector=2']"
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector[@id='urn:Sector=2']"
},
"totalCount": 3
}''')
jsonPath('$.items[2].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
}
}
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get entities of domain RAN by AntennaModule id"
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:AntennaCapability": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule[@id='urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7']"
+ },
+ "totalCount": 2
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:AntennaCapability[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of domain RAN inside the specified Polygon of AntennaModule'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:AntennaCapability": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[coveredBy(@geo-location, 'POLYGON((48 68, 50 68, 50 69, 48 69, 48 68))')]"
+ },
+ "totalCount": 2
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[*].o-ran-smo-teiv-ran:NRCellDU[0].id', byType {
+ minOccurrence(1)
+ })
+ jsonPath('$.items[*].o-ran-smo-teiv-ran:AntennaCapability[0].id', byType {
+ minOccurrence(1)
+ })
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of domain RAN within 500 meters radius of AntennaModule'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:AntennaCapability": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[withinMeters(@geo-location, 'POINT(49.40199 68.94199)', 500)]"
+ },
+ "totalCount": 2
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(2)
+ })
+ jsonPath('$.items[*].o-ran-smo-teiv-ran:NRCellDU[0].id', byType {
+ minOccurrence(1)
+ })
+ jsonPath('$.items[*].o-ran-smo-teiv-ran:AntennaCapability[0].id', byType {
+ minOccurrence(1)
+ })
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of domain RAN where AntennaModule electricalAntennaTilt is 11'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:AntennaCapability": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:AntennaCapability": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/serving-antennaModule/attributes[@electricalAntennaTilt=11]"
+ },
+ "totalCount": 4
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(4)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:AntennaCapability[0].id', byEquality())
+ jsonPath('$.items[3].o-ran-smo-teiv-ran:AntennaCapability[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of domain RAN inside the specified Polygon of Sector'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[coveredBy(@geo-location, 'POLYGON((60 18, 61 18, 61 20, 60 20, 60 18))')]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[coveredBy(@geo-location, 'POLYGON((60 18, 61 18, 61 20, 60 20, 60 18))')]"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[coveredBy(@geo-location, 'POLYGON((60 18, 61 18, 61 20, 60 20, 60 18))')]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[coveredBy(@geo-location, 'POLYGON((60 18, 61 18, 61 20, 60 20, 60 18))')]"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[coveredBy(@geo-location, 'POLYGON((60 18, 61 18, 61 20, 60 20, 60 18))')]"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[coveredBy(@geo-location, 'POLYGON((60 18, 61 18, 61 20, 60 20, 60 18))')]"
+ },
+ "totalCount": 3
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of domain RAN within 500 meters radius of Sector'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[withinMeters(@geo-location, 'POINT(60.4019881 18.9419888)', 500)]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[withinMeters(@geo-location, 'POINT(60.4019881 18.9419888)', 500)]"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[withinMeters(@geo-location, 'POINT(60.4019881 18.9419888)', 500)]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[withinMeters(@geo-location, 'POINT(60.4019881 18.9419888)', 500)]"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[withinMeters(@geo-location, 'POINT(60.4019881 18.9419888)', 500)]"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[withinMeters(@geo-location, 'POINT(60.4019881 18.9419888)', 500)]"
+ },
+ "totalCount": 3
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of domain RAN where Sector sectorId is 2'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-by-sector/attributes[@sectorId=2]"
+ },
+ "totalCount": 3
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description 'SUCCESS - 200: Get entities of domain RAN where NRCellDU cellLocalId is 3'
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-nrCellDu/attributes[@cellLocalId=3]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:Sector": [
+ {
+ "id": "urn:Sector=2"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-nrCellDu/attributes[@cellLocalId=3]"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-nrCellDu/attributes[@cellLocalId=3]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-nrCellDu/attributes[@cellLocalId=3]"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-nrCellDu/attributes[@cellLocalId=3]"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=500&scopeFilter=/grouped-nrCellDu/attributes[@cellLocalId=3]"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:Sector[0].id', byEquality())
+ }
+ }
}
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
}
}
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get decorators using association name - contains"
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/provided-by-oduFunction/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/provided-by-oduFunction/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ },
+ "first": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/provided-by-oduFunction/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/provided-by-oduFunction/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ },
+ "next": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/provided-by-oduFunction/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ },
+ "last": {
+ "href": "/domains/RAN/entity-types/NRCellDU/entities?offset=0&limit=100&scopeFilter=/provided-by-oduFunction/decorators[contains(@test-app-module:textdata, 'ORAN')]"
+ },
+ "totalCount": 3
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ }
+ }
}
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
}
}
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get decorators using association name - EQUALS"
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=100&targetFilter=/NRCellDU/attributes(cellLocalId)&scopeFilter=/NRCellDU/provided-by-oduFunction/decorators[@test-app-module:textdata='ORAN']"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1",
+ "attributes": {
+ "cellLocalId": 1
+ }
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2",
+ "attributes": {
+ "cellLocalId": 2
+ }
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3",
+ "attributes": {
+ "cellLocalId": 3
+ }
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&targetFilter=/NRCellDU/attributes(cellLocalId)&scopeFilter=/NRCellDU/provided-by-oduFunction/decorators[@test-app-module:textdata='ORAN']"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&targetFilter=/NRCellDU/attributes(cellLocalId)&scopeFilter=/NRCellDU/provided-by-oduFunction/decorators[@test-app-module:textdata='ORAN']"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&targetFilter=/NRCellDU/attributes(cellLocalId)&scopeFilter=/NRCellDU/provided-by-oduFunction/decorators[@test-app-module:textdata='ORAN']"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&targetFilter=/NRCellDU/attributes(cellLocalId)&scopeFilter=/NRCellDU/provided-by-oduFunction/decorators[@test-app-module:textdata='ORAN']"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&targetFilter=/NRCellDU/attributes(cellLocalId)&scopeFilter=/NRCellDU/provided-by-oduFunction/decorators[@test-app-module:textdata='ORAN']"
+ },
+ "totalCount": 3
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(3)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:NRCellDU[0].attributes.cellLocalId', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:NRCellDU[0].attributes.cellLocalId', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:NRCellDU[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:NRCellDU[0].attributes.cellLocalId', byEquality())
+ }
+ }
+ },
+ Contract.make {
+ description "SUCCESS - 200: Get decorators using contains with empty string. "
+ request {
+ method GET()
+ url "/topology-inventory/v1alpha11/domains/RAN/entities?offset=0&limit=100&scopeFilter=/decorators[contains(@test-app-module:textdata,'')]"
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,ODUFunction=14"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16"
+ }
+ ]
+ },
+ {
+ "o-ran-smo-teiv-ran:ODUFunction": [
+ {
+ "id": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9"
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&scopeFilter=/decorators[contains(@test-app-module:textdata,'')]"
+ },
+ "first": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&scopeFilter=/decorators[contains(@test-app-module:textdata,'')]"
+ },
+ "prev": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&scopeFilter=/decorators[contains(@test-app-module:textdata,'')]"
+ },
+ "next": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&scopeFilter=/decorators[contains(@test-app-module:textdata,'')]"
+ },
+ "last": {
+ "href": "/domains/RAN/entities?offset=0&limit=100&scopeFilter=/decorators[contains(@test-app-module:textdata,'')]"
+ },
+ "totalCount": 5
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(5)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[1].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[2].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[3].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ jsonPath('$.items[4].o-ran-smo-teiv-ran:ODUFunction[0].id', byEquality())
+ }
+ }
}
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
"test-app-module:intdata": 123
},
"entityIds": [
- "WRONG_ENTITY_ID",
+ "urn:WRONG_ENTITY_ID",
"urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A"
],
"operation": "merge"
body('''{
"status": "NOT_FOUND",
"message": "Resource Not Found",
- "details": "The requested resource with the following ids cannot be found. Entities: [WRONG_ENTITY_ID] Relationships: []"
+ "details": "The requested resource with the following ids cannot be found. Entities: [urn:WRONG_ENTITY_ID] Relationships: []"
}''')
bodyMatchers {
jsonPath('$.status', byEquality())
}
}
},
+ Contract.make {
+ description "NOT FOUND - 404: Merge decorators where entity id does not start with urn:"
+ request {
+ method POST()
+ url "/topology-inventory/v1alpha11/decorators"
+ headers {
+ contentType("application/json")
+ accept('application/problem+json')
+ }
+ body('''{
+ "decorators": {
+ "test-app-module:textdata": "Budapest",
+ "test-app-module:intdata": 123
+ },
+ "entityIds": [
+ "WRONG_ENTITY_ID",
+ "urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A"
+ ],
+ "operation": "merge"
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/problem+json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Topology ID format not supported",
+ "details": "Topology ID : WRONG_ENTITY_ID is not in supported format. Topology ID should start with urn:"
+ }''')
+ }
+ },
Contract.make {
description "NOT FOUND - 404: Merge decorators with wrong relationship ids."
request {
},
"relationshipIds": [
"urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=44F4F4FC906E9A7525065E4565246F7469CBD11FC7752C61EA6D74776845900AFF472DCAACA1F66443490B6CE0DD9AC9A5E1467022118599F6B4C6EC63400512",
- "WRONG_RELATIONSHIP_ID"
+ "urn:WRONG_RELATIONSHIP_ID"
],
"operation": "merge"
}''')
body('''{
"status": "NOT_FOUND",
"message": "Resource Not Found",
- "details": "The requested resource with the following ids cannot be found. Entities: [] Relationships: [WRONG_RELATIONSHIP_ID]"
+ "details": "The requested resource with the following ids cannot be found. Entities: [] Relationships: [urn:WRONG_RELATIONSHIP_ID]"
}''')
bodyMatchers {
jsonPath('$.status', byEquality())
}
}
},
+ Contract.make {
+ description "ERROR - 400: Merge decorators where relationship id does not start with urn:"
+ request {
+ method POST()
+ url "/topology-inventory/v1alpha11/decorators"
+ headers {
+ contentType("application/json")
+ accept('application/problem+json')
+ }
+ body('''{
+ "decorators": {
+ "test-app-module:textdata": "Budapest",
+ "test-app-module:intdata": 123
+ },
+ "relationshipIds": [
+ "urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=44F4F4FC906E9A7525065E4565246F7469CBD11FC7752C61EA6D74776845900AFF472DCAACA1F66443490B6CE0DD9AC9A5E1467022118599F6B4C6EC63400512",
+ "WRONG_RELATIONSHIP_ID"
+ ],
+ "operation": "merge"
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/problem+json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Topology ID format not supported",
+ "details": "Topology ID : WRONG_RELATIONSHIP_ID is not in supported format. Topology ID should start with urn:"
+ }''')
+ }
+ },
Contract.make {
description "NOT FOUND - 404: Merge decorators with wrong entity and relationship ids."
request {
"test-app-module:intdata": 123
},
"entityIds": [
- "WRONG_ENTITY_ID",
+ "urn:WRONG_ENTITY_ID",
"urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A"
],
"relationshipIds": [
- "WRONG_RELATIONSHIP_ID"
+ "urn:WRONG_RELATIONSHIP_ID"
],
"operation": "merge"
}''')
body('''{
"status": "NOT_FOUND",
"message": "Resource Not Found",
- "details": "The requested resource with the following ids cannot be found. Entities: [WRONG_ENTITY_ID] Relationships: [WRONG_RELATIONSHIP_ID]"
+ "details": "The requested resource with the following ids cannot be found. Entities: [urn:WRONG_ENTITY_ID] Relationships: [urn:WRONG_RELATIONSHIP_ID]"
}''')
bodyMatchers {
jsonPath('$.status', byEquality())
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
{
"name": "o-ran-smo-teiv-common-yang-types",
"domain": "",
- "revision": "2024-10-04",
+ "revision": "2025-01-17",
"content": {
"href": "/schemas/o-ran-smo-teiv-common-yang-types/content"
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
' } ' +
' } ' +
' ' +
- ' identity UPDATEties_model.module_referenceSETstatusDELETINGWHEREnameodu-function-model { ' +
+ ' identity UPDATEteiv_model.module_referenceSETstatusDELETINGWHEREnameodu-function-model { ' +
' base test:classifiers; ' +
' } ' +
' ' +
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
},
Contract.make {
- description "SUCCESS - 201: Create a dynamic getRelationshipsForEntityId group"
+ description "SUCCESS - 201: Create a dynamic getRelationshipsForEntityId group where entity id doesnt exists in teiv"
request {
method POST()
url("/topology-inventory/v1alpha11/groups")
"queryType": "getRelationshipsForEntityId",
"domain": "RAN",
"entityTypeName": "NRCellDU",
- "entityId": "NRCellDU-1"
+ "entityId": "urn:NRCellDU-1"
}
}''')
}
"queryType": "getRelationshipsForEntityId",
"domain": "RAN",
"entityTypeName": "NRCellDU",
- "entityId": "NRCellDU-1"
+ "entityId": "urn:NRCellDU-1"
},
"members": {
"href": "/groups/urn:o-ran:smo:teiv:group=bbeb1db4-88dc-47b3-aa07-fdad50145b16/members"
{
"o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU": [
{
- "id": "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418"
+ "id": "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=EA8BF964B4888BFD1991D8E2ECDFA7723118D3829C1378ACBB5484F9ADE328957641013EDF2BEC80CB8E4E0A46CC2D85B960EF25ABF61CC8601095948E368624"
}
]
},
{
"o-ran-smo-teiv-ran:ODUFUNCTION_PROVIDES_NRCELLDU": [
{
- "id": "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=9CD8DCA1FE61CE75"
+ "id": "urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=7EB5B959010A84E95BFA6CAA314120CC335007FCDB2947A53A6E19171BB8742965A874FB89B73CD21EB790E52C8E6DC129B35469BA3867DAC67F4DE72E60185E"
}
]
},
{
"o-ran-smo-teiv-rel-oam-ran:MANAGEDELEMENT_MANAGES_ODUFUNCTION": [
{
- "id": "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=9243B48F7D6A6C56"
+ "id": "urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=86084B5A80FAC7339117CEB91A4838FAC28C50AF00C9A13DF66FFA497356A8F440626A935B9621D4C833F0A6DE2722EDC9A312E506D80235A8C1BF54D8DFACC8"
}
]
}
}''')
}
},
+ Contract.make {
+ description "ERROR - 400: Create a dynamic group with 'static' group type"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "dynamic-cell-filter-group",
+ "type": "static",
+ "criteria": {
+ "queryType": "getRelationshipsByType",
+ "domain": "RAN",
+ "relationshipTypeName": "NRCELLDU_USES_NRSECTORCARRIER"
+ }
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid type specified",
+ "details": "A dynamic group cannot be created of type 'static'"
+ }''')
+ }
+ },
Contract.make {
description "ERROR - 400: Create a dynamic group with invalid group type"
request {
response {
status BAD_REQUEST()
headers {
- contentType('application/problem+json')
+ contentType('application/json')
}
body('''{
- "type": "about:blank",
- "title": "Bad Request",
- "status": 400,
- "detail": "Failed to read request",
- "instance": "/topology-inventory/v1alpha11/groups"
+ "status": "BAD_REQUEST",
+ "message": "Invalid type specified",
+ "details": "Invalid group type. Only 'static' or 'dynamic' types are allowed"
}''')
}
},
response {
status BAD_REQUEST()
headers {
- contentType('application/problem+json')
+ contentType('application/json')
}
body('''{
- "type": "about:blank",
- "title": "Bad Request",
- "status": 400,
- "detail": "Failed to read request",
- "instance": "/topology-inventory/v1alpha11/groups"
+ "status": "BAD_REQUEST",
+ "message": "Invalid type specified",
+ "details": "Invalid query type. Only 'getRelationshipsForEntityId', 'getEntitiesByDomain', 'getEntitiesByType' & 'getRelationshipsByType' are supported."
}''')
}
},
}''')
}
},
+ Contract.make {
+ description "ERROR - 400: Create a dynamic group with unsupported domain for getRelationshipsByType"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "dynamic-cell-filter-group",
+ "type": "dynamic",
+ "criteria": {
+ "queryType": "getRelationshipsByType",
+ "domain": "bla",
+ "relationshipTypeName": "NRCELLDU_USES_NRSECTORCARRIER"
+ }
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Unknown domain",
+ "details": "Unknown domain: bla, known domains: [CLOUD, EQUIPMENT, OAM, RAN, REL_CLOUD_RAN, REL_EQUIPMENT_RAN, REL_OAM_CLOUD, REL_OAM_RAN, TEIV, TEST]"
+ }''')
+ }
+ },
+ //10
+ Contract.make {
+ description "ERROR - 400: Create a dynamic group with invalid filter"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "dynamic-cell-filter-group",
+ "type": "dynamic",
+ "criteria": {
+ "queryType": "getRelationshipsForEntityId",
+ "domain": "TEIV",
+ "entityTypeName": "NRCellDU",
+ "entityId": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1",
+ "targetFilter": "/NRCellDU/attributes(nCI)",
+ "scopeFilter": "/NRCellDU/attributes[@cellLocalId=2]"
+ }
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid target filter, only relationship conditions can be provided",
+ "details": "NRCellDU is not a valid relation"
+ }''')
+ }
+ },
+ Contract.make {
+ description "ERROR - 400:: Create a dynamic getRelationshipsForEntityId group where entity id does not start with urn:"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "dynamic-cell-filter-group",
+ "type": "dynamic",
+ "criteria": {
+ "queryType": "getRelationshipsForEntityId",
+ "domain": "RAN",
+ "entityTypeName": "NRCellDU",
+ "entityId": "NRCellDU-1"
+ }
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Topology ID format not supported",
+ "details": "Topology ID : NRCellDU-1 is not in supported format. Topology ID should start with urn:"
+ }''')
+ }
+ },
Contract.make {
description "ERROR - 400: Create a static group with no providedMembers specified"
request {
}''')
}
},
+ Contract.make {
+ description "ERROR - 400: Create a static group with invalid module name for the entity type"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "static-cell-filter-group",
+ "type": "static",
+ "providedMembers": [
+ {
+ "o-ran-smo-teiv-ran:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=1"
+ },
+ {
+ "id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=2"
+ }
+ ]
+ }
+ ]
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid providedMembers",
+ "details": "Unable to parse the given providedMembers. Invalid topology type 'o-ran-smo-teiv-ran:ManagedElement', not found in the model"
+ }''')
+ }
+ },
+ Contract.make {
+ description "ERROR - 400: Create a static group with wrong topology type format"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "static-cell-filter-group",
+ "type": "static",
+ "providedMembers": [
+ {
+ "o-ran-smo-teiv-oam:ManagedElement:bla": [
+ {
+ "id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=1"
+ },
+ {
+ "id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=2"
+ }
+ ]
+ }
+ ]
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid providedMembers",
+ "details": "Unable to parse the given providedMembers. Topology type must be in the format 'moduleName:topologyTypeName'. Provided: o-ran-smo-teiv-oam:ManagedElement:bla"
+ }''')
+ }
+ },
+ Contract.make {
+ description "ERROR - 400: Create a static group with wrong topology id where topology id doesnt start with urn:"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "static-cell-filter-group",
+ "type": "static",
+ "providedMembers": [
+ {
+ "o-ran-smo-teiv-oam:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=1"
+ },
+ {
+ "id": "3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=2"
+ }
+ ]
+ }
+ ]
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid providedMembers",
+ "details": "Unable to parse the given providedMembers. Topology id 3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=2 is not in supported format. Provided members id should start with urn:"
+ }''')
+ }
+ },
Contract.make {
description "ERROR - 400: Create a static group with invalid providedMembers(list contains empty object)"
request {
}''')
}
},
+ //20
Contract.make {
description "ERROR - 400: Create a static group with invalid providedMembers(list contains empty object)"
request {
}''')
}
},
+ Contract.make {
+ description "ERROR - 400: Create a dynamic group with 'static' group type"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "static-cell-filter-group",
+ "type": "dynamic",
+ "providedMembers": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1",
+ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
+ ]
+ }
+ ]
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid type specified",
+ "details": "A static group cannot be created of type 'dynamic'"
+ }''')
+ }
+ },
+ Contract.make {
+ description "ERROR - 400: Create a dynamic group with invalid group type"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups")
+ headers {
+ accept("application/json")
+ contentType("application/json")
+ }
+ body('''{
+ "name": "static-cell-filter-group",
+ "type": "invalidGroup",
+ "providedMembers": [
+ {
+ "o-ran-smo-teiv-ran:NRCellDU": [
+ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=1",
+ "urn:3gpp:dn:ManagedElement=1,ODUFunction=1,NRCellDU=2"
+ ]
+ }
+ ]
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid type specified",
+ "details": "Invalid group type. Only 'static' or 'dynamic' types are allowed"
+ }''')
+ }
+ },
Contract.make {
description "ERROR - 400: Invalid endpoint"
request {
method POST()
- url("/topology-inventory/v1alpha11/ties-groups")
+ url("/topology-inventory/v1alpha11/teiv-groups")
headers {
accept("application/json")
contentType("application/json")
}
body('''{
"status": "BAD_REQUEST",
- "message": "No static resource topology-inventory/v1alpha11/ties-groups.",
+ "message": "No static resource topology-inventory/v1alpha11/teiv-groups.",
"details": null
}''')
}
- }
+ } //30
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
"href": "/groups?offset=2&limit=2"
},
"last": {
- "href": "/groups?offset=28&limit=2"
+ "href": "/groups?offset=32&limit=2"
},
- "totalCount": 29
+ "totalCount": 33
}''')
bodyMatchers {
jsonPath('$.items', byType {
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
body('''{
"status": "INTERNAL_SERVER_ERROR",
"message": "Criteria deserialization exception",
- "details": "Could not resolve subtype of [simple type, class org.oran.smo.teiv.api.model.OranTeivCriteria]: missing type id property 'queryType'\\n at [Source: (String)\\"{\\"criteria\\":{\\"targetFilter\\":\\"\\\\/sourceIds\\",\\"domain\\":\\"RAN\\",\\"entityTypeName\\":\\"ODUFunction\\",\\"queryType\\":\\"getEntitiesByType\\"}}\\"; line: 1, column: 121]"
+ "details": "Could not resolve subtype of [simple type, class org.oran.smo.teiv.api.model.OranTeivCriteria]: missing type id property 'queryType'\\n"
}''')
bodyMatchers {
jsonPath('$.status', byEquality())
jsonPath('$.message', byEquality())
- jsonPath('$.details', byEquality())
+ jsonPath('$.details', byRegex("Could not resolve subtype of \\[simple type, class org\\.oran\\.smo\\.teiv\\.api\\.model\\.OranTeivCriteria\\]: missing type id property 'queryType'[\\s\\S]*"))
}
}
},
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
}
},
+ Contract.make {
+ description "SUCCESS - 200: Get the members of a dynamic group when valid target filter & valid scope filter)"
+ request {
+ method GET()
+ url("/topology-inventory/v1alpha11/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440217/members?offset=0&limit=10")
+ }
+ response {
+ status OK()
+ headers {
+ contentType('application/json')
+ }
+ body ('''{
+ "items": [
+ {
+ "o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU": [
+ {
+ "bSide": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1",
+ "aSide": "urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A",
+ "id": "urn:o-ran:smo:teiv:sha512:ANTENNAMODULE_SERVES_NRCELLDU=ABD52B030DF1169F9F41C898913EF30F7BB5741F53352F482310B280C90AC569B7D31D52A2BB41F1F0099AE1EDD56CACF0B285D145A5584D376DD45DED1E2D65",
+ "sourceIds": [
+ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1",
+ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1",
+ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1",
+ "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616",
+ "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1",
+ "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"
+ ]
+ }
+ ]
+ }
+ ],
+ "self": {
+ "href": "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440217/members?offset=0&limit=10"
+ },
+ "first": {
+ "href": "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440217/members?offset=0&limit=10"
+ },
+ "prev": {
+ "href": "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440217/members?offset=0&limit=10"
+ },
+ "next": {
+ "href": "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440217/members?offset=0&limit=10"
+ },
+ "last": {
+ "href": "/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440217/members?offset=0&limit=10"
+ },
+ "totalCount": 1
+ }''')
+ bodyMatchers {
+ jsonPath('$.items', byType {
+ occurrence(1)
+ })
+ jsonPath('$.items[0].o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU[0].id', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU[0].aSide', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU[0].bSide', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU[0].sourceIds[0]', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU[0].sourceIds[1]', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU[0].sourceIds[2]', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU[0].sourceIds[3]', byEquality())
+ jsonPath('$.items[0].o-ran-smo-teiv-rel-equipment-ran:ANTENNAMODULE_SERVES_NRCELLDU[0].sourceIds[4]', byEquality())
+ }
+ }
+ },
Contract.make {
description "ERROR - 404: Get a static group by id that does not exists"
request {
}
},
Contract.make {
- description "SUCCESS - 404: Get the members of a dynamic group with getRelationshipsForEntityId queryType where entity id doesn't exists"
+ description "ERROR - 404: Get the members of a dynamic group with getRelationshipsForEntityId queryType where entity id doesn't exists"
request {
method GET()
url("/topology-inventory/v1alpha11/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440004/members")
status BAD_REQUEST()
body('''{
"status": "BAD_REQUEST",
- "message": "Invalid data in scopeFilter",
- "details": "Unable to resolve attributes"
+ "message": "Grammar error",
+ "details": "Invalid data in scopeFilter"
}''')
}
},
"details": "The requested group is not found"
}''')
}
+ },
+ Contract.make {
+ description "ERROR - 400: No target filter exists & invalid scope filter"
+ request {
+ method GET()
+ url("/topology-inventory/v1alpha11/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440218/members")
+ }
+ response {
+ status BAD_REQUEST()
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Filter Error",
+ "details": "TopologyObjects given in scopeFilter and targetFilter are not matching"
+ }''')
+ }
+ },
+ Contract.make {
+ description "ERROR - 400: Invalid target filter & invalid scope filter"
+ request {
+ method GET()
+ url("/topology-inventory/v1alpha11/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440220/members")
+ }
+ response {
+ status BAD_REQUEST()
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid target filter, only relationship conditions can be provided",
+ "details": "NRCellDU is not a valid relation"
+ }''')
+ }
}
]
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
"operation": "merge",
"providedMembers": [
{
- "o-ran-smo-teiv-ran:ManagedElement": [
+ "o-ran-smo-teiv-oam:ManagedElement": [
{
"id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=1"
},
}
}
},
+ Contract.make {
+ description "ERROR - 400: Merge into provided members in an existing static topology group with invalid module name for the entity type"
+ request {
+ method POST()
+ url("/topology-inventory/v1alpha11/groups/urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440341/provided-members-operations")
+ headers {
+ contentType("application/json")
+ }
+
+ body('''{
+ "operation": "merge",
+ "providedMembers": [
+ {
+ "o-ran-smo-teiv-ran:ManagedElement": [
+ {
+ "id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=1"
+ },
+ {
+ "id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1,ManagedElement=2"
+ }
+ ]
+ }
+ ]
+ }''')
+ }
+ response {
+ status BAD_REQUEST()
+ headers {
+ contentType('application/json')
+ }
+ body('''{
+ "status": "BAD_REQUEST",
+ "message": "Invalid providedMembers",
+ "details": "Unable to parse the given providedMembers. Invalid topology type 'o-ran-smo-teiv-ran:ManagedElement', not found in the model"
+ }''')
+ }
+ },
Contract.make {
description "ERROR - 404: Merge provided members into a non existing topology group"
request {
"operation": "remove",
"providedMembers": [
{
- "o-ran-smo-teiv-ran:UnKnown": [
+ "o-ran-smo-teiv-oam:ManagedElement": [
{
"id": "urn:3gpp:dn:NRCellDU=1,ODUFunction=1, ManagedElement=1"
},
body('''{
"status": "BAD_REQUEST",
"message": "Provided members update exception",
- "details": "The specified topology entity/relation: o-ran-smo-teiv-ran:UnKnown is not part of the group."
+ "details": "The specified topology entity/relation: o-ran-smo-teiv-oam:ManagedElement is not part of the group."
}''')
bodyMatchers {
jsonPath('$.status', byEquality())
GRANT SELECT ON ALL SEQUENCES IN SCHEMA topology TO :pguser;
GRANT SELECT ON ALL TABLES IN SCHEMA topology TO :pguser;
-CREATE SCHEMA IF NOT EXISTS ties_data;
-ALTER SCHEMA ties_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_data;
+ALTER SCHEMA teiv_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_data.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_data.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_data' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_data' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE OR REPLACE FUNCTION ties_data.create_enum_type(
+CREATE OR REPLACE FUNCTION teiv_data.create_enum_type(
schema_name TEXT, type_name TEXT, enum_values TEXT[]
) RETURNS VOID AS $$
BEGIN
END;
$$ language 'plpgsql';
-SELECT ties_data.create_enum_type('ties_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
+SELECT teiv_data.create_enum_type('teiv_data', 'Reliability', ARRAY['OK', 'RESTORED', 'ADVISED']);
-CREATE TABLE IF NOT EXISTS ties_data."responsible_adapter" (
+CREATE TABLE IF NOT EXISTS teiv_data."responsible_adapter" (
"id" TEXT,
"hashed_id" BYTEA
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'PK_responsible_adapter_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "PK_responsible_adapter_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'responsible_adapter',
'UNIQUE_responsible_adapter_hashed_id',
- 'ALTER TABLE ties_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
-);CREATE TABLE IF NOT EXISTS ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" (
+ 'ALTER TABLE teiv_data."responsible_adapter" ADD CONSTRAINT "UNIQUE_responsible_adapter_hashed_id" UNIQUE ("hashed_id");'
+);CREATE TABLE IF NOT EXISTS teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_NearRTRICFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
+CREATE TABLE IF NOT EXISTS teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" (
"id" TEXT,
"aSide_AntennaModule" TEXT,
"bSide_AntennaCapability" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCloudNamespace" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NFDeployment" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NFDeployment" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"REL_metadata_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ALTER COLUMN "REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" (
"id" TEXT,
"aSide_NodeCluster" TEXT,
"bSide_OCloudSite" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_NodeCluster" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_NodeCluster" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" (
"id" TEXT,
"name" TEXT,
"CD_sourceIds" jsonb,
"REL_metadata_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ALTER COLUMN "REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-cloud_OCloudSite" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-cloud_OCloudSite" (
"id" TEXT,
"geo-location" geography,
"name" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_AntennaModule" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-equipment_AntennaModule" (
"id" TEXT,
"antennaBeamWidth" jsonb,
"antennaModelNumber" TEXT,
"REL_metadata_SECTOR_GROUPS_ANTENNAMODULE" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-equipment_Site" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-equipment_Site" (
"id" TEXT,
"geo-location" geography,
"name" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-equipment_Site" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-oam_ManagedElement" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-oam_ManagedElement" (
"id" TEXT,
"CD_sourceIds" jsonb,
"CD_classifiers" jsonb,
"REL_metadata_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_AntennaCapability" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_AntennaCapability" (
"id" TEXT,
"eUtranFqBands" jsonb,
"geranFqBands" jsonb,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRCellCU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRCellCU" (
"id" TEXT,
"cellLocalId" INTEGER,
"nCI" BIGINT,
"REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ALTER COLUMN "REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRCellDU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRCellDU" (
"id" TEXT,
"cellLocalId" INTEGER,
"nCI" BIGINT,
"REL_metadata_SECTOR_GROUPS_NRCELLDU" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ALTER COLUMN "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" (
"id" TEXT,
"arfcnDL" INTEGER,
"arfcnUL" INTEGER,
"REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ALTER COLUMN "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" (
"id" TEXT,
"nearRtRicId" BIGINT,
"pLMNId" jsonb,
"REL_metadata_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_OCUCPFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" (
"id" TEXT,
"gNBCUName" TEXT,
"gNBId" BIGINT,
"REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_OCUUPFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" (
"id" TEXT,
"gNBId" BIGINT,
"gNBIdLength" INTEGER,
"REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ODUFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ODUFunction" (
"id" TEXT,
"dUpLMNId" jsonb,
"gNBDUId" BIGINT,
"REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_ORUFunction" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_ORUFunction" (
"id" TEXT,
"oruId" BIGINT,
"CD_sourceIds" jsonb,
"REL_metadata_MANAGEDELEMENT_MANAGES_ORUFUNCTION" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_ORUFunction" ALTER COLUMN "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_Sector" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_Sector" (
"id" TEXT,
"azimuth" DECIMAL,
"geo-location" geography,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_Sector" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCUCPFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_OCUUPFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" (
"id" TEXT,
"aSide_NFDeployment" TEXT,
"bSide_ODUFunction" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" (
"id" TEXT,
"aSide_AntennaModule" TEXT,
"bSide_NRCellDU" TEXT,
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "PK_82A1C5618438FF6DF7CDD48FD71E0A584E6D052A" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "PK_63E61CB6802F21FE7A04A80A095F6AF8ABF067CE" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_CloudifiedNF',
'PK_o-ran-smo-teiv-cloud_CloudifiedNF_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_CloudifiedNF_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_CloudifiedNF_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "PK_E4FDDE2DC433209F933C7F53C9F72C1D2EB04BC6" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'PK_o-ran-smo-teiv-cloud_NFDeployment_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NFDeployment_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NFDeployment_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NodeCluster',
'PK_o-ran-smo-teiv-cloud_NodeCluster_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NodeCluster" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NodeCluster_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_NodeCluster_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'PK_o-ran-smo-teiv-cloud_OCloudNamespace_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudNamespace_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudNamespace_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudSite',
'PK_o-ran-smo-teiv-cloud_OCloudSite_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudSite" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudSite_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ADD CONSTRAINT "PK_o-ran-smo-teiv-cloud_OCloudSite_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'PK_o-ran-smo-teiv-equipment_AntennaModule_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_AntennaModule_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_Site',
'PK_o-ran-smo-teiv-equipment_Site_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_Site" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_Site_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_Site" ADD CONSTRAINT "PK_o-ran-smo-teiv-equipment_Site_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'PK_o-ran-smo-teiv-oam_ManagedElement_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "PK_o-ran-smo-teiv-oam_ManagedElement_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "PK_o-ran-smo-teiv-oam_ManagedElement_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_AntennaCapability',
'PK_o-ran-smo-teiv-ran_AntennaCapability_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_AntennaCapability_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'PK_o-ran-smo-teiv-ran_NRCellCU_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellCU_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellCU_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'PK_o-ran-smo-teiv-ran_NRCellDU_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellDU_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRCellDU_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'PK_o-ran-smo-teiv-ran_NRSectorCarrier_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRSectorCarrier_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NRSectorCarrier_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'PK_o-ran-smo-teiv-ran_NearRTRICFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NearRTRICFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_NearRTRICFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'PK_o-ran-smo-teiv-ran_OCUCPFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUCPFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUCPFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'PK_o-ran-smo-teiv-ran_OCUUPFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUUPFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_OCUUPFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'PK_o-ran-smo-teiv-ran_ODUFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ODUFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ODUFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'PK_o-ran-smo-teiv-ran_ORUFunction_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ORUFunction_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_ORUFunction_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_Sector',
'PK_o-ran-smo-teiv-ran_Sector_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_Sector" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_Sector_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_Sector" ADD CONSTRAINT "PK_o-ran-smo-teiv-ran_Sector_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "PK_2D854968CB74C42C534D8E7C2A53E93F6B7F001F" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'PK_E551D02D14B3C04A565DC73A386BEB29627D3C08',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "PK_E551D02D14B3C04A565DC73A386BEB29627D3C08" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "PK_E551D02D14B3C04A565DC73A386BEB29627D3C08" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "PK_A10CB552A0F126991DD325EC84DBFAC6F2BBE1A3" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'PK_F41873285F3BD831F63C6041B4356A063403406D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "PK_F41873285F3BD831F63C6041B4356A063403406D" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "PK_F41873285F3BD831F63C6041B4356A063403406D" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_BE847E738902EA979AC709D5A3D0CCD3FD8911CA" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'3C2E2CE7BDF8321BC824B6318B190690F58DBB82',
'FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5',
- 'ALTER TABLE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5" FOREIGN KEY ("bSide_NearRTRICFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ("id");'
+ 'ALTER TABLE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" ADD CONSTRAINT "FK_CCC0DEA6E4ABAB8614332070E83D953254D5A3A5" FOREIGN KEY ("bSide_NearRTRICFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_D80D1E6B26DF620B4DE659C600A3B7F709A41960" FOREIGN KEY ("aSide_AntennaModule") REFERENCES teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CFC235E0404703D1E4454647DF8AAE2C193DB402',
'FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06',
- 'ALTER TABLE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
+ 'ALTER TABLE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ADD CONSTRAINT "FK_7148BEED02C0617DE1DEEB6639F34A9FA9251B06" FOREIGN KEY ("bSide_AntennaCapability") REFERENCES teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'FK_A08D274894ECB6799E56C2089A494AF0345B9B16',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_A08D274894ECB6799E56C2089A494AF0345B9B16" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_A08D274894ECB6799E56C2089A494AF0345B9B16" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE',
'FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F" FOREIGN KEY ("bSide_OCloudNamespace") REFERENCES ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" ADD CONSTRAINT "FK_D39953B79C8D39296B892FCF2C00B9C99AC7023F" FOREIGN KEY ("bSide_OCloudNamespace") REFERENCES teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0" FOREIGN KEY ("REL_FK_comprised-by-cloudifiedNF") REFERENCES ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_127C21CB9B8871C3BCACA05A5400BE6B8E7FCAC0" FOREIGN KEY ("REL_FK_comprised-by-cloudifiedNF") REFERENCES teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC" UNIQUE ("REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_A5A8418B6BE911F281E6E2AA640D7D9F777471DC" UNIQUE ("REL_ID_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9" FOREIGN KEY ("REL_FK_serviced-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "FK_AC1348E208C2E64F2EB1DECE2CCA5DB10B89CBD9" FOREIGN KEY ("REL_FK_serviced-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NFDeployment',
'UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC" UNIQUE ("REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ADD CONSTRAINT "UNIQUE_8AD46969905BEEB89F63D3F37FD82B14F34FDCBC" UNIQUE ("REL_ID_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92" FOREIGN KEY ("aSide_NodeCluster") REFERENCES ties_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_AE882D77CE8D21B8032B124E1822E0EEE5DAAD92" FOREIGN KEY ("aSide_NodeCluster") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE',
'FK_888BF6FF782916E61B3FE80643A549A1CFDB6117',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_888BF6FF782916E61B3FE80643A549A1CFDB6117" FOREIGN KEY ("bSide_OCloudSite") REFERENCES ties_data."o-ran-smo-teiv-cloud_OCloudSite" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" ADD CONSTRAINT "FK_888BF6FF782916E61B3FE80643A549A1CFDB6117" FOREIGN KEY ("bSide_OCloudSite") REFERENCES teiv_data."o-ran-smo-teiv-cloud_OCloudSite" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF" FOREIGN KEY ("REL_FK_deployed-on-nodeCluster") REFERENCES ties_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "FK_143EFC1953E68469572446EFB56BDEBBC83B8EBF" FOREIGN KEY ("REL_FK_deployed-on-nodeCluster") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NodeCluster" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-cloud_OCloudNamespace',
'UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0" UNIQUE ("REL_ID_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" ADD CONSTRAINT "UNIQUE_C4DE73BD7AA3DBFA2D32E577D4E0A534A7184AB0" UNIQUE ("REL_ID_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC" FOREIGN KEY ("REL_FK_installed-at-site") REFERENCES ties_data."o-ran-smo-teiv-equipment_Site" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_E3BAEF04443354C0FC1837CF7964E05BEF9FD6CC" FOREIGN KEY ("REL_FK_installed-at-site") REFERENCES teiv_data."o-ran-smo-teiv-equipment_Site" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1" UNIQUE ("REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_9DF414C2F0CD7FA8BFCB3E9BF851784AC4BC49B1" UNIQUE ("REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'FK_078764B2F3D613D44CC6E3586F564C83164D2481',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_078764B2F3D613D44CC6E3586F564C83164D2481" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."o-ran-smo-teiv-ran_Sector" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "FK_078764B2F3D613D44CC6E3586F564C83164D2481" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES teiv_data."o-ran-smo-teiv-ran_Sector" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-equipment_AntennaModule',
'UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0" UNIQUE ("REL_ID_SECTOR_GROUPS_ANTENNAMODULE");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ADD CONSTRAINT "UNIQUE_78B1D3DCD903AFFB1965D440D87B2D194CA028A0" UNIQUE ("REL_ID_SECTOR_GROUPS_ANTENNAMODULE");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'FK_899B8130A861D1450FC49D3159D8B29C0628A717',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "FK_899B8130A861D1450FC49D3159D8B29C0628A717" FOREIGN KEY ("REL_FK_deployed-as-cloudifiedNF") REFERENCES ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "FK_899B8130A861D1450FC49D3159D8B29C0628A717" FOREIGN KEY ("REL_FK_deployed-as-cloudifiedNF") REFERENCES teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-oam_ManagedElement',
'UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708" UNIQUE ("REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-oam_ManagedElement" ADD CONSTRAINT "UNIQUE_EC9B35192A31C6491E6566602720D1C26E3CB708" UNIQUE ("REL_ID_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction" FOREIGN KEY ("REL_FK_provided-by-ocucpFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellCU_REL_FK_provided-by-ocucpFunction" FOREIGN KEY ("REL_FK_provided-by-ocucpFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellCU',
'UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497" UNIQUE ("REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellCU" ADD CONSTRAINT "UNIQUE_928074AEE57C9CB151F93FDC81BC59200D5F7497" UNIQUE ("REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_provided-by-oduFunction" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_B70F668E0E45FFFC5B7014489F6FD528EB15F192" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES ties_data."o-ran-smo-teiv-ran_Sector" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRCellDU_REL_FK_grouped-by-sector" FOREIGN KEY ("REL_FK_grouped-by-sector") REFERENCES teiv_data."o-ran-smo-teiv-ran_Sector" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRCellDU',
'UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4" UNIQUE ("REL_ID_SECTOR_GROUPS_NRCELLDU");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRCellDU" ADD CONSTRAINT "UNIQUE_AC1C114ABED77D6DEC3F3AE3F9EBE8231924AEF4" UNIQUE ("REL_ID_SECTOR_GROUPS_NRCELLDU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu" FOREIGN KEY ("REL_FK_used-by-nrCellDu") REFERENCES ties_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_o-ran-smo-teiv-ran_NRSectorCarrier_REL_FK_used-by-nrCellDu" FOREIGN KEY ("REL_FK_used-by-nrCellDu") REFERENCES teiv_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25" UNIQUE ("REL_ID_NRCELLDU_USES_NRSECTORCARRIER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_1AB577E5AC207ED4C99A9A96BA1C9C35544AFD25" UNIQUE ("REL_ID_NRCELLDU_USES_NRSECTORCARRIER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_65D538D54EB33081C808540235FEB28823428E64',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_65D538D54EB33081C808540235FEB28823428E64" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_65D538D54EB33081C808540235FEB28823428E64" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192" UNIQUE ("REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_A799EC9DA6624651081E1DA21B5F0C2D38F6A192" UNIQUE ("REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "FK_9B73B9E2DBA36736FB76606005C823A6D565A5CD" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NRSectorCarrier',
'UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ADD CONSTRAINT "UNIQUE_D5D35955594A6EB48640425529F7DE44BED00B62" UNIQUE ("REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "FK_32BDE0334EA6AD74ABB3958A2B163F63A3F05203" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_NearRTRICFunction',
'UNIQUE_E020461673334EB824643649B6B31670FB064EC8',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "UNIQUE_E020461673334EB824643649B6B31670FB064EC8" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" ADD CONSTRAINT "UNIQUE_E020461673334EB824643649B6B31670FB064EC8" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'FK_122DD9709032528D161177B3624AD7AAF6589005',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "FK_122DD9709032528D161177B3624AD7AAF6589005" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "FK_122DD9709032528D161177B3624AD7AAF6589005" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUCPFunction',
'UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ADD CONSTRAINT "UNIQUE_2B7D3D49C1072E660047DE56843413CE628BF94A" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "FK_8062AF50E5EE5543FBCC68D66FDFF673E31E081D" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_OCUUPFunction',
'UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ADD CONSTRAINT "UNIQUE_DF85FE7809B5527CB4A6028DD1A599DBBD5AF214" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "FK_B6F0A4F9024FB47DA39C9A4F1DFFF78330222A80" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ODUFunction',
'UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ODUFunction" ADD CONSTRAINT "UNIQUE_D570291C9E28A2AF73387B7A8B0F4C70130EEDB4" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "FK_B497A8C3DC2D647938E6DB4C7E691509DD8C90DE" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_ORUFunction',
'UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_ORUFunction" ADD CONSTRAINT "UNIQUE_4E6F008B82605A806EED04B2315A1FEE095A9241" UNIQUE ("REL_ID_MANAGEDELEMENT_MANAGES_ORUFUNCTION");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_2B4B09AF7CC9C877B1140BB127B4CB4DA438195D" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION',
'FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6" FOREIGN KEY ("bSide_OCUCPFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" ADD CONSTRAINT "FK_BCF2F9776761ABC19AE0BBD0244D7CD5785E7AC6" FOREIGN KEY ("bSide_OCUCPFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_AC1393DCBA845EDA13DADCB5BD87DF4163CD1669" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION',
'FK_8585D545BC37A473A298E0F5F5942F897A7105B1',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_8585D545BC37A473A298E0F5F5942F897A7105B1" FOREIGN KEY ("bSide_OCUUPFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" ADD CONSTRAINT "FK_8585D545BC37A473A298E0F5F5942F897A7105B1" FOREIGN KEY ("bSide_OCUUPFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79" FOREIGN KEY ("aSide_NFDeployment") REFERENCES ties_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_ABA5D0BEEB45E6A5B14DB24E880029CA38DF3F79" FOREIGN KEY ("aSide_NFDeployment") REFERENCES teiv_data."o-ran-smo-teiv-cloud_NFDeployment" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION',
'FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08" FOREIGN KEY ("bSide_ODUFunction") REFERENCES ties_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" ADD CONSTRAINT "FK_C7C12DB840FBCF4EA729B8C2BBCD8BFDE06F0F08" FOREIGN KEY ("bSide_ODUFunction") REFERENCES teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649" FOREIGN KEY ("aSide_AntennaModule") REFERENCES ties_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_1AB1E0CC29DA2E122D43A6616EC60A3F73E68649" FOREIGN KEY ("aSide_AntennaModule") REFERENCES teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU',
'FK_8605800A4923C52258A8CE3989E18A7C93D22E8C',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_8605800A4923C52258A8CE3989E18A7C93D22E8C" FOREIGN KEY ("bSide_NRCellDU") REFERENCES ties_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ADD CONSTRAINT "FK_8605800A4923C52258A8CE3989E18A7C93D22E8C" FOREIGN KEY ("bSide_NRCellDU") REFERENCES teiv_data."o-ran-smo-teiv-ran_NRCellDU" ("id");'
);
-CREATE INDEX IF NOT EXISTS "IDX_996D2C34C2458A6EFE8599C1A0E6942D3D288B7A" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_996D2C34C2458A6EFE8599C1A0E6942D3D288B7A" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F52FEEDBAF1B04D2D22EBAE051BB5125DF6A6968" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F52FEEDBAF1B04D2D22EBAE051BB5125DF6A6968" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D333FA5882890B7CD3599712FFFB2641B9E04C80" ON ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_D333FA5882890B7CD3599712FFFB2641B9E04C80" ON teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E896A9EB22A3F9F96CE75A271475316A98B629C8" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DD0D676834B12CA2F7E8219310998376A08D7F5F" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_7BF09D0227840279556AD27ACECB068705893D28" ON teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_9EDB5C47201FC82A4565BFED9EF369D6C6529B19" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_9EDB5C47201FC82A4565BFED9EF369D6C6529B19" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_BD96130868B69147B2F87B0D15F5829690DEF454" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_BD96130868B69147B2F87B0D15F5829690DEF454" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_CloudifiedNF_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_CloudifiedNF_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_F97E398B17532BCD9923CE0CF98E73227D890037" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F97E398B17532BCD9923CE0CF98E73227D890037" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1BCFD9635C4FA089EDC2E18FFEF56DBF3C5E7A52" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1BCFD9635C4FA089EDC2E18FFEF56DBF3C5E7A52" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_4055A796F223DD01411AFFB5AD97EEEAB6B2320C" ON ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_4055A796F223DD01411AFFB5AD97EEEAB6B2320C" ON teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_6433B9B7D69E51E828BDCFCAF59729EDCD10DA60" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6433B9B7D69E51E828BDCFCAF59729EDCD10DA60" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_BED5B5FAA75FEE133E27581EAA611B89D20F24E1" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_BED5B5FAA75FEE133E27581EAA611B89D20F24E1" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NFDeployment_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NFDeployment_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_072EB0C094138AB2D90F9CFBDA765B3B464EE86F" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_072EB0C094138AB2D90F9CFBDA765B3B464EE86F" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_31F185F0F700C0AE11C5A9B8D28DBF6E37538635" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_31F185F0F700C0AE11C5A9B8D28DBF6E37538635" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_46CDB369134F042EC021F7496DF721B49A9D43C0" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");
+CREATE INDEX IF NOT EXISTS "IDX_46CDB369134F042EC021F7496DF721B49A9D43C0" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_CLOUDIFIEDNF_COMPRISES_NFDEPLOYMENT");
-CREATE INDEX IF NOT EXISTS "IDX_4DD95BAED8503502101FEB9ECA25DDA8F371816C" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_4DD95BAED8503502101FEB9ECA25DDA8F371816C" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_sourceIds_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1EE98ACCAE5537752BD51A3D5F6429585CC543F6" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1EE98ACCAE5537752BD51A3D5F6429585CC543F6" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN (("REL_CD_classifiers_NFDEPLOYMENT_SERVES_MANAGEDELEMENT"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_39A292C3C42B34C2AD7C2A0FD087739C253B06FC" ON ties_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");
+CREATE INDEX IF NOT EXISTS "IDX_39A292C3C42B34C2AD7C2A0FD087739C253B06FC" ON teiv_data."o-ran-smo-teiv-cloud_NFDeployment" USING GIN ("REL_CD_decorators_NFDEPLOYMENT_SERVES_MANAGEDELEMENT");
-CREATE INDEX IF NOT EXISTS "IDX_1D7F9BD4B5BBF73CC3D06D949731DC169DDED26D" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1D7F9BD4B5BBF73CC3D06D949731DC169DDED26D" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_29702D5C8D0B9B20BFB534FA233B9D9FADC2E3A1" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_29702D5C8D0B9B20BFB534FA233B9D9FADC2E3A1" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_98A32BE3A8C1FF8CDEC95561DE4A74852FE70322" ON ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_98A32BE3A8C1FF8CDEC95561DE4A74852FE70322" ON teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_DC1829E4241BA7C9B3E5281AC0DF00A766F9452E" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DC1829E4241BA7C9B3E5281AC0DF00A766F9452E" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_CB29E8DDA990051B2A3DF193D8E4912F25D5FA0D" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_CB29E8DDA990051B2A3DF193D8E4912F25D5FA0D" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NodeCluster_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_NodeCluster_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_NodeCluster" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_1B8DF6B061E229E5B6AC796911E6C8C23ECAD585" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1B8DF6B061E229E5B6AC796911E6C8C23ECAD585" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_57EB74DEF745DE4BA9AAD8E735BACB71F2E8C417" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_57EB74DEF745DE4BA9AAD8E735BACB71F2E8C417" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudNamespace_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudNamespace_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_A7A50200F582AB86EF483F9BA74F999F17B7F653" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A7A50200F582AB86EF483F9BA74F999F17B7F653" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_sourceIds_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6EE081E80342904B676496DA42DFAEC3EDA2CE27" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6EE081E80342904B676496DA42DFAEC3EDA2CE27" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN (("REL_CD_classifiers_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_9AB8994DE0826F790D70614D4C52DD270AEF946B" ON ties_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");
+CREATE INDEX IF NOT EXISTS "IDX_9AB8994DE0826F790D70614D4C52DD270AEF946B" ON teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace" USING GIN ("REL_CD_decorators_OCLOUDNAMESPACE_DEPLOYED_ON_NODECLUSTER");
-CREATE INDEX IF NOT EXISTS "IDX_30C83E5F8447D28D8E2A73048DF751C886AF318B" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_30C83E5F8447D28D8E2A73048DF751C886AF318B" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_281A2DE604D25D6CFECB9B26D1FF70429FDB0FD0" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_281A2DE604D25D6CFECB9B26D1FF70429FDB0FD0" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudSite_CD_decorators" ON ties_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-cloud_OCloudSite_CD_decorators" ON teiv_data."o-ran-smo-teiv-cloud_OCloudSite" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_21B0F1FE632B6CB185C49BA6F00224068F443215" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_905011128A2C218B5352C19ED1FE9851F43EB911" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1C0CAFD80FDD6444044E3F76C7C0A7BDC35F9BC8" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_AntennaModule_CD_decorators" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_F497DEC01DA066CB09DA2AA7EDE3F4410078491B" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F497DEC01DA066CB09DA2AA7EDE3F4410078491B" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_17E417F7EF56809674BE1D5F5154DCCE01E00A96" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_17E417F7EF56809674BE1D5F5154DCCE01E00A96" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2321BFA482AD2700F41E2BA359F6EB00F47601B9" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE");
+CREATE INDEX IF NOT EXISTS "IDX_2321BFA482AD2700F41E2BA359F6EB00F47601B9" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE");
-CREATE INDEX IF NOT EXISTS "IDX_5ABDB19E55A6BDEF33855F14CB1B3B8CF457912C" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5ABDB19E55A6BDEF33855F14CB1B3B8CF457912C" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_83B6347C0C0A005D5E3D856D973D3322DFEDEA35" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_83B6347C0C0A005D5E3D856D973D3322DFEDEA35" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6C6FBD69F47F41970595A8775DC99CA0F5E894A1" ON ties_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE");
+CREATE INDEX IF NOT EXISTS "IDX_6C6FBD69F47F41970595A8775DC99CA0F5E894A1" ON teiv_data."o-ran-smo-teiv-equipment_AntennaModule" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE");
-CREATE INDEX IF NOT EXISTS "IDX_102A50584376DE25B6BBD7157594C607A5C957F2" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_102A50584376DE25B6BBD7157594C607A5C957F2" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_EEBF1BC3344E97988232825777AB13FAB6C4F3F0" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_EEBF1BC3344E97988232825777AB13FAB6C4F3F0" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_Site_CD_decorators" ON ties_data."o-ran-smo-teiv-equipment_Site" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-equipment_Site_CD_decorators" ON teiv_data."o-ran-smo-teiv-equipment_Site" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_DDD73D6F4004BF3A96AA118281EE3E565A922B47" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DDD73D6F4004BF3A96AA118281EE3E565A922B47" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_98AC4232BC02323E03416954215889CEE874A1E9" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_98AC4232BC02323E03416954215889CEE874A1E9" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-oam_ManagedElement_CD_decorators" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-oam_ManagedElement_CD_decorators" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_8065626F3F48D4E5A4285654739D3B26499E4C4E" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8065626F3F48D4E5A4285654739D3B26499E4C4E" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_634619CF7333EBC0AFDE990900B79220FC626EBA" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_634619CF7333EBC0AFDE990900B79220FC626EBA" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F15A070FC83B2E49223B4232E0BEB8931C2B7A4C" ON ties_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");
+CREATE INDEX IF NOT EXISTS "IDX_F15A070FC83B2E49223B4232E0BEB8931C2B7A4C" ON teiv_data."o-ran-smo-teiv-oam_ManagedElement" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_DEPLOYED_AS_CLOUDIFIEDNF");
-CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5FB80647AE3E5C0443A792618D65B9090EE2A3FC" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A94722FF7B95D8974B494793908B57B4E1A9743B" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_441B5C05448D63552C6414BD59C13641D8A4408D" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_CC3E208A4EE51D3B505416A599F36F3C99F466C8" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E7FFE8F4A166AA9A382A0659762FFEC313A9EB5C" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_AntennaCapability_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_AntennaCapability" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_plmnId" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("plmnId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_plmnId" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("plmnId");
-CREATE INDEX IF NOT EXISTS "IDX_0C443A16285D233F16966C2F0314CDC9D0F6D0B8" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0C443A16285D233F16966C2F0314CDC9D0F6D0B8" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E5930226819982DC0CFC1FA64FB3600647222435" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E5930226819982DC0CFC1FA64FB3600647222435" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellCU_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_6891C1BB8EE214340A362906C08955E8ACC1C597" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6891C1BB8EE214340A362906C08955E8ACC1C597" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D366F952FD4A52645C45A19CBFD02B8897FC1F18" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_D366F952FD4A52645C45A19CBFD02B8897FC1F18" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN (("REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5D761303176D3B9338784DFBEE0CEC51046ADC30" ON ties_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU");
+CREATE INDEX IF NOT EXISTS "IDX_5D761303176D3B9338784DFBEE0CEC51046ADC30" ON teiv_data."o-ran-smo-teiv-ran_NRCellCU" USING GIN ("REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU");
-CREATE INDEX IF NOT EXISTS "IDX_FFD60DD99D80C276F402E66546F5DACB2D81EE26" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FFD60DD99D80C276F402E66546F5DACB2D81EE26" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_C437D39632DC79BAB6AC4F0880826A05425F9C32" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_C437D39632DC79BAB6AC4F0880826A05425F9C32" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellDU_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRCellDU_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_B48D188E92ACBE9A2CAF8CD730A5DDFD7E086705" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B48D188E92ACBE9A2CAF8CD730A5DDFD7E086705" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A950BF337D5D820E5B39AC3F1B1AC09C062F30C9" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A950BF337D5D820E5B39AC3F1B1AC09C062F30C9" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F494CB3BA4C726D4C45D53B1EF62E1E26811CCEF" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU");
+CREATE INDEX IF NOT EXISTS "IDX_F494CB3BA4C726D4C45D53B1EF62E1E26811CCEF" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU");
-CREATE INDEX IF NOT EXISTS "IDX_6325926B4D2FDD1FBBB34250DABEA5E7229FF9F5" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6325926B4D2FDD1FBBB34250DABEA5E7229FF9F5" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7CB4A7724F68D1CB2D12E8DE779BA9103F7DBE0A" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_7CB4A7724F68D1CB2D12E8DE779BA9103F7DBE0A" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN (("REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0A03C47C13AD3B5C84D3D8081493D670E9CBDCD1" ON ties_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_NRCELLDU");
+CREATE INDEX IF NOT EXISTS "IDX_0A03C47C13AD3B5C84D3D8081493D670E9CBDCD1" ON teiv_data."o-ran-smo-teiv-ran_NRCellDU" USING GIN ("REL_CD_decorators_SECTOR_GROUPS_NRCELLDU");
-CREATE INDEX IF NOT EXISTS "IDX_8E34EC0B1DE7DDCE3B32ADD85B11E15F95C5644E" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8E34EC0B1DE7DDCE3B32ADD85B11E15F95C5644E" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_050A80BEEF775E4D3CE216F282F23DB99DA2D798" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_050A80BEEF775E4D3CE216F282F23DB99DA2D798" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRSectorCarrier_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NRSectorCarrier_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_7BFD17A71AB1B7765FE6431DA4E66C2EDE88AC3B" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_7BFD17A71AB1B7765FE6431DA4E66C2EDE88AC3B" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_ED50A5139F1449DBAD8DA10D45F5A5BF819EACBA" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_ED50A5139F1449DBAD8DA10D45F5A5BF819EACBA" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2ADB5C6DCAEE8811FB1CA8FD9EB53381F35FCB70" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER");
+CREATE INDEX IF NOT EXISTS "IDX_2ADB5C6DCAEE8811FB1CA8FD9EB53381F35FCB70" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER");
-CREATE INDEX IF NOT EXISTS "IDX_1F27C515A028616FAC422A02ABBEC402D5DBB2E5" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_1F27C515A028616FAC422A02ABBEC402D5DBB2E5" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B975D24291849007D4AA6686C5D3983885D5C884" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B975D24291849007D4AA6686C5D3983885D5C884" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_902B73F741160B9D4FBF62406D3D9ABBECAD8BE7" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY");
+CREATE INDEX IF NOT EXISTS "IDX_902B73F741160B9D4FBF62406D3D9ABBECAD8BE7" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY");
-CREATE INDEX IF NOT EXISTS "IDX_986B2223E72FF79237337329F4C3BB9DA9025A34" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_986B2223E72FF79237337329F4C3BB9DA9025A34" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_FC70CCFDC1359B698BBBE5CA7AA158F0AF693461" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FC70CCFDC1359B698BBBE5CA7AA158F0AF693461" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN (("REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5AB1D780E57D940C42BAD29772E9E2B6C63498A0" ON ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");
+CREATE INDEX IF NOT EXISTS "IDX_5AB1D780E57D940C42BAD29772E9E2B6C63498A0" ON teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" USING GIN ("REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_pLMNId" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("pLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_pLMNId" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("pLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_E4E40B26C322AF63A662706AF8B0B36E1043B793" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E4E40B26C322AF63A662706AF8B0B36E1043B793" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_8BCCF388DFC8652AD5CD0675C64F49D2D2EDC7A1" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8BCCF388DFC8652AD5CD0675C64F49D2D2EDC7A1" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_NearRTRICFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_B608D8F6B8A79097EA61A1B4777A96CD3D2D1E98" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_B608D8F6B8A79097EA61A1B4777A96CD3D2D1E98" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0ECC814A408874C9F8E73EEE3968984A6345A606" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0ECC814A408874C9F8E73EEE3968984A6345A606" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B10FD045A6C3E169953CCC38CC2D801FCE15A75F" ON ties_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_B10FD045A6C3E169953CCC38CC2D801FCE15A75F" ON teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_NEARRTRICFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_pLMNId" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("pLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_pLMNId" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("pLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_84A29F8571860AC5A7BD1A99923485ECB6A3939D" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_84A29F8571860AC5A7BD1A99923485ECB6A3939D" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_8D9862DBF6A721FABAEA4204E04B374692C1C5B8" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8D9862DBF6A721FABAEA4204E04B374692C1C5B8" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUCPFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_4C6B5CB5CF018656DC8191CE6FE3B9DA2CD0C819" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_4C6B5CB5CF018656DC8191CE6FE3B9DA2CD0C819" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_21F2560C8330A795E8AFB54C6D31CDCF6CCD3070" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_21F2560C8330A795E8AFB54C6D31CDCF6CCD3070" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_D856E84F300B6711E81931AE1CBC8AD905FA384F" ON ties_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_D856E84F300B6711E81931AE1CBC8AD905FA384F" ON teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_9122DAA7A60DB585BE5ECA68A2EDB9ABF1E7156A" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("pLMNIdList"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_9122DAA7A60DB585BE5ECA68A2EDB9ABF1E7156A" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("pLMNIdList"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6C81B2BBFCFE94C87598869A2099E04571202BA7" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_6C81B2BBFCFE94C87598869A2099E04571202BA7" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_25E4BCFBF8F5344DFC60BCB159FA873FFC8109E9" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_25E4BCFBF8F5344DFC60BCB159FA873FFC8109E9" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUUPFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_OCUUPFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_50209F1FF59B49F79FF194887B631994F2B5148A" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_50209F1FF59B49F79FF194887B631994F2B5148A" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_3346DFB8C2B7D6EEA12B7C1DE4A84B058C24A657" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_3346DFB8C2B7D6EEA12B7C1DE4A84B058C24A657" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_ADD3393C27589066C4993A3491436C6FB57A539F" ON ties_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_ADD3393C27589066C4993A3491436C6FB57A539F" ON teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_dUpLMNId" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("dUpLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_dUpLMNId" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("dUpLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_73790DA8FF6365B752DC8B399893AC6DE8CF26C4" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_73790DA8FF6365B752DC8B399893AC6DE8CF26C4" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5CE9EDE1F25AB2D880A41BC5D297FDBE668182E8" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5CE9EDE1F25AB2D880A41BC5D297FDBE668182E8" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ODUFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_0E5C91A3252FBAFA72DB644D4E949A379F0CB910" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0E5C91A3252FBAFA72DB644D4E949A379F0CB910" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5DD192861541E0EB2776C6BFE34B327FF27F93C3" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5DD192861541E0EB2776C6BFE34B327FF27F93C3" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0B9AC962B1E07740CE43D912B5FBC54E0B39DD24" ON ties_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_0B9AC962B1E07740CE43D912B5FBC54E0B39DD24" ON teiv_data."o-ran-smo-teiv-ran_ODUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_D0D11CFAA917F4FA12748A041A34D2B39A3AD707" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_D0D11CFAA917F4FA12748A041A34D2B39A3AD707" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2A5AAAD13FDCFF7F2958005C22937366F6604A0D" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_2A5AAAD13FDCFF7F2958005C22937366F6604A0D" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ORUFunction_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_ORUFunction_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_AF235FB2C9CCA99D94CC4038669EDD1BB6C7B2DF" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_AF235FB2C9CCA99D94CC4038669EDD1BB6C7B2DF" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DA79A3F946C1F4E8D05B4D6ADEF5E4C65E47635E" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DA79A3F946C1F4E8D05B4D6ADEF5E4C65E47635E" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN (("REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ORUFUNCTION"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_7B916E1753D2860DF434831CF1E9697ED9973C8F" ON ties_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION");
+CREATE INDEX IF NOT EXISTS "IDX_7B916E1753D2860DF434831CF1E9697ED9973C8F" ON teiv_data."o-ran-smo-teiv-ran_ORUFunction" USING GIN ("REL_CD_decorators_MANAGEDELEMENT_MANAGES_ORUFUNCTION");
-CREATE INDEX IF NOT EXISTS "IDX_E234B43A7CD7843672F08F2197AB46A2A50BECB0" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E234B43A7CD7843672F08F2197AB46A2A50BECB0" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_19C19556F9714850389595E0A16218FA229205FE" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_19C19556F9714850389595E0A16218FA229205FE" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_Sector_CD_decorators" ON ties_data."o-ran-smo-teiv-ran_Sector" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_GIN_o-ran-smo-teiv-ran_Sector_CD_decorators" ON teiv_data."o-ran-smo-teiv-ran_Sector" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_10BCC6B44663A8D5431668BEE5DF80423420C616" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_10BCC6B44663A8D5431668BEE5DF80423420C616" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_03F9C6A2FA82614A788443AC6044BCED2401C465" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_03F9C6A2FA82614A788443AC6044BCED2401C465" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0867A1E865A904F4BB513948DAEB60412BE67DF3" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_0867A1E865A904F4BB513948DAEB60412BE67DF3" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_64B7C127C01069009A3FB13592DAE249B0029283" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_64B7C127C01069009A3FB13592DAE249B0029283" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_69152691D777DDB084C053915D4A4B15F7F8B3EB" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_69152691D777DDB084C053915D4A4B15F7F8B3EB" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_3AB53A0DB6DC4B4C8BB6194D6D487EBDC3D0E88F" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_3AB53A0DB6DC4B4C8BB6194D6D487EBDC3D0E88F" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_5996D077978D38D0C1A951A262F1F7E1E339F052" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5996D077978D38D0C1A951A262F1F7E1E339F052" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F4A1999634924C7E4D1CBD05E83996A5B1262A8A" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F4A1999634924C7E4D1CBD05E83996A5B1262A8A" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_5BAC6D2F05A63FDE27F082E8C8F4D766C145E835" ON ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_5BAC6D2F05A63FDE27F082E8C8F4D766C145E835" ON teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_0E1BE8724BEBB21C5AE3986BE150BEC8F8CD903E" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0E1BE8724BEBB21C5AE3986BE150BEC8F8CD903E" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_F93AD0AE5C6940EE73D0B661A2E2E5BB10B3772C" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_F93AD0AE5C6940EE73D0B661A2E2E5BB10B3772C" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_319FDFF6C9E6BC1D922F0A2AFEAAC294E520F753" ON ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_319FDFF6C9E6BC1D922F0A2AFEAAC294E520F753" ON teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" USING GIN ("CD_decorators");
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUUPFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-ran_ODUFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_ODUFunction";
-ANALYZE ties_data."o-ran-smo-teiv-equipment_Site";
+ANALYZE teiv_data."o-ran-smo-teiv-equipment_Site";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NODECLUSTER_LOCATED_AT_OCLOUDSITE";
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_ODUFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NodeCluster";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NodeCluster";
-ANALYZE ties_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-cloud-ran_NFDEPLOYMENT_SERVES_OCUCPFUNCTION";
-ANALYZE ties_data."o-ran-smo-teiv-ran_OCUCPFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction";
-ANALYZE ties_data."o-ran-smo-teiv-oam_ManagedElement";
+ANALYZE teiv_data."o-ran-smo-teiv-oam_ManagedElement";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRCellDU";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRCellDU";
-ANALYZE ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU";
+ANALYZE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NearRTRICFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NearRTRICFunction";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_CloudifiedNF";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_CloudifiedNF";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NFDeployment";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NFDeployment";
-ANALYZE ties_data."o-ran-smo-teiv-ran_AntennaCapability";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_AntennaCapability";
-ANALYZE ties_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82";
+ANALYZE teiv_data."3C2E2CE7BDF8321BC824B6318B190690F58DBB82";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_NFDEPLOYMENT_DEPLOYED_ON_OCLOUDNAMESPACE";
-ANALYZE ties_data."o-ran-smo-teiv-equipment_AntennaModule";
+ANALYZE teiv_data."o-ran-smo-teiv-equipment_AntennaModule";
-ANALYZE ties_data."o-ran-smo-teiv-ran_ORUFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_ORUFunction";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRCellCU";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRCellCU";
-ANALYZE ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
+ANALYZE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402";
-ANALYZE ties_data."o-ran-smo-teiv-ran_OCUUPFunction";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction";
-ANALYZE ties_data."o-ran-smo-teiv-ran_NRSectorCarrier";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier";
-ANALYZE ties_data."o-ran-smo-teiv-ran_Sector";
+ANALYZE teiv_data."o-ran-smo-teiv-ran_Sector";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_OCloudSite";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_OCloudSite";
-ANALYZE ties_data."o-ran-smo-teiv-cloud_OCloudNamespace";
+ANALYZE teiv_data."o-ran-smo-teiv-cloud_OCloudNamespace";
COMMIT;
BEGIN;
-DROP SCHEMA IF EXISTS ties_model cascade;
-CREATE SCHEMA IF NOT EXISTS ties_model;
-ALTER SCHEMA ties_model OWNER TO :pguser;
+DROP SCHEMA IF EXISTS teiv_model cascade;
+CREATE SCHEMA IF NOT EXISTS teiv_model;
+ALTER SCHEMA teiv_model OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-CREATE TABLE IF NOT EXISTS ties_model.hash_info (
+CREATE TABLE IF NOT EXISTS teiv_model.hash_info (
"name" TEXT PRIMARY KEY,
"hashedValue" VARCHAR(63) NOT NULL,
"type" VARCHAR(511)
);
-CREATE TABLE IF NOT EXISTS ties_model.module_reference (
+CREATE TABLE IF NOT EXISTS teiv_model.module_reference (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"domain" TEXT,
"content" TEXT NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_model.entity_info (
+CREATE TABLE IF NOT EXISTS teiv_model.entity_info (
"storedAt" TEXT PRIMARY KEY,
"name" TEXT NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
"attributeNames" jsonb DEFAULT '[]'::jsonb,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_model.relationship_info (
+CREATE TABLE IF NOT EXISTS teiv_model.relationship_info (
"name" TEXT NOT NULL,
"aSideAssociationName" TEXT NOT NULL,
"aSideMOType" TEXT NOT NULL,
"connectSameEntity" BOOLEAN NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
PRIMARY KEY ("name", "moduleReferenceName"),
- FOREIGN KEY ("aSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("bSideModule") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_model.module_reference ("name") ON DELETE CASCADE
+ FOREIGN KEY ("aSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("bSideModule") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE,
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_model.module_reference ("name") ON DELETE CASCADE
);
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
CD_classifiers CD_classifiers COLUMN
CD_decorators CD_decorators COLUMN
CD_sourceIds CD_sourceIds COLUMN
verticalBeamWidth verticalBeamWidth COLUMN
\.
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+COPY teiv_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
_3gpp-common-yang-extensions urn:3gpp:sa5:_3gpp-common-yang-extensions \N [] 2019-06-23 bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewogIHlhbmctdmVyc2lvbiAxLjE7CiAgbmFtZXNwYWNlIHVybjozZ3BwOnNhNTpfM2dwcC1jb21tb24teWFuZy1leHRlbnNpb25zIDsKICBwcmVmaXggeWV4dDNncHAgOwoKICBvcmdhbml6YXRpb24gIjNHUFAgU0E1IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZHVsZSBkZWZpbmVzIFlBTkcgZXh0ZW5zaW9ucyBuZWVkZWQgCiAgICAzR1BQIFlBTkcgbW9kZWxpbmcuCgogICAgQ29weXJpZ2h0IChjKSAyMDE5IDNHUFAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgRXh0ZW5zaW9ucyBNVVNUIGJlIGRlZmluZWQgd2l0aCB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpbiB0aGUKICAgIGRlc2NyaXB0aW9uIHN0YXRlbWVudDoKICAgICAgICAtIFdoYXQgaXMgdGhpcyBzdGF0ZW1lbnQuCiAgICAgICAgLSBOZXdsaW5lLAogICAgICAgIC0gVGhpcyBzdGF0ZW1lbnQgY2FuIGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSB4eHggc3RhdGVtZW50cyB3aXRoCiAgICAgICAgY2FyZGluYWxpdHkgeC4ueS4KICAgICAgICAtIFRoaXMgc3RhdGVtZW50IGNhbiBoYXZlIHRoZSBmb2xsb3dpbmcgc3Vic3RhdGVtZW50cyB3aXRoCiAgICAgICAgY2FyZGluYWxpdHkgeC4ueS4KICAgICAgICAtIE5ld2xpbmUKICAgICAgICAtIElzIGNoYW5naW5nIHRoaXMgc3RhdGVtZW50IGFuIGVkaXRvcmlhbCwgQkMoYmFja3dhcmRzIGNvbXBhdGlibGUpIAogICAgICAgIG9yIE5CQyhub24tQkMpIGNoYW5nZT8KICAgICAgICAtIE5ld2xpbmUuCiAgICAgICAgLSBUaGUgYXJndW1lbnQgaXRzIG1lYW5pbmcgYW5kIHR5cGUuIFByZWZlcmFibHkgdXNlIFlBTkcgdHlwZXMgYW5kCiAgICAgICAgICBjb25zdHJhaW50cyB0byBkZWZpbmUgdGhlIGFyZ3VtZW50J3MgdHlwZS4KCiAgICBBbnkgZXh0ZW5zaW9uIHN0YXRlbWVudCBjYW4gYmUgYWRkZWQgd2l0aCBhCiAgICBkZXZpYXRpb24vZGV2aWF0ZSBhZGQgc3RhdGVtZW50LiBJbiB0aGlzIGNhc2UgdGhlIHJlc3RyaWN0aW9uIGFib3V0CiAgICB0aGUgcGFyZW50IHN0YXRlbWVudCBvZiB0aGUgZXh0ZW5zaW9uIFNIQUxMIGJlIGV2YWx1YXRlZCBiYXNlZCBvbiB0aGUKICAgIHRhcmdldCBvZiB0aGUgZGV2aWF0aW9uIHN0YXRlbWVudC4KCiAgICBTdXBwb3J0IGZvciB0aGlzIG1vZHVsZSBkb2VzIG5vdCBtZWFuIHRoYXQgYSBZQU5HIHNlcnZlciBpbXBsZW1lbnRzCiAgICBzdXBwb3J0IGZvciBlYWNoIG9mIHRoZXNlIGV4dGVuc2lvbnMuCiAgICBJbXBsZW1lbnRlcnMgb2YgZWFjaCBzcGVjaWZpYyBtb2R1bGUgdXNpbmcgYW4gZXh0ZW5zaW9ucyBNVVNUIGNoZWNrCiAgICBpZiB0aGUgc2VydmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIHVzZWQgZXh0ZW5zaW9uLgogICAgTm90ZTogbW9kdWxlcyB1c2UgbWFueSBleHRlbnNpb25zIHdoaWNoIGluZGl2aWR1YWwKICAgIGltcGxlbWVudGF0aW9ucyBNQVkgb3IgTUFZIE5PVCBzdXBwb3J0LgogICAgSWYgc3VwcG9ydCBmb3IgYW4gZXh0ZW5zaW9uIGlzIG1pc3NpbmcgdGhlIGV4dGVuc2lvbiBzdGF0ZW1lbnQgbmVlZHMKICAgIGluZGl2aWR1YWwgaGFuZGxpbmcgb3IgaXQgU0hPVUxEIGJlIHJlbW92ZWQgZnJvbSB0aGUgbW9kdWxlIHVzaW5nCiAgICB0aGUgZXh0ZW5zaW9uIGUuZy4gd2l0aCBhIGRldmlhdGlvbi4KICAgICAgICAgICI7CgogIHJldmlzaW9uICIyMDE5LTA2LTIzIiB7CiAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCB2ZXJzaW9uIjsKICB9CgogIGV4dGVuc2lvbiBpblZhcmlhbnQgewogICAgZGVzY3JpcHRpb24KICAgICAgIkluZGljYXRlcyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlIGRhdGEgbm9kZSBjYW4gb25seSBiZSBzZXQgd2hlbiBpdHMKICAgICAgcGFyZW50IGRhdGEgbm9kZSBpcyBiZWluZyBjcmVhdGVkLiBUbyBjaGFuZ2UgdGhlIHZhbHVlIGFmdGVyIHRoYXQsIHRoZQogICAgICBwYXJlbnQgZGF0YSBub2RlIG11c3QgYmUgZGVsZXRlZCBhbmQgcmVjcmVhdGVkIHdpdGggdGhlIGRhdGEgbm9kZQogICAgICBoYXZpbmcgdGhlIG5ldyB2YWx1ZS4KCiAgICAgIEl0IGlzIHVubmVjZXNzYXJ5IHRvIHVzZSBhbmQgTVVTVCBOT1QgYmUgdXNlZCBmb3Iga2V5IGxlYWZzLgoKICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgYSBsZWFmLCBsZWFmLWxpc3QsIGxpc3QgCiAgICAgIHN0YXRlbWVudHMgdGhhdCBpcyBjb25maWc9dHJ1ZS4KICAgICAgWmVybyBvciBvbmUgaW5WYXJpYW50IHN0YXRlbWVudCBpcyBhbGxvd2VkIHBlciBwYXJlbnQgc3RhdGVtZW50LgogICAgICBOTyBzdWJzdGF0ZW1lbnRzIGFyZSBhbGxvd2VkLgogICAgICAgICAgICAKICAgICAgQWRkaW5nIHRoaXMgc3RhdGVtZW50IGlzIGFuIE5CQyBjaGFuZ2UsIHJlbW92aW5nIGl0IGlzIEJDLiI7CiAgfQoKICBleHRlbnNpb24gaW5pdGlhbC12YWx1ZSB7CiAgICBkZXNjcmlwdGlvbiAiU3BlY2lmaWVzIGEgdmFsdWUgdGhhdCB0aGUgc3lzdGVtIHdpbGwgc2V0IGZvciBhIGxlYWYKICAgICAgbGVhZi1saXN0IGlmIGEgdmFsdWUgaXMgbm90IHNwZWNpZmllZCBmb3IgaXQgd2hlbiBpdHMgcGFyZW50IGxpc3QKICAgICAgb3IgY29udGFpbmVyIGlzIGNyZWF0ZWQuIFRoZSB2YWx1ZSBoYXMgbm8gZWZmZWN0IGluIGFueSBvdGhlcgogICAgICBtb2RpZmljYXRpb24gZS5nLiBjaGFuZ2luZyBvciByZW1vdmluZyB0aGUgdmFsdWUuCgogICAgICBUaGUgZGVzY3JpcHRpb24gc3RhdGVtZW50IG9mIHRoZSBwYXJlbnQgc3RhdGVtZW50IFNIT1VMRCBjb250YWluCiAgICAgIHRoZSBsYWJlbCAnSW5pdGlhbC12YWx1ZTogJyBmb2xsb3dlZCBieSB0aGUgdGV4dCBmcm9tIHRoZSBhcmd1bWVudC4KCiAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgbGVhZiBvciBsZWFmLWxpc3QuCiAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBOT1QgYmUgcHJlc2VudCBpZiB0aGUgbGVhZiBvciB0aGUgbGVhZi1saXN0IAogICAgICBoYXMgYSBkZWZhdWx0IHN0YXRlbWVudCBvciB0aGUgdHlwZSB1c2VkIGZvciB0aGUgZGF0YSBub2RlIAogICAgICBoYXMgYSBkZWZhdWx0IHZhbHVlLgogICAgICBUaGUgc3RhdGVtZW50IE1VU1QgTk9UIGJlIHVzZWQgZm9yIGNvbmZpZz1mYWxzZSBkYXRhIG9yIGluIGFuIAogICAgICBhY3Rpb24sIHJwYyBvciBub3RpZmljYXRpb24uCiAgICAgIFplcm8gb3Igb25lIGluaXRpYWwtdmFsdWUgc3RhdGVtZW50cyBhcmUgYWxsb3dlZCBmb3IgYSBsZWFmIHBhcmVudAogICAgICBzdGF0ZW1lbnQuIFplcm8gb3IgbW9yZSBpbml0aWFsLXZhbHVlIHN0YXRlbWVudHMgYXJlIGFsbG93ZWQgZm9yIGEKICAgICAgbGVhZi1saXN0IHBhcmVudCBzdGF0ZW1lbnQuIElmIHRoZSBsZWFmLWxpc3QgaXMgb3JkZXJlZC1ieSB1c2VyLCB0aGUKICAgICAgaW5pdGlhbCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgb3JkZXIgdGhleSBhcHBlYXIgaW4gdGhlIFlBTkcgZGVmaW5pdGlvbi4KICAgICAgTk8gc3Vic3RhdGVtZW50cyBhcmUgYWxsb3dlZC4KCiAgICAgIEFsd2F5cyBjb25zaWRlciB1c2luZyBhIFlBTkctZGVmYXVsdCBzdGF0ZW1lbnQgaW5zdGVhZC4KCiAgICAgIE1vZGlmaWNhdGlvbiBvZiB0aGUgaW5pdGlhbC12YWx1ZSBpcyBhIG5vbi1iYWNrd2FyZHMtY29tcGF0aWJsZSBjaGFuZ2UuCgogICAgICBUaGUgYXJndW1lbnQgc3BlY2lmaWVzIGEgc2luZ2xlIGluaXRpYWwgdmFsdWUgZm9yIGEgbGVhZiBvciBsZWFmLWxpc3QuCiAgICAgIFRoZSB2YWx1ZSBNVVNUIGJlIHBhcnQgb2YgdGhlIHZhbHVlc3BhY2Ugb2YgdGhlIGxlYWYvbGVhZi1saXN0LgogICAgICBJdCBmb2xsb3dzIHRoZSBzYW1lIHJ1bGVzIGFzIHRoZSBhcmd1bWVudCBvZiB0aGUgZGVmYXVsdCBzdGF0ZW1lbnQuIjsKCiAgICBhcmd1bWVudCAiaW5pdGlhbC12YWx1ZSI7CiAgfQp9
_3gpp-common-yang-types urn:3gpp:sa5:_3gpp-common-yang-types \N [] 2022-07-26 bW9kdWxlIF8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOjNncHA6c2E1Ol8zZ3BwLWNvbW1vbi15YW5nLXR5cGVzIjsKICBwcmVmaXggInR5cGVzM2dwcCI7CiAgCiAgaW1wb3J0IGlldGYtaW5ldC10eXBlcyB7IHByZWZpeCBpbmV0OyB9CiAgaW1wb3J0IGlldGYteWFuZy10eXBlcyB7IHByZWZpeCB5YW5nOyB9CgogIG9yZ2FuaXphdGlvbiAiM0dQUCBTQTUiOwogIGNvbnRhY3QgImh0dHBzOi8vd3d3LjNncHAub3JnL0R5bmFSZXBvcnQvVFNHLVdHLS1TNS0tb2ZmaWNpYWxzLmh0bT9JdGVtaWQ9NDY0IjsKICBkZXNjcmlwdGlvbiAiVGhlIG1vZGVsIGRlZmluZXMgYSBZQU5HIG1hcHBpbmcgb2YgdGhlIHRvcCBsZXZlbCAKICAgIGluZm9ybWF0aW9uIGNsYXNzZXMgdXNlZCBmb3IgbWFuYWdlbWVudCBvZiA1RyBuZXR3b3JrcyBhbmQgCiAgICBuZXR3b3JrIHNsaWNpbmcuIjsKICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjIzIjsKCiAgcmV2aXNpb24gMjAyMi0wNy0yNiB7IHJlZmVyZW5jZSBDUi0wMTgwIDsgfQogIHJldmlzaW9uIDIwMjItMDItMDkgeyByZWZlcmVuY2UgIkNSLTAxNDQiOyB9CiAgcmV2aXNpb24gMjAyMS0xMS0wMSB7IHJlZmVyZW5jZSAiQ1ItMDE0MSI7IH0KICAKICByZXZpc2lvbiAyMDIxLTA5LTMwIHsKICAgIGRlc2NyaXB0aW9uICJBZGRlZCBMb25naXR1ZGUsIExhdGl0dWRlLCBUZW50aE9mRGVncmVlcywgT25PZmYuIjsKICAgIHJlZmVyZW5jZSAiQ1ItMDEzOCI7CiAgfQoKICByZXZpc2lvbiAyMDIwLTExLTA2IHsKICAgIGRlc2NyaXB0aW9uICJSZW1vdmVkIGluY29ycmVjdCBTLU5TU0FJIGRlZmluaXRpb25zLiI7CiAgICByZWZlcmVuY2UgIkNSLTAxMTgiOwogIH0KCiAgcmV2aXNpb24gMjAyMC0wMy0xMCB7CiAgICBkZXNjcmlwdGlvbiAiUmVtb3ZlZCBmYXVsdHkgd2hlbiBzdGF0ZW1lbnRzLiI7CiAgICByZWZlcmVuY2UgIlNQLTIwMDIyOSI7CiAgfQogCiAgcmV2aXNpb24gMjAxOS0xMC0yNSB7CiAgICBkZXNjcmlwdGlvbiAiQWRkZWQgTWFuYWdlZE5GUHJvZmlsZS4iOwogICAgcmVmZXJlbmNlICJTNS0xOTQ0NTciOwogIH0KCiAgcmV2aXNpb24gMjAxOS0xMC0xNiB7CiAgICBkZXNjcmlwdGlvbiAiQWRkZWQgU0FQIGFuZCB1c2FnZVN0YXRlLiI7CiAgICByZWZlcmVuY2UgIlM1LTE5MzUxOCI7CiAgfQoKICByZXZpc2lvbiAyMDE5LTA2LTIzIHsKICAgIHJlZmVyZW5jZSAgIkluaXRpYWwgdmVyc2lvbi4iOwogIH0KCiAgdHlwZWRlZiBFbmFibGVkRGlzYWJsZWQgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gRElTQUJMRUQgOwogICAgICBlbnVtIEVOQUJMRUQgOwogICAgfQogIH0KICAKICBncm91cGluZyBQcm9jZXNzTW9uaXRvciB7CiAgICBkZXNjcmlwdGlvbiAiUHJvdmlkZXMgYXR0cmlidXRlcyB0byBtb25pdG9yIHRoZSBwcm9ncmVzcyBvZiBwcm9jZXNzZXMgCiAgICAgIHdpdGggc3BlY2lmaWMgcHVycG9zZSBhbmQgbGltaXRlZCBsaWZldGltZSBydW5uaW5nIG9uIE1uUyBwcm9kdWNlcnMuIAogICAgICBJdCBtYXkgYmUgdXNlZCBhcyBkYXRhIHR5cGUgZm9yIGRlZGljYXRlZCBwcm9ncmVzcyBtb25pdG9yIGF0dHJpYnV0ZXMgCiAgICAgIHdoZW4gc3BlY2lmeWluZyB0aGUgbWFuYWdlbWVudCByZXByZXNlbnRhdGlvbiBvZiB0aGVzZSBwcm9jZXNzZXMuIAogICAgICBUaGUgYXR0cmlidXRlcyBpbiB0aGlzIGNsYXVzZSBhcmUgZGVmaW5lZCBpbiBhIGdlbmVyaWMgd2F5LiAKICAgICAgRm9yIHNvbWUgYXR0cmlidXRlcyBzcGVjaWFsaXNhdGlvbnMgbWF5IGJlIHByb3ZpZGVkIHdoZW4gc3BlY2lmeWluZyBhIAogICAgICBjb25jcmV0ZSBwcm9jZXNzIHJlcHJlc2VudGF0aW9uLgoKICAgICAgSWYgYSBtYW5hZ2VtZW50IG9wZXJhdGlvbiBvbiBzb21lIElPQ3MgdHJpZ2dlcnMgYW4gYXNzb2NpYXRlZCAKICAgICAgYXN5bmNocm9ub3VzIHByb2Nlc3MgKHdob3NlIHByb2dyZXNzIHNoYWxsIGJlIG1vbml0b3JlZCksIHRoaXMgc2hvdWxkIAogICAgICBhbHNvIHJlc3VsdCBpbiBjcmVhdGluZyBhbiBhdHRyaWJ1dGUgbmFtZWQgJ3Byb2Nlc3NNb25pdG9yJyAob2YgdHlwZSAKICAgICAgJ1Byb2Nlc3NNb25pdG9yJykgaW4gdGhlc2UgSU9DKHMpLiBUaGUgcHJvY2Vzc01vbml0b3IgYXR0cmlidXRlIG1heSBiZSAKICAgICAgYWNjb21wYW5pZWQgYnkgdXNlLWNhc2Ugc3BlY2lmaWMgYWRkaXRpb25hbCBkYXRhIGl0ZW1zLgoKICAgICAgVGhlIHByb2dyZXNzIG9mIHRoZSBwcm9jZXNzIGlzIGRlc2NyaWJlZCBieSB0aGUgJ3N0YXR1cycgYW5kIAogICAgICAncHJvZ3Jlc3NQZXJjZW50YWdlJyBhdHRyaWJ1dGVzLiBBZGRpdGlvbmFsIHRleHR1YWwgcXVhbGlmaWNhdGlvbnMgZm9yIAogICAgICB0aGUgJ3N0YXR1cycgYXR0cmlidXRlIG1heSBiZSBwcm92aWRlZCBieSB0aGUgJ3Byb2dyZXNzU3RhdGVJbmZvJyBhbmQgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZXMuCgogICAgICBXaGVuIHRoZSBwcm9jZXNzIGlzIGluc3RhbnRpYXRlZCwgdGhlICdzdGF0dXMnIGlzIHNldCB0byAnTk9UX1JVTk5JTkcnIAogICAgICBhbmQgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvICcwJy4gVGhlIE1uUyBwcm9kdWNlciBkZWNpZGVzIHdoZW4gdG8gCiAgICAgIHN0YXJ0IGV4ZWN1dGluZyB0aGUgcHJvY2VzcyBhbmQgdG8gdHJhbnNpdGlvbiBpbnRvIHRoZSAnUlVOTklORycgc3RhdGUuIAogICAgICBUaGlzIHRpbWUgaXMgY2FwdHVyZWQgaW4gdGhlICdzdGFydFRpbWUnIGF0dHJpYnV0ZS4gQWx0ZXJuYXRpdmVseSwgdGhlIAogICAgICBwcm9jZXNzIG1heSBzdGFydCB0byBleGVjdXRlIGRpcmVjdGx5IHVwb24gaXRzIGluc3RhbnRpYXRpb24uIE9uZSAKICAgICAgYWx0ZXJuYXRpdmUgbXVzdCBiZSBzZWxlY3RlZCB3aGVuIHVzaW5nIHRoaXMgZGF0YSB0eXBlLgoKICAgICAgRHVyaW5nIHRoZSAnUlVOTklORycgc3RhdGUgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIGF0dHJpYnV0ZSBtYXkgYmUgCiAgICAgIHJlcGVhdGVkbHkgdXBkYXRlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIHRoaXMgYXR0cmlidXRlIGlzIHN1YmplY3QgdG8gCiAgICAgIGZ1cnRoZXIgc3BlY2lhbGlzYXRpb24uIFRoZSAncHJvZ3Jlc3NJbmZvJyBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gCiAgICAgIHByb3ZpZGUgYWRkaXRpb25hbCB0ZXh0dWFsIGluZm9ybWF0aW9uIGluIHRoZSAnTk9UX1JVTk5JTkcnLCAnQ0FOQ0VMTElORycgCiAgICAgIGFuZCAnUlVOTklORycgc3RhdGVzLiBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mIAogICAgICAncHJvZ3Jlc3NTdGF0ZUluZm8nIG1heSBiZSBwcm92aWRlZCB3aGVyZSB0aGlzIGRhdGEgdHlwZSBpcyAKICAgICAgdXNlZC4KCiAgICAgIFVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBwcm9jZXNzLCB0aGUgJ3N0YXR1cycgYXR0cmlidXRlIGlzIHNldCAKICAgICAgdG8gJ0ZJTklTSEVEJywgdGhlICdwcm9ncmVzc1BlcmNlbnRhZ2UnIHRvIDEwMCUuIFRoZSB0aW1lIGlzIGNhcHR1cmVkIGluIAogICAgICB0aGUgJ2VuZFRpbWUnIGF0dHJpYnV0ZS4gQWRkaXRpb25hbCB0ZXh0dWFsIGluZm9ybWF0aW9uIG1heSBiZSBwcm92aWRlZCAKICAgICAgaW4gdGhlICdyZXN1bHRTdGF0ZUluZm8nIGF0dHJpYnV0ZS4gVGhlIHR5cGUgb2YgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIGluIHRoaXMgZGF0YSB0eXBlIGRlZmluaXRpb24gaXMgJ1N0cmluZycuIAogICAgICBGdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIG9mICdyZXN1bHRTdGF0ZUluZm8nIG1heSBiZSBwcm92aWRlZCAKICAgICAgd2hlcmUgdGhpcyBkYXRhIHR5cGUgaXMgdXNlZC4KCiAgICAgIEluIGNhc2UgdGhlIHByb2Nlc3MgZmFpbHMgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LCB0aGUgJ3N0YXR1cycgCiAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gJ0ZBSUxFRCcgb3IgJ1BBUlRJQUxMWV9GQUlMRUQnLCB0aGUgY3VycmVudCB2YWx1ZSBvZiAKICAgICAgJ3Byb2dyZXNzUGVyY2VudGFnZScgaXMgZnJvemVuLCBhbmQgdGhlIHRpbWUgY2FwdHVyZWQgaW4gJ2VuZFRpbWUnLiBUaGUgCiAgICAgICdyZXN1bHRTdGF0ZUluZm8nIHNwZWNpZmllcyB0aGUgcmVhc29uIGZvciB0aGUgZmFpbHVyZS4gCiAgICAgIFNwZWNpZmljIGZhaWx1cmUgcmVhc29ucyBtYXkgYmUgc3BlY2lmaWVkIHdoZXJlIHRoZSBkYXRhIHR5cGUgZGVmaW5lZCBpbiAKICAgICAgdGhpcyBjbGF1c2UgaXMgdXNlZC4gVGhlIGV4YWN0IHNlbWFudGljIG9mIGZhaWx1cmUgbWF5IGJlIHN1YmplY3QgZm9yIAogICAgICBmdXJ0aGVyIHNwZWNpYWxpc2F0aW9uIGFzIHdlbGwuCgogICAgICBJbiBjYXNlIHRoZSBwcm9jZXNzIGlzIGNhbmNlbGxlZCwgdGhlICdzdGF0dXMnIGF0dHJpYnV0ZSBpcyBmaXJzdCBzZXQgdG8gCiAgICAgICdDQU5DRUxMSU5HJyBhbmQgd2hlbiB0aGUgcHJvY2VzcyBpcyByZWFsbHkgY2FuY2VsbGVkIHRoZW4gdG8gJ0NBTkNFTExFRCcuIAogICAgICBUaGUgdHJhbnNpdGlvbiB0byAnQ0FOQ0VMTEVEJyBpcyBjYXB0dXJlZCBpbiB0aGUgJ2VuZFRpbWUnIGF0dHJpYnV0ZS4gCiAgICAgIFRoZSB2YWx1ZSBvZiAncHJvZ3Jlc3NQZXJjZW50YWdlJyBpcyBmcm96ZW4uIEFkZGl0aW9uYWwgdGV4dHVhbCAKICAgICAgaW5mb3JtYXRpb24gbWF5IGJlIHByb3ZpZGVkIGluIHRoZSAncmVzdWx0U3RhdGVJbmZvJyBhdHRyaWJ1dGUuCgogICAgICBUaGUgJ3Jlc3VsdFN0YXRlSW5mbycgYXR0cmlidXRlIGlzIHByb3ZpZGVkIG9ubHkgZm9yIGFkZGl0aW9uYWwgdGV4dHVhbCAKICAgICAgcXVhbGlmaWNhdGlvbiBvZiB0aGUgc3RhdGVzICdGSU5JU0hFRCcsICdGQUlMRUQnLCAnUEFSVElBTExZX0ZBSUxFRCcgb3IgCiAgICAgICdDQU5DRUxMRUQnLiBJdCBzaGFsbCBub3QgYmUgdXNlZCBmb3IgbWFraW5nIHRoZSBvdXRjb21lLCB0aGF0IHRoZSAKICAgICAgcHJvY2VzcyBtYXkgcHJvZHVjZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGF2YWlsYWJsZS4KCiAgICAgIFRoZSBwcm9jZXNzIG1heSBoYXZlIHRvIGJlIGNvbXBsZXRlZCB3aXRoaW4gYSBjZXJ0YWluIHRpbWUgYWZ0ZXIgaXRzIAogICAgICBjcmVhdGlvbiwgZm9yIGV4YW1wbGUgYmVjYXVzZSByZXF1aXJlZCBkYXRhIG1heSBub3QgYmUgYXZhaWxhYmxlIGFueSAKICAgICAgbW9yZSBhZnRlciBhIGNlcnRhaW4gdGltZSwgb3IgdGhlIHByb2Nlc3Mgb3V0Y29tZSBpcyBuZWVkZWQgdW50aWwgYSAKICAgICAgY2VydGFpbiB0aW1lIGFuZCB3aGVuIG5vdCBwcm92aWRlZCBieSB0aGlzIHRpbWUgaXMgbm90IG5lZWRlZCBhbnkgbW9yZS4gCiAgICAgIFRoZSB0aW1lIHVudGlsIHRoZSBNblMgcHJvZHVjZXIgYXV0b21hdGljYWxseSBjYW5jZWxzIHRoZSBwcm9jZXNzIGlzIAogICAgICBpbmRpY2F0ZWQgYnkgdGhlICd0aW1lcicgYXR0cmlidXRlLiI7CiAgICAgIAogICAgbGVhZiBpZCB7CiAgICAgIHR5cGUgc3RyaW5nOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgZGVzY3JpcHRpb24gIklkIG9mIHRoZSBwcm9jZXNzLiBJdCBpcyB1bmlxdWUgd2l0aGluIGEgc2luZ2xlIAogICAgICAgIG11bHRpdmFsdWUgYXR0cmlidXRlIG9mIHR5cGUgUHJvY2Vzc01vbml0b3IuIjsKICAgIH0KICAgIAogICAgbGVhZiBzdGF0dXMgeyAKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgZW51bSBOT1RfU1RBUlRFRCA7CiAgICAgICAgZW51bSBSVU5OSU5HIDsKICAgICAgICBlbnVtIENBTkNFTExJTkcgOwogICAgICAgIGVudW0gRklOSVNIRUQgOwogICAgICAgIGVudW0gRkFJTEVEIDsKICAgICAgICBlbnVtIFBBUlRJQUxMWV9GQUlMRUQgOwogICAgICAgIGVudW0gQ0FOQ0VMTEVEIDsKICAgICAgfQogICAgICBjb25maWcgZmFsc2U7CiAgICAgIGRlZmF1bHQgIFJVTk5JTkc7CiAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIHRoZSBzdGF0dXMgb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcywgCiAgICAgICAgd2hldGhlciBpdCBmYWlscywgc3VjY2VlZHMgZXRjLiAKICAgICAgICBJdCBkb2VzIG5vdCByZXByZXNlbnQgdGhlIHJldHVybmVkIHZhbHVlcyBvZiBhIHN1Y2Nlc3NmdWxseSBmaW5pc2hlZCAKICAgICAgICBwcm9jZXNzLiAiOwogICAgfQoKICAgIGxlYWYgcHJvZ3Jlc3NQZXJjZW50YWdlIHsKICAgICAgdHlwZSB1aW50OCB7CiAgICAgICAgcmFuZ2UgMC4uMTAwOwogICAgICB9CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIlByb2dyZXNzIG9mIHRoZSBhc3NvY2lhdGVkIHByb2Nlc3MgYXMgcGVyY2VudGFnZSI7CiAgICB9CgogICAgbGVhZi1saXN0IHByb2dyZXNzU3RhdGVJbmZvIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIkFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgCiAgICAgICAgJ05PVF9TVEFSVEVEJywgJ0NBTkNFTExJTkcnIGFuZCAnUlVOTklORycuCgogICAgICAgIEZvciBzcGVjaWZpYyBwcm9jZXNzZXMsIHNwZWNpZmljIHdlbGwtZGVmaW5lZCBzdHJpbmdzIChlLmcuIHN0cmluZyAKICAgICAgICBwYXR0ZXJucyBvciBlbnVtcykgbWF5IGJlIGRlZmluZWQgYXMgYSBzcGVjaWFsaXNhdGlvbi4iOwogICAgfQoKICAgIGxlYWYgcmVzdWx0U3RhdGVJbmZvIHsKICAgICAgdHlwZSBzdHJpbmc7CiAgICAgIGNvbmZpZyBmYWxzZTsKICAgICAgZGVzY3JpcHRpb24gIkFkZGl0aW9uYWwgdGV4dHVhbCBxdWFsaWZpY2F0aW9uIG9mIHRoZSBzdGF0ZXMgCiAgICAgICAgJ0ZJTklTSEVEJywgJ0ZBSUxFRCcsICdQQVJUSUFMTFlfRkFJTEVEIGFuZCAnQ0FOQ0VMTEVEJy4gCiAgICAgICAgRm9yIGV4YW1wbGUsIGluIHRoZSAnRkFJTEVEJyBvciAnUEFSVElBTExZX0ZBSUxFRCcgc3RhdGUgdGhpcyAKICAgICAgICBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBlcnJvciByZWFzb25zLgoKICAgICAgICBUaGlzIGF0dHJpYnV0ZSBzaGFsbCBub3QgYmUgdXNlZCB0byBtYWtlIHRoZSBvdXRjb21lIG9mIHRoZSBwcm9jZXNzIAogICAgICAgIGF2YWlsYWJsZSBmb3IgcmV0cmlldmFsLCBpZiBhbnkuIEZvciB0aGlzIHB1cnBvc2UsIGRlZGljYXRlZCAKICAgICAgICBhdHRyaWJ1dGVzIHNoYWxsIGJlIHNwZWNpZmllZCB3aGVuIHNwZWNpZnlpbmcgdGhlIHJlcHJlc2VudGF0aW9uIG9mIAogICAgICAgIGEgc3BlY2lmaWMgcHJvY2Vzcy4KCiAgICAgICAgRm9yIHNwZWNpZmljIHByb2Nlc3Nlcywgc3BlY2lmaWMgd2VsbC1kZWZpbmVkIHN0cmluZ3MgKGUuZy4gc3RyaW5nIAogICAgICAgIHBhdHRlcm5zIG9yIGVudW1zKSBtYXkgYmUgZGVmaW5lZCBhcyBhIHNwZWNpYWxpc2F0aW9uLiI7CiAgICB9CgogICAgbGVhZiBzdGFydFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiU3RhcnQgdGltZSBvZiB0aGUgYXNzb2NpYXRlZCBwcm9jZXNzLCBpLmUuIHRoZSB0aW1lIHdoZW4gdGhlIAogICAgICAgIHN0YXR1cyBjaGFuZ2VkIGZyb20gJ05PVF9TVEFSVEVEJyB0byAnUlVOTklORycuIjsKICAgIH0KCiAgICBsZWFmIGVuZFRpbWUgewogICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBkZXNjcmlwdGlvbiAiRGF0ZSBhbmQgdGltZSB3aGVuIHN0YXR1cyBjaGFuZ2VkIHRvICdTVUNDRVNTJywgJ0NBTkNFTExFRCcsIAogICAgICAgICdGQUlMRUQnIG9yICdQQVJUSUFMTFlfRkFJTEVEJy4gCgogICAgICAgIElmIHRoZSB0aW1lIGlzIGluIHRoZSBmdXR1cmUsIGl0IGlzIHRoZSBlc3RpbWF0ZWQgdGltZSAKICAgICAgICB0aGUgcHJvY2VzcyB3aWxsIGVuZC4iOwogICAgfQoKICAgIGxlYWYgdGltZXIgewogICAgICB0eXBlIHVpbnQzMjsKICAgICAgdW5pdHMgbWludXRlczsKICAgICAgZGVzY3JpcHRpb24gIlRpbWUgdW50aWwgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGxlZC4KICAgICAgICBJZiBzZXQsIHRoZSBzeXN0ZW0gZGVjcmVhc2VzIHRoZSB0aW1lciB3aXRoIHRpbWUuIFdoZW4gaXQgcmVhY2hlcyB6ZXJvIAogICAgICAgIHRoZSBjYW5jZWxsYXRpb24gb2YgdGhlIGFzc29jaWF0ZWQgcHJvY2VzcyBpcyBpbml0aWF0ZWQgYnkgdGhlIAogICAgICAgIE1uU19Qcm9kdWNlci4gCiAgICAgICAgSWYgbm90IHNldCwgdGhlcmUgaXMgbm8gdGltZSBsaW1pdCBmb3IgdGhlIHByb2Nlc3MuCiAgICAgICAgCiAgICAgICAgT25jZSB0aGUgdGltZXIgaXMgc2V0LCB0aGUgY29uc3VtZXIgY2FuIG5vdCBjaGFuZ2UgaXQgYW55bW9yZS4gCiAgICAgICAgSWYgdGhlIGNvbnN1bWVyIGhhcyBub3Qgc2V0IHRoZSB0aW1lciB0aGUgTW5TIFByb2R1Y2VyIG1heSBzZXQgaXQuIjsKICAgIH0KICB9CiAgCiAgdHlwZWRlZiBUZW50aE9mRGVncmVlcyB7IAogICAgdHlwZSB1aW50MTYgeyAKICAgICAgcmFuZ2UgMC4uMzYwMDsgCiAgICB9CiAgICB1bml0cyAiMC4xIGRlZ3JlZXMiOwogICAgZGVzY3JpcHRpb24gIkEgc2luZ2xlIGludGVncmFsIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gYW5nbGUgaW4gZGVncmVlcyAKICAgICAgYmV0d2VlbiAwIGFuZCAzNjAgd2l0aCBhIHJlc29sdXRpb24gb2YgMC4xIGRlZ3JlZXMuIjsKICB9CgogIHR5cGVkZWYgTGF0aXR1ZGUgewogICAgdHlwZSBkZWNpbWFsNjQgewogICAgICBmcmFjdGlvbi1kaWdpdHMgNDsKICAgICAgcmFuZ2UgIi05MC4wMDAwLi4rOTAuMDAwMCI7IAogICAgfQogICAgZGVzY3JpcHRpb24gIkxhdGl0dWRlIHZhbHVlcyI7CiAgfQoKICB0eXBlZGVmIExvbmdpdHVkZSB7CiAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgIGZyYWN0aW9uLWRpZ2l0cyA0OwogICAgICByYW5nZSAiLTE4MC4wMDAwLi4rMTgwLjAwMDAiOyAKICAgIH0KICAgIGRlc2NyaXB0aW9uICJMb25naXR1ZGUgdmFsdWVzIjsKICB9CgogIHR5cGVkZWYgT25PZmYgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gT047CiAgICAgIGVudW0gT0ZGOwogICAgfQogIH0KICAKICAvLyBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHdpbGwgYmUgcmVtb3ZlZCBhcyBpdCBpcyAKICAvLyAgYmVpbmcgbW92ZWQgdG8gXzNncHAtNWdjLW5ybS1uZnByb2ZpbGUKICBncm91cGluZyBNYW5hZ2VkTkZQcm9maWxlIHsKICAgIGRlc2NyaXB0aW9uICJEZWZpbmVzIHByb2ZpbGUgZm9yIG1hbmFnZWQgTkYiOwogICAgcmVmZXJlbmNlICIzR1BQIFRTIDIzLjUwMSI7CiAgICAKICAgIGxlYWYgaWR4IHsgdHlwZSB1aW50MzIgOyB9CiAgICAKICAgIGxlYWYgbmZJbnN0YW5jZUlEIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSB5YW5nOnV1aWQgOwogICAgICBkZXNjcmlwdGlvbiAiVGhpcyBwYXJhbWV0ZXIgZGVmaW5lcyBwcm9maWxlIGZvciBtYW5hZ2VkIE5GLiAKICAgICAgICBUaGUgZm9ybWF0IG9mIHRoZSBORiBJbnN0YW5jZSBJRCBzaGFsbCBiZSBhIAogICAgICAgIFVuaXZlcnNhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChVVUlEKSB2ZXJzaW9uIDQsIAogICAgICAgIGFzIGRlc2NyaWJlZCBpbiBJRVRGIFJGQyA0MTIyICIgOwogICAgfQogICAgCiAgICBsZWFmLWxpc3QgbmZUeXBlIHsKICAgICAgY29uZmlnIGZhbHNlOwogICAgICBtaW4tZWxlbWVudHMgMTsKICAgICAgdHlwZSBOZlR5cGU7CiAgICAgIGRlc2NyaXB0aW9uICJUeXBlIG9mIHRoZSBOZXR3b3JrIEZ1bmN0aW9uIiA7CiAgICB9CiAgICAKICAgIGxlYWYgaG9zdEFkZHIgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBpbmV0Omhvc3QgOwogICAgICBkZXNjcmlwdGlvbiAiSG9zdCBhZGRyZXNzIG9mIGEgTkYiOwogICAgfQogICAgCiAgICBsZWFmIGF1dGh6SW5mbyB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgTkYgU3BlY2lmaWMgU2VydmljZSBhdXRob3JpemF0aW9uIAogICAgICAgIGluZm9ybWF0aW9uLiBJdCBzaGFsbCBpbmNsdWRlIHRoZSBORiB0eXBlIChzKSBhbmQgTkYgcmVhbG1zL29yaWdpbnMgCiAgICAgICAgYWxsb3dlZCB0byBjb25zdW1lIE5GIFNlcnZpY2Uocykgb2YgTkYgU2VydmljZSBQcm9kdWNlci4iOwogICAgICByZWZlcmVuY2UgIlNlZSBUUyAyMy41MDEiIDsKICAgIH0KICAgIAogICAgbGVhZiBsb2NhdGlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIkluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgTkYgaW5zdGFuY2UgCiAgICAgICAgKGUuZy4gZ2VvZ3JhcGhpYyBsb2NhdGlvbiwgZGF0YSBjZW50ZXIpIGRlZmluZWQgYnkgb3BlcmF0b3IiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmIGNhcGFjaXR5IHsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgIHR5cGUgdWludDE2IDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgc3RhdGljIGNhcGFjaXR5IGluZm9ybWF0aW9uIAogICAgICAgIGluIHRoZSByYW5nZSBvZiAwLTY1NTM1LCBleHByZXNzZWQgYXMgYSB3ZWlnaHQgcmVsYXRpdmUgdG8gb3RoZXIgCiAgICAgICAgTkYgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHR5cGU7IGlmIGNhcGFjaXR5IGlzIGFsc28gcHJlc2VudCBpbiB0aGUgCiAgICAgICAgbmZTZXJ2aWNlTGlzdCBwYXJhbWV0ZXJzLCB0aG9zZSB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KICAgICAgCiAgICBsZWFmIG5GU3J2R3JvdXBJZCB7CiAgICAgIHR5cGUgc3RyaW5nIDsKICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcGFyYW1ldGVyIGRlZmluZXMgaWRlbnRpdHkgb2YgdGhlIGdyb3VwIHRoYXQgaXMgCiAgICAgICAgc2VydmVkIGJ5IHRoZSBORiBpbnN0YW5jZS4KICAgICAgICBNYXkgYmUgY29uZmlnIGZhbHNlIG9yIHRydWUgZGVwZW5kaW5nIG9uIHRoZSBNYW5hZ2VkRnVuY3Rpb24uIAogICAgICAgIENvbmZpZz10cnVlIGZvciBVZHJpbmZvLiBDb25maWc9ZmFsc2UgZm9yIFVkbUluZm8gYW5kIEF1c2ZJbmZvLiAKICAgICAgICBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IFVETSBvciBBVVNGIG9yIFVEUi4gIjsKICAgICAgcmVmZXJlbmNlICJUUyAyOS41MTAiIDsKICAgIH0KICAgIAogICAgbGVhZi1saXN0IHN1cHBvcnRlZERhdGFTZXRJZHMgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIFNVQlNDUklQVElPTjsKICAgICAgICBlbnVtIFBPTElDWTsKICAgICAgICBlbnVtIEVYUE9TVVJFOwogICAgICAgIGVudW0gQVBQTElDQVRJT047CiAgICAgIH0KICAgICAgZGVzY3JpcHRpb24gIkxpc3Qgb2Ygc3VwcG9ydGVkIGRhdGEgc2V0cyBpbiB0aGUgVURSIGluc3RhbmNlLiAKICAgICAgICBNYXkgYmUgcHJlc2VudCBpZiAuLi9uZlR5cGUgPSBVRFIiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmLWxpc3Qgc21mU2VydmluZ0FyZWFzIHsKICAgICAgdHlwZSBzdHJpbmcgOwogICAgICBkZXNjcmlwdGlvbiAiRGVmaW5lcyB0aGUgU01GIHNlcnZpY2UgYXJlYShzKSB0aGUgVVBGIGNhbiBzZXJ2ZS4gCiAgICAgICAgU2hhbGwgYmUgcHJlc2VudCBpZiAuLi9uZlR5cGUgPSBVUEYiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogICAgCiAgICBsZWFmIHByaW9yaXR5IHsKICAgICAgdHlwZSB1aW50MTY7CiAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHBhcmFtZXRlciBkZWZpbmVzIFByaW9yaXR5IChyZWxhdGl2ZSB0byBvdGhlciBORnMgCiAgICAgICAgb2YgdGhlIHNhbWUgdHlwZSkgaW4gdGhlIHJhbmdlIG9mIDAtNjU1MzUsIHRvIGJlIHVzZWQgZm9yIE5GIHNlbGVjdGlvbjsgCiAgICAgICAgbG93ZXIgdmFsdWVzIGluZGljYXRlIGEgaGlnaGVyIHByaW9yaXR5LiBJZiBwcmlvcml0eSBpcyBhbHNvIHByZXNlbnQgCiAgICAgICAgaW4gdGhlIG5mU2VydmljZUxpc3QgcGFyYW1ldGVycywgdGhvc2Ugd2lsbCBoYXZlIHByZWNlZGVuY2Ugb3ZlciAKICAgICAgICB0aGlzIHZhbHVlLiBTaGFsbCBiZSBwcmVzZW50IGlmIC4uL25mVHlwZSA9IEFNRiAiOwogICAgICByZWZlcmVuY2UgIlRTIDI5LjUxMCIgOwogICAgfQogIH0KICAKICB0eXBlZGVmIHVzYWdlU3RhdGUgewogICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgIGVudW0gSURMRTsKICAgICAgZW51bSBBQ1RJVkU7CiAgICAgIGVudW0gQlVTWTsKICAgIH0KICAgIGRlc2NyaXB0aW9uICJJdCBkZXNjcmliZXMgd2hldGhlciBvciBub3QgdGhlIHJlc291cmNlIGlzIGFjdGl2ZWx5IGluIAogICAgICB1c2UgYXQgYSBzcGVjaWZpYyBpbnN0YW50LCBhbmQgaWYgc28sIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBzcGFyZSAKICAgICAgY2FwYWNpdHkgZm9yIGFkZGl0aW9uYWwgdXNlcnMgYXQgdGhhdCBpbnN0YW50LiBUaGUgdmFsdWUgaXMgUkVBRC1PTkxZLiI7CiAgICByZWZlcmVuY2UgIklUVSBUIFJlY29tbWVuZGF0aW9uIFguNzMxIjsKICB9CiAgCiAgZ3JvdXBpbmcgU0FQIHsKICAgIGxlYWYgaG9zdCB7CiAgICAgIHR5cGUgaW5ldDpob3N0OwogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgIH0KICAgIGxlYWYgcG9ydCB7CiAgICAgIHR5cGUgaW5ldDpwb3J0LW51bWJlcjsKICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICB9CiAgICBkZXNjcmlwdGlvbiAiU2VydmljZSBhY2Nlc3MgcG9pbnQuIjsKICAgIHJlZmVyZW5jZSAiVFMgMjguNjIyIjsKICB9CiAgCiAgdHlwZWRlZiBNY2MgewogICAgZGVzY3JpcHRpb24gIlRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGNvbnNpc3RzIG9mIHRocmVlIGRlY2ltYWwgZGlnaXRzLCAKICAgICAgVGhlIGZpcnN0IGRpZ2l0IG9mIHRoZSBtb2JpbGUgY291bnRyeSBjb2RlIGlkZW50aWZpZXMgdGhlIGdlb2dyYXBoaWMgCiAgICAgIHJlZ2lvbiAodGhlIGRpZ2l0cyAxIGFuZCA4IGFyZSBub3QgdXNlZCk6IjsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnWzAyLTc5XVswLTldWzAtOV0nOwogICAgfQogICAgcmVmZXJlbmNlICIzR1BQIFRTIDIzLjAwMyBzdWJjbGF1c2UgMi4yIGFuZCAxMi4xIjsKICB9CgogIHR5cGVkZWYgTW5jIHsKICAgIGRlc2NyaXB0aW9uICJUaGUgbW9iaWxlIG5ldHdvcmsgY29kZSBjb25zaXN0cyBvZiB0d28gb3IgdGhyZWUgCiAgICAgIGRlY2ltYWwgZGlnaXRzIChmb3IgZXhhbXBsZTogTU5DIG9mIDAwMSBpcyBub3QgdGhlIHNhbWUgYXMgTU5DIG9mIDAxKSI7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJ1swLTldWzAtOV1bMC05XXxbMC05XVswLTldJzsKICAgIH0KICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyMy4wMDMgc3ViY2xhdXNlIDIuMiBhbmQgMTIuMSI7CiAgfQoKICBncm91cGluZyBQTE1OSWQgewogICAgbGVhZiBtY2MgewogICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgdHlwZSBNY2M7CiAgICB9CiAgICBsZWFmIG1uYyB7CiAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICB0eXBlIE1uYzsKICAgIH0KICAgIHJlZmVyZW5jZSAiVFMgMjMuNjU4IjsKICB9CiAgCiAgdHlwZWRlZiBOY2kgewogICAgZGVzY3JpcHRpb24gIk5SIENlbGwgSWRlbnRpdHkuIFRoZSBOQ0kgc2hhbGwgYmUgb2YgZml4ZWQgbGVuZ3RoIG9mIDM2IGJpdHMgCiAgICAgIGFuZCBzaGFsbCBiZSBjb2RlZCB1c2luZyBmdWxsIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLiAKICAgICAgVGhlIGV4YWN0IGNvZGluZyBvZiB0aGUgTkNJIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBlYWNoIFBMTU4gb3BlcmF0b3IiOwogICAgcmVmZXJlbmNlICJUUyAyMy4wMDMiOwogICAgdHlwZSB1bmlvbiB7CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggMzY7CiAgICAgICAgcGF0dGVybiAnWzAxXSsnOwogICAgICB9CiAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICBsZW5ndGggOTsKICAgICAgICBwYXR0ZXJuICdbYS1mQS1GMC05XSonOwogICAgICB9CiAgICB9CiAgfQogICAgCiAgdHlwZWRlZiBPcGVyYXRpb25hbFN0YXRlIHsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyOC42MjUgYW5kIElUVS1UIFguNzMxIjsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIERJU0FCTEVEIHsKICAgICAgICB2YWx1ZSAwOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgdG90YWxseSBpbm9wZXJhYmxlLiI7CiAgICAgIH0KCiAgICAgIGVudW0gRU5BQkxFRCB7CiAgICAgICAgdmFsdWUgMTsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIHJlc291cmNlIGlzIHBhcnRpYWxseSBvciBmdWxseSBvcGVyYWJsZS4iOwogICAgICB9CgogICAgfQogIH0KICAKICB0eXBlZGVmIEJhc2ljQWRtaW5pc3RyYXRpdmVTdGF0ZSB7CiAgICByZWZlcmVuY2UgIjNHUFAgVFMgMjguNjI1IGFuZCBJVFUtVCBYLjczMSI7CiAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgZW51bSBMT0NLRUQgewogICAgICAgIHZhbHVlIDA7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHByb2hpYml0ZWQgZnJvbSBwZXJmb3JtaW5nCiAgICAgICAgICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4iOwogICAgICB9CgogICAgICBlbnVtIFVOTE9DS0VEIHsKICAgICAgICB2YWx1ZSAxOwogICAgICAgIGRlc2NyaXB0aW9uICJUaGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8gcGVyZm9ybQogICAgICAgICAgc2VydmljZXMgZm9yIGl0cyB1c2Vycy4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBpdHMgaW5oZXJlbnQKICAgICAgICAgIG9wZXJhYmlsaXR5LiI7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgdHlwZWRlZiBBZG1pbmlzdHJhdGl2ZVN0YXRlIHsKICAgIHJlZmVyZW5jZSAiM0dQUCBUUyAyOC42MjUgYW5kIElUVS1UIFguNzMxIjsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIExPQ0tFRCB7CiAgICAgICAgdmFsdWUgMDsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIHJlc291cmNlIGlzIGFkbWluaXN0cmF0aXZlbHkgcHJvaGliaXRlZCBmcm9tIHBlcmZvcm1pbmcKICAgICAgICAgICAgICAgICBzZXJ2aWNlcyBmb3IgaXRzIHVzZXJzLiI7CiAgICAgIH0KCiAgICAgIGVudW0gVU5MT0NLRUQgewogICAgICAgIHZhbHVlIDE7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSByZXNvdXJjZSBpcyBhZG1pbmlzdHJhdGl2ZWx5IHBlcm1pdHRlZCB0byBwZXJmb3JtCiAgICAgICAgICBzZXJ2aWNlcyBmb3IgaXRzIHVzZXJzLiBUaGlzIGlzIGluZGVwZW5kZW50IG9mIGl0cyBpbmhlcmVudAogICAgICAgICAgb3BlcmFiaWxpdHkuIjsKICAgICAgfQoKICAgICAgZW51bSBTSFVUVElOR0RPV04gewogICAgICAgIHZhbHVlIDI7CiAgICAgICAgZGVzY3JpcHRpb24gIlVzZSBvZiB0aGUgcmVzb3VyY2UgaXMgYWRtaW5pc3RyYXRpdmVseSBwZXJtaXR0ZWQgdG8KICAgICAgICAgIGV4aXN0aW5nIGluc3RhbmNlcyBvZiB1c2Ugb25seS4gV2hpbGUgdGhlIHN5c3RlbSByZW1haW5zIGluCiAgICAgICAgICB0aGUgc2h1dHRpbmcgZG93biBzdGF0ZSB0aGUgbWFuYWdlciBvciB0aGUgbWFuYWdlZCBlbGVtZW50IAogICAgICAgICAgbWF5IGF0IGFueSB0aW1lIGNhdXNlIHRoZSByZXNvdXJjZSB0byB0cmFuc2l0aW9uIHRvIHRoZSAKICAgICAgICAgIGxvY2tlZCBzdGF0ZS4iOwogICAgICB9CiAgICB9CiAgfQogIAogIHR5cGVkZWYgQXZhaWxhYmlsaXR5U3RhdHVzIHsKICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICBlbnVtIElOX1RFU1Q7CiAgICAgICAgICBlbnVtIEZBSUxFRDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVudW0gUE9XRVJfT0ZGOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBPRkZfTElORTsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVudW0gT0ZGX0RVVFk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBlbnVtIERFUEVOREVOQ1k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICBlbnVtIERFR1JBREVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBOT1RfSU5TVEFMTEVEOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgZW51bSBMT0dfRlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgIH0KICB9CiAgCiAgdHlwZWRlZiBDZWxsU3RhdGUgewogICAgICB0eXBlIGVudW1lcmF0aW9uIHsKICAgICAgICBlbnVtIElETEU7CiAgICAgICAgZW51bSBJTkFDVElWRTsgICAgICAgICAgICAgIAogICAgICAgIGVudW0gQUNUSVZFOyAgICAgICAgICAgICAgCiAgICAgfQogIH0KCiAgdHlwZWRlZiBOcnBjaSB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uICJQaHlzaWNhbCBDZWxsIElkZW50aXR5IChQQ0kpIG9mIHRoZSBOUiBjZWxsLiI7CiAgICByZWZlcmVuY2UgIlRTIDM2LjIxMSBzdWJjbGF1c2UgNi4xMSI7CiAgfQoKICB0eXBlZGVmIFRhYyB7CiAgICB0eXBlIGludDMyIHsKICAgICAgcmFuZ2UgMC4uMTY3NzcyMTUgOwogICAgfQogICAgZGVzY3JpcHRpb24gIlRyYWNraW5nIEFyZWEgQ29kZSI7CiAgICByZWZlcmVuY2UgIlRTIDIzLjAwMyBjbGF1c2UgMTkuNC4yLjMiOwogIH0KCiAgdHlwZWRlZiBBbWZSZWdpb25JZCB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDggOwogICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgbGVuZ3RoIDg7CiAgICAgICAgcGF0dGVybiAnWzAxXSonOwogICAgICB9CiAgICB9CiAgICByZWZlcmVuY2UgImNsYXVzZSAyLjEwLjEgb2YgM0dQUCBUUyAyMy4wMDMiOwogIH0KCiAgdHlwZWRlZiBBbWZTZXRJZCB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDE2IHsKICAgICAgICByYW5nZSAnMC4uMTAyMyc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA4OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CgogIHR5cGVkZWYgQW1mUG9pbnRlciB7CiAgICB0eXBlIHVuaW9uIHsgCiAgICAgIHR5cGUgdWludDggewogICAgICAgIHJhbmdlICcwLi42Myc7CiAgICAgIH0KICAgICAgdHlwZSBzdHJpbmcgewogICAgICAgIGxlbmd0aCA2OwogICAgICAgIHBhdHRlcm4gJ1swMV0qJzsKICAgICAgfQogICAgfQogICAgcmVmZXJlbmNlICJjbGF1c2UgMi4xMC4xIG9mIDNHUFAgVFMgMjMuMDAzIjsKICB9CiAgICAgICAgCiAgZ3JvdXBpbmcgQW1mSWRlbnRpZmllciB7ICAgICAgICAKICAgIGxlYWYgYW1mUmVnaW9uSWQgewogICAgICB0eXBlIEFtZlJlZ2lvbklkOwogICAgfQogICAgbGVhZiBhbWZTZXRJZCB7CiAgICAgIHR5cGUgQW1mU2V0SWQ7CiAgICB9CiAgICBsZWFmIGFtZlBvaW50ZXIgewogICAgICB0eXBlIEFtZlBvaW50ZXI7CiAgICB9IAogICAgZGVzY3JpcHRpb24gIlRoZSBBTUZJIGlzIGNvbnN0cnVjdGVkIGZyb20gYW4gQU1GIFJlZ2lvbiBJRCwgCiAgICAgIGFuIEFNRiBTZXQgSUQgYW5kIGFuIEFNRiBQb2ludGVyLiAKICAgICAgVGhlIEFNRiBSZWdpb24gSUQgaWRlbnRpZmllcyB0aGUgcmVnaW9uLCAKICAgICAgdGhlIEFNRiBTZXQgSUQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgQU1GIFNldCB3aXRoaW4gdGhlIEFNRiBSZWdpb24sIGFuZCAKICAgICAgdGhlIEFNRiBQb2ludGVyIHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhlIEFNRiB3aXRoaW4gdGhlIEFNRiBTZXQuICI7IAogIH0gICAgCgovLyB0eXBlIGRlZmluaXRpb25zIGVzcGVjaWFsbHkgZm9yIGNvcmUgTkZzCgogIHR5cGVkZWYgTmZUeXBlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIE5SRjsKICAgICAgZW51bSBVRE07CiAgICAgIGVudW0gQU1GOwogICAgICBlbnVtIFNNRjsKICAgICAgZW51bSBBVVNGOwogICAgICBlbnVtIE5FRjsKICAgICAgZW51bSBQQ0Y7CiAgICAgIGVudW0gU01TRjsKICAgICAgZW51bSBOU1NGOwogICAgICBlbnVtIFVEUjsKICAgICAgZW51bSBMTUY7CiAgICAgIGVudW0gR01MQzsKICAgICAgZW51bSA1R19FSVI7CiAgICAgIGVudW0gU0VQUDsKICAgICAgZW51bSBVUEY7CiAgICAgIGVudW0gTjNJV0Y7CiAgICAgIGVudW0gQUY7CiAgICAgIGVudW0gVURTRjsKICAgICAgZW51bSBCU0Y7CiAgICAgIGVudW0gQ0hGOwogICAgfSAgICAgICAgICAKICB9CiAgCiAgdHlwZWRlZiBOb3RpZmljYXRpb25UeXBlIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIE4xX01FU1NBR0VTOwogICAgICBlbnVtIE4yX0lORk9STUFUSU9OOwogICAgICBlbnVtIExPQ0FUSU9OX05PVElGSUNBVElPTjsKICAgIH0gICAgICAKICB9CiAgCiAgdHlwZWRlZiBMb2FkIHsKICAgIGRlc2NyaXB0aW9uICJMYXRlc3Qga25vd24gbG9hZCBpbmZvcm1hdGlvbiBvZiB0aGUgTkYsIHBlcmNlbnRhZ2UgIjsKICAgIHR5cGUgdWludDggewogICAgICByYW5nZSAwLi4xMDA7CiAgICB9CiAgfQoKICB0eXBlZGVmIE4xTWVzc2FnZUNsYXNzIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIDVHTU07CiAgICAgIGVudW0gU007CiAgICAgIGVudW0gTFBQOwogICAgICBlbnVtIFNNUzsgCiAgICB9ICAgICAgCiAgfQogIAogIHR5cGVkZWYgTjJJbmZvcm1hdGlvbkNsYXNzIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIFNNOwogICAgICBlbnVtIE5SUFBBOwogICAgICBlbnVtIFBXUzsKICAgICAgZW51bSBQV1NfQkNBTDsKICAgICAgZW51bSBQV1NfUkY7CiAgICB9ICAgICAgICAgICAgICAKICB9CiAgCiAgZ3JvdXBpbmcgRGVmYXVsdE5vdGlmaWNhdGlvblN1YnNjcmlwdGlvbiB7CiAgICAKICAgIGxlYWYgbm90aWZpY2F0aW9uVHlwZSB7CiAgICAgIHR5cGUgTm90aWZpY2F0aW9uVHlwZTsKICAgIH0KICAgIAogICAgbGVhZiBjYWxsYmFja1VyaSB7CiAgICAgIHR5cGUgaW5ldDp1cmk7CiAgICB9CiAgICAKICAgIGxlYWYgbjFNZXNzYWdlQ2xhc3MgewogICAgICB0eXBlIE4xTWVzc2FnZUNsYXNzOwogICAgfQogICAgCiAgICBsZWFmIG4ySW5mb3JtYXRpb25DbGFzcyB7CiAgICAgIHR5cGUgTjJJbmZvcm1hdGlvbkNsYXNzOwogICAgfSAgICAKICB9ICAKICAgICAgICAKICBncm91cGluZyBJcHY0QWRkcmVzc1JhbmdlIHsKICBsZWFmIHN0YXJ0IHsKICAgIHR5cGUgaW5ldDppcHY0LWFkZHJlc3M7CiAgICB9CiAgbGVhZiBlbmQgewogICAgdHlwZSBpbmV0OmlwdjQtYWRkcmVzczsKICAgIH0gICAgCiAgfQogICAgCiAgZ3JvdXBpbmcgSXB2NlByZWZpeFJhbmdlIHsKICBsZWFmIHN0YXJ0IHsKICAgIHR5cGUgaW5ldDppcHY2LXByZWZpeDsKICAgIH0KICBsZWFmIGVuZCB7CiAgICB0eXBlIGluZXQ6aXB2Ni1wcmVmaXg7CiAgICB9ICAgIAogIH0KICAgICAKICB0eXBlZGVmIE5zaUlkIHsKICAgIHR5cGUgc3RyaW5nOwogIH0KICAgIAogIHR5cGVkZWYgVWVNb2JpbGl0eUxldmVsIHsKICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICBlbnVtIFNUQVRJT05BUlk7CiAgICAgIGVudW0gTk9NQURJQzsKICAgICAgZW51bSBSRVNUUklDVEVEX01PQklMSVRZOwogICAgICBlbnVtIEZVTExZX01PQklMSVRZOwogICAgfQogIH0KICAgICAgCiAgdHlwZWRlZiBSZXNvdXJjZVNoYXJpbmdMZXZlbCB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gU0hBUkVEOwogICAgICAgIGVudW0gTk9UX1NIQVJFRDsKICAgICAgfQogIH0KICAgICAgCiAgdHlwZWRlZiBUeERpcmVjdGlvbiB7CiAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgIGVudW0gREw7CiAgICAgICAgZW51bSBVTDsKICAgICAgICBlbnVtIERMX0FORF9VTDsKICAgICAgfQogIH0KICAgICAgCiAgZ3JvdXBpbmcgQWRkcmVzc1dpdGhWbGFuIHsKICAgIGxlYWYgaXBBZGRyZXNzIHsKICAgICAgdHlwZSBpbmV0OmlwLWFkZHJlc3M7ICAgCiAgICB9CiAgICBsZWFmIHZsYW5JZCB7CiAgICAgICB0eXBlIHVpbnQxNjsKICAgIH0gIAogIH0KICAKICB0eXBlZGVmIERpc3Rpbmd1aXNoZWROYW1lIHsgICAgLy8gVE9ETyBpcyB0aGlzIGVxdWl2YWxlbnQgdG8gVFMgMzIuMzAwID8KICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnKFthLXpBLVpdW2EtekEtWjAtOS1dKj0oXFwoIHwjfFxcfD58PHw7fCJ8XCt8LHxbYS1mQS1GMC05XXsyfSl8W15cXD48OyIrLCMgXSknCiAgICAgICAgKyAnKChcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissXSkqJwogICAgICAgICsgJyhcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissIF0pKT8nCiAgICAgICAgKyAnWyxcK10pKlthLXpBLVpdW2EtekEtWjAtOS1dKj0oXFwoIHwjfFxcfD58PHw7fCJ8XCt8LHxbYS1mQS1GMC05XXsyfSl8W15cXD48OyIrLCMgXSknCiAgICAgICAgKyAnKChcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KScKICAgICAgICArICd8W15cXD48OyIrLF0pKihcXCggfCN8XFx8Pnw8fDt8InxcK3wsfFthLWZBLUYwLTldezJ9KXxbXlxcPjw7IissIF0pKT8nOyAgCiAgICB9CiAgICBkZXNjcmlwdGlvbiAiUmVwcmVzZW50cyB0aGUgaW50ZXJuYXRpb25hbCBzdGFuZGFyZCBmb3IgdGhlIHJlcHJlc2VudGF0aW9uIAogICAgICBvZiBEaXN0aW5ndWlzaGVkIE5hbWUgKFJGQyA0NTEyKS4gCiAgICAgIFRoZSBmb3JtYXQgb2YgdGhlIERpc3Rpbmd1aXNoZWROYW1lIFJFR0VYIGlzOgogICAgICB7QXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVZhbHVlfSAgIAoKICAgICAgQXR0cmlidXRlVHlwZSBjb25zaXN0cyBvZiBhbHBoYW51bWVyaWMgYW5kIGh5cGhlbiAoT0lEcyBub3QgYWxsb3dlZCkuIAogICAgICBBbGwgb3RoZXIgY2hhcmFjdGVycyBhcmUgcmVzdHJpY3RlZC4KICAgICAgVGhlIEF0dHJpYnV0ZSB2YWx1ZSBjYW5ub3QgY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMgb3IgdGhlIAogICAgICAgIGZvbGxvd2luZyBjaGFyYWN0ZXJzIDogXFwgPiA8IDsgXCIgKyAsIChDb21tYSkgYW5kIFdoaXRlIHNwYWNlCiAgICAgIFRoZSBBdHRyaWJ1dGUgdmFsdWUgY2FuIGNvbnRhaW4gdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIGlmIHRoZXkgCiAgICAgICAgYXJlIGV4Y2FwZWQgOiBcXCA+IDwgOyBcIiArICwgKENvbW1hKSBhbmQgV2hpdGUgc3BhY2UKICAgICAgVGhlIEF0dHJpYnV0ZSB2YWx1ZSBjYW4gY29udGFpbiBjb250cm9sIGNoYXJhY3RlcnMgaWYgaXRzIGFuIGVzY2FwZWQgCiAgICAgICAgZG91YmxlIGRpZ2l0IGhleCBudW1iZXIuCiAgICAgICAgRXhhbXBsZXMgY291bGQgYmUgCiAgICAgICAgICBVSUQ9bm9ib2R5QGV4YW1wbGUuY29tLERDPWV4YW1wbGUsREM9Y29tCiAgICAgICAgICAgIENOPUpvaG4gU21pdGgsT1U9U2FsZXMsTz1BQ01FIExpbWl0ZWQsTD1Nb2FiLFNUPVV0YWgsQz1VUyI7CiAgICByZWZlcmVuY2UgICJSRkMgNDUxMiBMaWdodHdlaWdodCBEaXJlY3RvcnkgQWNjZXNzIFByb3RvY29sIChMREFQKToKICAgICAgICAgICAgICAgICAgICAgIERpcmVjdG9yeSBJbmZvcm1hdGlvbiBNb2RlbHMiOwogIH0gLy8gcmVjaGVjayByZWdleHAgaXQgZG9lc24ndCBoYW5kbGUgcG9zaXggWzpjbnRybDpdCiAKICB0eXBlZGVmIFFPZmZzZXRSYW5nZSAgewogICAgdHlwZSBpbnQ4IHsgCiAgICAgIHJhbmdlICItMjQgfCAtMjIgfCAtMjAgfCAtMTggfCAtMTYgfCAtMTQgfCAtMTIgfCAtMTAgfCAtOCB8IC02IHwgIiArCiAgICAgICAgIiAtNSB8IC00IHwgLTMgfCAtMiB8IC0xIHwgMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDggfCAxMCB8ICIgKwogICAgICAgICIgMTIgfCAxNCB8IDE2IHwgMTggfCAyMCB8IDIyIHwgMjQiOyAKICAgIH0KICAgIHVuaXRzIGRCOwogIH0KfQ==
ietf-geo-location urn:ietf:params:xml:ns:yang:ietf-geo-location \N [] 2022-02-11 bW9kdWxlIGlldGYtZ2VvLWxvY2F0aW9uIHsKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYtZ2VvLWxvY2F0aW9uIjsKICBwcmVmaXggZ2VvOwogIGltcG9ydCBpZXRmLXlhbmctdHlwZXMgewogICAgcHJlZml4IHlhbmc7CiAgICByZWZlcmVuY2UgIlJGQyA2OTkxOiBDb21tb24gWUFORyBEYXRhIFR5cGVzIjsKICB9CgogIG9yZ2FuaXphdGlvbgogICAgIklFVEYgTkVUTU9EIFdvcmtpbmcgR3JvdXAgKE5FVE1PRCkiOwogIGNvbnRhY3QKICAgIldHIFdlYjogICA8aHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy93Zy9uZXRtb2QvPgogICAgV0cgTGlzdDogIDxtYWlsdG86bmV0bW9kQGlldGYub3JnPgoKICAgIEVkaXRvcjogICBDaHJpc3RpYW4gSG9wcHMKICAgICAgICAgICAgICA8bWFpbHRvOmNob3Bwc0BjaG9wcHMub3JnPiI7CgogIGRlc2NyaXB0aW9uCiAgICAiVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGdyb3VwaW5nIG9mIGEgY29udGFpbmVyIG9iamVjdCBmb3IKICAgICBzcGVjaWZ5aW5nIGEgbG9jYXRpb24gb24gb3IgYXJvdW5kIGFuIGFzdHJvbm9taWNhbCBvYmplY3QgKGUuZy4sCiAgICAgJ2VhcnRoJykuCgogICAgIFRoZSBrZXkgd29yZHMgJ01VU1QnLCAnTVVTVCBOT1QnLCAnUkVRVUlSRUQnLCAnU0hBTEwnLCAnU0hBTEwKICAgICBOT1QnLCAnU0hPVUxEJywgJ1NIT1VMRCBOT1QnLCAnUkVDT01NRU5ERUQnLCAnTk9UIFJFQ09NTUVOREVEJywKICAgICAnTUFZJywgYW5kICdPUFRJT05BTCcgaW4gdGhpcyBkb2N1bWVudCBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMKICAgICBkZXNjcmliZWQgaW4gQkNQIDE0IChSRkMgMjExOSkgKFJGQyA4MTc0KSB3aGVuLCBhbmQgb25seSB3aGVuLAogICAgIHRoZXkgYXBwZWFyIGluIGFsbCBjYXBpdGFscywgYXMgc2hvd24gaGVyZS4KCiAgICAgQ29weXJpZ2h0IChjKSAyMDIyIElFVEYgVHJ1c3QgYW5kIHRoZSBwZXJzb25zIGlkZW50aWZpZWQgYXMKICAgICBhdXRob3JzIG9mIHRoZSBjb2RlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcywKICAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHVyc3VhbnQgdG8sCiAgICAgYW5kIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2UgdGVybXMgY29udGFpbmVkIGluLCB0aGUKICAgICBSZXZpc2VkIEJTRCBMaWNlbnNlIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUKICAgICBJRVRGIFRydXN0J3MgTGVnYWwgUHJvdmlzaW9ucyBSZWxhdGluZyB0byBJRVRGIERvY3VtZW50cwogICAgIChodHRwczovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICAgVGhpcyB2ZXJzaW9uIG9mIHRoaXMgWUFORyBtb2R1bGUgaXMgcGFydCBvZiBSRkMgOTE3OQogICAgIChodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9pbmZvL3JmYzkxNzkpOyBzZWUgdGhlIFJGQyBpdHNlbGYKICAgICBmb3IgZnVsbCBsZWdhbCBub3RpY2VzLiI7CgogIHJldmlzaW9uIDIwMjItMDItMTEgewogICAgZGVzY3JpcHRpb24KICAgICAgIkluaXRpYWwgUmV2aXNpb24iOwogICAgcmVmZXJlbmNlCiAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgfQoKICBmZWF0dXJlIGFsdGVybmF0ZS1zeXN0ZW1zIHsKICAgIGRlc2NyaXB0aW9uCiAgICAgICJUaGlzIGZlYXR1cmUgbWVhbnMgdGhlIGRldmljZSBzdXBwb3J0cyBzcGVjaWZ5aW5nIGxvY2F0aW9ucwogICAgICAgdXNpbmcgYWx0ZXJuYXRlIHN5c3RlbXMgZm9yIHJlZmVyZW5jZSBmcmFtZXMuIjsKICB9CgogIGdyb3VwaW5nIGdlby1sb2NhdGlvbiB7CiAgICBkZXNjcmlwdGlvbgogICAgICAiR3JvdXBpbmcgdG8gaWRlbnRpZnkgYSBsb2NhdGlvbiBvbiBhbiBhc3Ryb25vbWljYWwgb2JqZWN0LiI7CgogICAgY29udGFpbmVyIGdlby1sb2NhdGlvbiB7CiAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIkEgbG9jYXRpb24gb24gYW4gYXN0cm9ub21pY2FsIGJvZHkgKGUuZy4sICdlYXJ0aCcpCiAgICAgICAgIHNvbWV3aGVyZSBpbiBhIHVuaXZlcnNlLiI7CgogICAgICBjb250YWluZXIgcmVmZXJlbmNlLWZyYW1lIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBGcmFtZSBvZiBSZWZlcmVuY2UgZm9yIHRoZSBsb2NhdGlvbiB2YWx1ZXMuIjsKCiAgICAgICAgbGVhZiBhbHRlcm5hdGUtc3lzdGVtIHsKICAgICAgICAgIGlmLWZlYXR1cmUgImFsdGVybmF0ZS1zeXN0ZW1zIjsKICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBzeXN0ZW0gaW4gd2hpY2ggdGhlIGFzdHJvbm9taWNhbCBib2R5IGFuZAogICAgICAgICAgICAgZ2VvZGV0aWMtZGF0dW0gaXMgZGVmaW5lZC4gIE5vcm1hbGx5LCB0aGlzIHZhbHVlIGlzIG5vdAogICAgICAgICAgICAgcHJlc2VudCBhbmQgdGhlIHN5c3RlbSBpcyB0aGUgbmF0dXJhbCB1bml2ZXJzZTsgaG93ZXZlciwKICAgICAgICAgICAgIHdoZW4gcHJlc2VudCwgdGhpcyB2YWx1ZSBhbGxvd3MgZm9yIHNwZWNpZnlpbmcgYWx0ZXJuYXRlCiAgICAgICAgICAgICBzeXN0ZW1zIChlLmcuLCB2aXJ0dWFsIHJlYWxpdGllcykuICBBbiBhbHRlcm5hdGUtc3lzdGVtCiAgICAgICAgICAgICBtb2RpZmllcyB0aGUgZGVmaW5pdGlvbiAoYnV0IG5vdCB0aGUgdHlwZSkgb2YgdGhlIG90aGVyCiAgICAgICAgICAgICB2YWx1ZXMgaW4gdGhlIHJlZmVyZW5jZSBmcmFtZS4iOwogICAgICAgIH0KICAgICAgICBsZWFmIGFzdHJvbm9taWNhbC1ib2R5IHsKICAgICAgICAgIHR5cGUgc3RyaW5nIHsKICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgfQogICAgICAgICAgZGVmYXVsdCAiZWFydGgiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkFuIGFzdHJvbm9taWNhbCBib2R5IGFzIG5hbWVkIGJ5IHRoZSBJbnRlcm5hdGlvbmFsCiAgICAgICAgICAgICBBc3Ryb25vbWljYWwgVW5pb24gKElBVSkgb3IgYWNjb3JkaW5nIHRvIHRoZSBhbHRlcm5hdGUKICAgICAgICAgICAgIHN5c3RlbSBpZiBzcGVjaWZpZWQuICBFeGFtcGxlcyBpbmNsdWRlICdzdW4nIChvdXIgc3RhciksCiAgICAgICAgICAgICAnZWFydGgnIChvdXIgcGxhbmV0KSwgJ21vb24nIChvdXIgbW9vbiksICdlbmNlbGFkdXMnIChhCiAgICAgICAgICAgICBtb29uIG9mIFNhdHVybiksICdjZXJlcycgKGFuIGFzdGVyb2lkKSwgYW5kCiAgICAgICAgICAgICAnNjdwL2NodXJ5dW1vdi1nZXJhc2ltZW5rbyAoYSBjb21ldCkuICBUaGUgQVNDSUkgdmFsdWUKICAgICAgICAgICAgIFNIT1VMRCBoYXZlIHVwcGVyY2FzZSBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlIGFuZCBub3QKICAgICAgICAgICAgIGluY2x1ZGUgY29udHJvbCBjaGFyYWN0ZXJzIChpLmUuLCB2YWx1ZXMgMzIuLjY0LCBhbmQKICAgICAgICAgICAgIDkxLi4xMjYpLiAgQW55IHByZWNlZGluZyAndGhlJyBpbiB0aGUgbmFtZSBTSE9VTEQgTk9UIGJlCiAgICAgICAgICAgICBpbmNsdWRlZC4iOwogICAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAgICJodHRwczovL3d3dy5pYXUub3JnLyI7CiAgICAgICAgfQogICAgICAgIGNvbnRhaW5lciBnZW9kZXRpYy1zeXN0ZW0gewogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBnZW9kZXRpYyBzeXN0ZW0gb2YgdGhlIGxvY2F0aW9uIGRhdGEuIjsKICAgICAgICAgIGxlYWYgZ2VvZGV0aWMtZGF0dW0gewogICAgICAgICAgICB0eXBlIHN0cmluZyB7CiAgICAgICAgICAgICAgcGF0dGVybiAnWyAtQFxbLVxeXy1+XSonOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkEgZ2VvZGV0aWMtZGF0dW0gZGVmaW5pbmcgdGhlIG1lYW5pbmcgb2YgbGF0aXR1ZGUsCiAgICAgICAgICAgICAgIGxvbmdpdHVkZSwgYW5kIGhlaWdodC4gIFRoZSBkZWZhdWx0IHdoZW4gdGhlCiAgICAgICAgICAgICAgIGFzdHJvbm9taWNhbCBib2R5IGlzICdlYXJ0aCcgaXMgJ3dncy04NCcsIHdoaWNoIGlzCiAgICAgICAgICAgICAgIHVzZWQgYnkgdGhlIEdsb2JhbCBQb3NpdGlvbmluZyBTeXN0ZW0gKEdQUykuICBUaGUKICAgICAgICAgICAgICAgQVNDSUkgdmFsdWUgU0hPVUxEIGhhdmUgdXBwZXJjYXNlIGNvbnZlcnRlZCB0bwogICAgICAgICAgICAgICBsb3dlcmNhc2UgYW5kIG5vdCBpbmNsdWRlIGNvbnRyb2wgY2hhcmFjdGVycwogICAgICAgICAgICAgICAoaS5lLiwgdmFsdWVzIDMyLi42NCwgYW5kIDkxLi4xMjYpLiAgVGhlIElBTkEgcmVnaXN0cnkKICAgICAgICAgICAgICAgZnVydGhlciByZXN0cmljdHMgdGhlIHZhbHVlIGJ5IGNvbnZlcnRpbmcgYWxsIHNwYWNlcwogICAgICAgICAgICAgICAoJyAnKSB0byBkYXNoZXMgKCctJykuCiAgICAgICAgICAgICAgIFRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgZ2VvZGV0aWMtZGF0dW0gaW5kaWNhdGVzCiAgICAgICAgICAgICAgIGhvdyBhY2N1cmF0ZWx5IGl0IG1vZGVscyB0aGUgYXN0cm9ub21pY2FsIGJvZHkgaW4KICAgICAgICAgICAgICAgcXVlc3Rpb24sIGJvdGggZm9yIHRoZSAnaG9yaXpvbnRhbCcKICAgICAgICAgICAgICAgbGF0aXR1ZGUvbG9uZ2l0dWRlIGNvb3JkaW5hdGVzIGFuZCBmb3IgaGVpZ2h0CiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiI7CiAgICAgICAgICAgIHJlZmVyZW5jZQogICAgICAgICAgICAgICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucywKICAgICAgICAgICAgICAgU2VjdGlvbiA2LjEiOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBjb29yZC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgYWNjdXJhY3kgb2YgdGhlIGxhdGl0dWRlL2xvbmdpdHVkZSBwYWlyIGZvcgogICAgICAgICAgICAgICBlbGxpcHNvaWRhbCBjb29yZGluYXRlcywgb3IgdGhlIFgsIFksIGFuZCBaIGNvbXBvbmVudHMKICAgICAgICAgICAgICAgZm9yIENhcnRlc2lhbiBjb29yZGluYXRlcy4gIFdoZW4gY29vcmQtYWNjdXJhY3kgaXMKICAgICAgICAgICAgICAgc3BlY2lmaWVkLCBpdCBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgY29vcmRpbmF0ZXMKICAgICAgICAgICAgICAgaW4gdGhlIGFzc29jaWF0ZWQgbGlzdCBvZiBsb2NhdGlvbnMgaGF2ZSBiZWVuCiAgICAgICAgICAgICAgIGRldGVybWluZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBjb29yZGluYXRlIHN5c3RlbQogICAgICAgICAgICAgICBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1kYXR1bS4gIEZvciBleGFtcGxlLCB0aGVyZQogICAgICAgICAgICAgICBtaWdodCBiZSB1bmNlcnRhaW50eSBkdWUgdG8gbWVhc3VyZW1lbnQgZXJyb3IgaWYgYW4KICAgICAgICAgICAgICAgZXhwZXJpbWVudGFsIG1lYXN1cmVtZW50IHdhcyBtYWRlIHRvIGRldGVybWluZSBlYWNoCiAgICAgICAgICAgICAgIGxvY2F0aW9uLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIGhlaWdodC1hY2N1cmFjeSB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGFjY3VyYWN5IG9mIHRoZSBoZWlnaHQgdmFsdWUgZm9yIGVsbGlwc29pZGFsCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzOyB0aGlzIHZhbHVlIGlzIG5vdCB1c2VkIHdpdGggQ2FydGVzaWFuCiAgICAgICAgICAgICAgIGNvb3JkaW5hdGVzLiAgV2hlbiBoZWlnaHQtYWNjdXJhY3kgaXMgc3BlY2lmaWVkLCBpdAogICAgICAgICAgICAgICBpbmRpY2F0ZXMgaG93IHByZWNpc2VseSB0aGUgaGVpZ2h0cyBpbiB0aGUKICAgICAgICAgICAgICAgYXNzb2NpYXRlZCBsaXN0IG9mIGxvY2F0aW9ucyBoYXZlIGJlZW4gZGV0ZXJtaW5lZAogICAgICAgICAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGRlZmluZWQgYnkgdGhlCiAgICAgICAgICAgICAgIGdlb2RldGljLWRhdHVtLiAgRm9yIGV4YW1wbGUsIHRoZXJlIG1pZ2h0IGJlCiAgICAgICAgICAgICAgIHVuY2VydGFpbnR5IGR1ZSB0byBtZWFzdXJlbWVudCBlcnJvciBpZiBhbgogICAgICAgICAgICAgICBleHBlcmltZW50YWwgbWVhc3VyZW1lbnQgd2FzIG1hZGUgdG8gZGV0ZXJtaW5lIGVhY2gKICAgICAgICAgICAgICAgbG9jYXRpb24uIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY2hvaWNlIGxvY2F0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlRoZSBsb2NhdGlvbiBkYXRhIGVpdGhlciBpbiBsYXRpdHVkZS9sb25naXR1ZGUgb3IKICAgICAgICAgICBDYXJ0ZXNpYW4gdmFsdWVzIjsKICAgICAgICBjYXNlIGVsbGlwc29pZCB7CiAgICAgICAgICBsZWFmIGxhdGl0dWRlIHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIGxhdGl0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBsb25naXR1ZGUgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJkZWNpbWFsIGRlZ3JlZXMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgbG9uZ2l0dWRlIHZhbHVlIG9uIHRoZSBhc3Ryb25vbWljYWwgYm9keS4gIFRoZQogICAgICAgICAgICAgICBkZWZpbml0aW9uIGFuZCBwcmVjaXNpb24gb2YgdGhpcyBtZWFzdXJlbWVudCBpcwogICAgICAgICAgICAgICBpbmRpY2F0ZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiBoZWlnaHQgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIkhlaWdodCBmcm9tIGEgcmVmZXJlbmNlIDAgdmFsdWUuICBUaGUgcHJlY2lzaW9uIGFuZAogICAgICAgICAgICAgICAnMCcgdmFsdWUgaXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhc2UgY2FydGVzaWFuIHsKICAgICAgICAgIGxlYWYgeCB7CiAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bml0cyAibWV0ZXJzIjsKICAgICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgICAiVGhlIFggdmFsdWUgYXMgZGVmaW5lZCBieSB0aGUgcmVmZXJlbmNlLWZyYW1lLiI7CiAgICAgICAgICB9CiAgICAgICAgICBsZWFmIHkgewogICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDY7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdW5pdHMgIm1ldGVycyI7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgIlRoZSBZIHZhbHVlIGFzIGRlZmluZWQgYnkgdGhlIHJlZmVyZW5jZS1mcmFtZS4iOwogICAgICAgICAgfQogICAgICAgICAgbGVhZiB6IHsKICAgICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyA2OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuaXRzICJtZXRlcnMiOwogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICJUaGUgWiB2YWx1ZSBhcyBkZWZpbmVkIGJ5IHRoZSByZWZlcmVuY2UtZnJhbWUuIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29udGFpbmVyIHZlbG9jaXR5IHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIklmIHRoZSBvYmplY3QgaXMgaW4gbW90aW9uLCB0aGUgdmVsb2NpdHkgdmVjdG9yIGRlc2NyaWJlcwogICAgICAgICAgIHRoaXMgbW90aW9uIGF0IHRoZSB0aW1lIGdpdmVuIGJ5IHRoZSB0aW1lc3RhbXAuICBGb3IgYQogICAgICAgICAgIGZvcm11bGEgdG8gY29udmVydCB0aGVzZSB2YWx1ZXMgdG8gc3BlZWQgYW5kIGhlYWRpbmcsIHNlZQogICAgICAgICAgIFJGQyA5MTc5LiI7CiAgICAgICAgcmVmZXJlbmNlCiAgICAgICAgICAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwoKICAgICAgICBsZWFmIHYtbm9ydGggewogICAgICAgICAgdHlwZSBkZWNpbWFsNjQgewogICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTI7CiAgICAgICAgICB9CiAgICAgICAgICB1bml0cyAibWV0ZXJzIHBlciBzZWNvbmQiOwogICAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgInYtbm9ydGggaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgdG93YXJkcwogICAgICAgICAgICAgdHJ1ZSBub3J0aCBhcyBkZWZpbmVkIGJ5IHRoZSBnZW9kZXRpYy1zeXN0ZW0uIjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdi1lYXN0IHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LWVhc3QgaXMgdGhlIHJhdGUgb2YgY2hhbmdlIChpLmUuLCBzcGVlZCkgcGVycGVuZGljdWxhcgogICAgICAgICAgICAgdG8gdGhlIHJpZ2h0IG9mIHRydWUgbm9ydGggYXMgZGVmaW5lZCBieQogICAgICAgICAgICAgdGhlIGdlb2RldGljLXN5c3RlbS4iOwogICAgICAgIH0KCiAgICAgICAgbGVhZiB2LXVwIHsKICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDEyOwogICAgICAgICAgfQogICAgICAgICAgdW5pdHMgIm1ldGVycyBwZXIgc2Vjb25kIjsKICAgICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJ2LXVwIGlzIHRoZSByYXRlIG9mIGNoYW5nZSAoaS5lLiwgc3BlZWQpIGF3YXkgZnJvbSB0aGUKICAgICAgICAgICAgIGNlbnRlciBvZiBtYXNzLiI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGxlYWYgdGltZXN0YW1wIHsKICAgICAgICB0eXBlIHlhbmc6ZGF0ZS1hbmQtdGltZTsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgIlJlZmVyZW5jZSB0aW1lIHdoZW4gbG9jYXRpb24gd2FzIHJlY29yZGVkLiI7CiAgICAgIH0KICAgICAgbGVhZiB2YWxpZC11bnRpbCB7CiAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICJUaGUgdGltZXN0YW1wIGZvciB3aGljaCB0aGlzIGdlby1sb2NhdGlvbiBpcyB2YWxpZCB1bnRpbC4KICAgICAgICAgICBJZiB1bnNwZWNpZmllZCwgdGhlIGdlby1sb2NhdGlvbiBoYXMgbm8gc3BlY2lmaWMKICAgICAgICAgICBleHBpcmF0aW9uIHRpbWUuIjsKICAgICAgfQogICAgfQogIH0KfQo=
ietf-yang-types urn:ietf:params:xml:ns:yang:ietf-yang-types \N [] 2013-07-15 bW9kdWxlIGlldGYteWFuZy10eXBlcyB7CgogIG5hbWVzcGFjZSAidXJuOmlldGY6cGFyYW1zOnhtbDpuczp5YW5nOmlldGYteWFuZy10eXBlcyI7CiAgcHJlZml4ICJ5YW5nIjsKCiAgb3JnYW5pemF0aW9uCiAgICJJRVRGIE5FVE1PRCAoTkVUQ09ORiBEYXRhIE1vZGVsaW5nIExhbmd1YWdlKSBXb3JraW5nIEdyb3VwIjsKCiAgY29udGFjdAogICAiV0cgV2ViOiAgIDxodHRwOi8vdG9vbHMuaWV0Zi5vcmcvd2cvbmV0bW9kLz4KICAgIFdHIExpc3Q6ICA8bWFpbHRvOm5ldG1vZEBpZXRmLm9yZz4KCiAgICBXRyBDaGFpcjogRGF2aWQgS2Vzc2VucwogICAgICAgICAgICAgIDxtYWlsdG86ZGF2aWQua2Vzc2Vuc0Buc24uY29tPgoKICAgIFdHIENoYWlyOiBKdWVyZ2VuIFNjaG9lbndhZWxkZXIKICAgICAgICAgICAgICA8bWFpbHRvOmouc2Nob2Vud2FlbGRlckBqYWNvYnMtdW5pdmVyc2l0eS5kZT4KCiAgICBFZGl0b3I6ICAgSnVlcmdlbiBTY2hvZW53YWVsZGVyCiAgICAgICAgICAgICAgPG1haWx0bzpqLnNjaG9lbndhZWxkZXJAamFjb2JzLXVuaXZlcnNpdHkuZGU+IjsKCiAgZGVzY3JpcHRpb24KICAgIlRoaXMgbW9kdWxlIGNvbnRhaW5zIGEgY29sbGVjdGlvbiBvZiBnZW5lcmFsbHkgdXNlZnVsIGRlcml2ZWQKICAgIFlBTkcgZGF0YSB0eXBlcy4KCiAgICBDb3B5cmlnaHQgKGMpIDIwMTMgSUVURiBUcnVzdCBhbmQgdGhlIHBlcnNvbnMgaWRlbnRpZmllZCBhcwogICAgYXV0aG9ycyBvZiB0aGUgY29kZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCgogICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgogICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwdXJzdWFudCB0bywgYW5kIHN1YmplY3QKICAgIHRvIHRoZSBsaWNlbnNlIHRlcm1zIGNvbnRhaW5lZCBpbiwgdGhlIFNpbXBsaWZpZWQgQlNEIExpY2Vuc2UKICAgIHNldCBmb3J0aCBpbiBTZWN0aW9uIDQuYyBvZiB0aGUgSUVURiBUcnVzdCdzIExlZ2FsIFByb3Zpc2lvbnMKICAgIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzCiAgICAoaHR0cDovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvKS4KCiAgICBUaGlzIHZlcnNpb24gb2YgdGhpcyBZQU5HIG1vZHVsZSBpcyBwYXJ0IG9mIFJGQyA2OTkxOyBzZWUKICAgIHRoZSBSRkMgaXRzZWxmIGZvciBmdWxsIGxlZ2FsIG5vdGljZXMuIjsKCiAgcmV2aXNpb24gMjAxMy0wNy0xNSB7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGlzIHJldmlzaW9uIGFkZHMgdGhlIGZvbGxvd2luZyBuZXcgZGF0YSB0eXBlczoKICAgICAgLSB5YW5nLWlkZW50aWZpZXIKICAgICAgLSBoZXgtc3RyaW5nCiAgICAgIC0gdXVpZAogICAgICAtIGRvdHRlZC1xdWFkIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNjk5MTogQ29tbW9uIFlBTkcgRGF0YSBUeXBlcyI7CiAgfQoKICByZXZpc2lvbiAyMDEwLTA5LTI0IHsKICAgIGRlc2NyaXB0aW9uCiAgICAgIkluaXRpYWwgcmV2aXNpb24uIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNjAyMTogQ29tbW9uIFlBTkcgRGF0YSBUeXBlcyI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2YgY291bnRlciBhbmQgZ2F1Z2UgdHlwZXMgKioqLwoKICB0eXBlZGVmIGNvdW50ZXIzMiB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBjb3VudGVyMzIgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIKICAgICAgdGhhdCBtb25vdG9uaWNhbGx5IGluY3JlYXNlcyB1bnRpbCBpdCByZWFjaGVzIGEKICAgICAgbWF4aW11bSB2YWx1ZSBvZiAyXjMyLTEgKDQyOTQ5NjcyOTUgZGVjaW1hbCksIHdoZW4gaXQKICAgICAgd3JhcHMgYXJvdW5kIGFuZCBzdGFydHMgaW5jcmVhc2luZyBhZ2FpbiBmcm9tIHplcm8uCgogICAgICBDb3VudGVycyBoYXZlIG5vIGRlZmluZWQgJ2luaXRpYWwnIHZhbHVlLCBhbmQgdGh1cywgYQogICAgICBzaW5nbGUgdmFsdWUgb2YgYSBjb3VudGVyIGhhcyAoaW4gZ2VuZXJhbCkgbm8gaW5mb3JtYXRpb24KICAgICAgY29udGVudC4gIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCiAgICAgIHZhbHVlIG5vcm1hbGx5IG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZQogICAgICBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIHNwZWNpZmllZCBpbiB0aGUKICAgICAgZGVzY3JpcHRpb24gb2YgYSBzY2hlbWEgbm9kZSB1c2luZyB0aGlzIHR5cGUuICBJZiBzdWNoCiAgICAgIG90aGVyIHRpbWVzIGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsIHRoZSBjcmVhdGlvbiBvZgogICAgICBhIHNjaGVtYSBub2RlIG9mIHR5cGUgY291bnRlcjMyIGF0IHRpbWVzIG90aGVyIHRoYW4KICAgICAgcmUtaW5pdGlhbGl6YXRpb24sIHRoZW4gYSBjb3JyZXNwb25kaW5nIHNjaGVtYSBub2RlCiAgICAgIHNob3VsZCBiZSBkZWZpbmVkLCB3aXRoIGFuIGFwcHJvcHJpYXRlIHR5cGUsIHRvIGluZGljYXRlCiAgICAgIHRoZSBsYXN0IGRpc2NvbnRpbnVpdHkuCgogICAgICBUaGUgY291bnRlcjMyIHR5cGUgc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBjb25maWd1cmF0aW9uCiAgICAgIHNjaGVtYSBub2Rlcy4gIEEgZGVmYXVsdCBzdGF0ZW1lbnQgU0hPVUxEIE5PVCBiZSB1c2VkIGluCiAgICAgIGNvbWJpbmF0aW9uIHdpdGggdGhlIHR5cGUgY291bnRlcjMyLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIENvdW50ZXIzMiB0eXBlIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyNTc4OiBTdHJ1Y3R1cmUgb2YgTWFuYWdlbWVudCBJbmZvcm1hdGlvbiBWZXJzaW9uIDIKICAgICAgICAgICAgICAgIChTTUl2MikiOwogIH0KCiAgdHlwZWRlZiB6ZXJvLWJhc2VkLWNvdW50ZXIzMiB7CiAgICB0eXBlIHlhbmc6Y291bnRlcjMyOwogICAgZGVmYXVsdCAiMCI7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgemVyby1iYXNlZC1jb3VudGVyMzIgdHlwZSByZXByZXNlbnRzIGEgY291bnRlcjMyCiAgICAgIHRoYXQgaGFzIHRoZSBkZWZpbmVkICdpbml0aWFsJyB2YWx1ZSB6ZXJvLgoKICAgICAgQSBzY2hlbWEgbm9kZSBvZiB0aGlzIHR5cGUgd2lsbCBiZSBzZXQgdG8gemVybyAoMCkgb24gY3JlYXRpb24KICAgICAgYW5kIHdpbGwgdGhlcmVhZnRlciBpbmNyZWFzZSBtb25vdG9uaWNhbGx5IHVudGlsIGl0IHJlYWNoZXMKICAgICAgYSBtYXhpbXVtIHZhbHVlIG9mIDJeMzItMSAoNDI5NDk2NzI5NSBkZWNpbWFsKSwgd2hlbiBpdAogICAgICB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIFByb3ZpZGVkIHRoYXQgYW4gYXBwbGljYXRpb24gZGlzY292ZXJzIGEgbmV3IHNjaGVtYSBub2RlCiAgICAgIG9mIHRoaXMgdHlwZSB3aXRoaW4gdGhlIG1pbmltdW0gdGltZSB0byB3cmFwLCBpdCBjYW4gdXNlIHRoZQogICAgICAnaW5pdGlhbCcgdmFsdWUgYXMgYSBkZWx0YS4gIEl0IGlzIGltcG9ydGFudCBmb3IgYSBtYW5hZ2VtZW50CiAgICAgIHN0YXRpb24gdG8gYmUgYXdhcmUgb2YgdGhpcyBtaW5pbXVtIHRpbWUgYW5kIHRoZSBhY3R1YWwgdGltZQogICAgICBiZXR3ZWVuIHBvbGxzLCBhbmQgdG8gZGlzY2FyZCBkYXRhIGlmIHRoZSBhY3R1YWwgdGltZSBpcyB0b28KICAgICAgbG9uZyBvciB0aGVyZSBpcyBubyBkZWZpbmVkIG1pbmltdW0gdGltZS4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBaZXJvQmFzZWRDb3VudGVyMzIgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgICJSRkMgNDUwMjogUmVtb3RlIE5ldHdvcmsgTW9uaXRvcmluZyBNYW5hZ2VtZW50IEluZm9ybWF0aW9uCiAgICAgICAgICAgICAgICAgQmFzZSBWZXJzaW9uIDIiOwogIH0KCiAgdHlwZWRlZiBjb3VudGVyNjQgewogICAgdHlwZSB1aW50NjQ7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgY291bnRlcjY0IHR5cGUgcmVwcmVzZW50cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyCiAgICAgIHRoYXQgbW9ub3RvbmljYWxseSBpbmNyZWFzZXMgdW50aWwgaXQgcmVhY2hlcyBhCiAgICAgIG1heGltdW0gdmFsdWUgb2YgMl42NC0xICgxODQ0Njc0NDA3MzcwOTU1MTYxNSBkZWNpbWFsKSwKICAgICAgd2hlbiBpdCB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIENvdW50ZXJzIGhhdmUgbm8gZGVmaW5lZCAnaW5pdGlhbCcgdmFsdWUsIGFuZCB0aHVzLCBhCiAgICAgIHNpbmdsZSB2YWx1ZSBvZiBhIGNvdW50ZXIgaGFzIChpbiBnZW5lcmFsKSBubyBpbmZvcm1hdGlvbgogICAgICBjb250ZW50LiAgRGlzY29udGludWl0aWVzIGluIHRoZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcKICAgICAgdmFsdWUgbm9ybWFsbHkgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlCiAgICAgIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgc3BlY2lmaWVkIGluIHRoZQogICAgICBkZXNjcmlwdGlvbiBvZiBhIHNjaGVtYSBub2RlIHVzaW5nIHRoaXMgdHlwZS4gIElmIHN1Y2gKICAgICAgb3RoZXIgdGltZXMgY2FuIG9jY3VyLCBmb3IgZXhhbXBsZSwgdGhlIGNyZWF0aW9uIG9mCiAgICAgIGEgc2NoZW1hIG5vZGUgb2YgdHlwZSBjb3VudGVyNjQgYXQgdGltZXMgb3RoZXIgdGhhbgogICAgICByZS1pbml0aWFsaXphdGlvbiwgdGhlbiBhIGNvcnJlc3BvbmRpbmcgc2NoZW1hIG5vZGUKICAgICAgc2hvdWxkIGJlIGRlZmluZWQsIHdpdGggYW4gYXBwcm9wcmlhdGUgdHlwZSwgdG8gaW5kaWNhdGUKICAgICAgdGhlIGxhc3QgZGlzY29udGludWl0eS4KCiAgICAgIFRoZSBjb3VudGVyNjQgdHlwZSBzaG91bGQgbm90IGJlIHVzZWQgZm9yIGNvbmZpZ3VyYXRpb24KICAgICAgc2NoZW1hIG5vZGVzLiAgQSBkZWZhdWx0IHN0YXRlbWVudCBTSE9VTEQgTk9UIGJlIHVzZWQgaW4KICAgICAgY29tYmluYXRpb24gd2l0aCB0aGUgdHlwZSBjb3VudGVyNjQuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgQ291bnRlcjY0IHR5cGUgb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDI1Nzg6IFN0cnVjdHVyZSBvZiBNYW5hZ2VtZW50IEluZm9ybWF0aW9uIFZlcnNpb24gMgogICAgICAgICAgICAgICAgKFNNSXYyKSI7CiAgfQoKICB0eXBlZGVmIHplcm8tYmFzZWQtY291bnRlcjY0IHsKICAgIHR5cGUgeWFuZzpjb3VudGVyNjQ7CiAgICBkZWZhdWx0ICIwIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSB6ZXJvLWJhc2VkLWNvdW50ZXI2NCB0eXBlIHJlcHJlc2VudHMgYSBjb3VudGVyNjQgdGhhdAogICAgICBoYXMgdGhlIGRlZmluZWQgJ2luaXRpYWwnIHZhbHVlIHplcm8uCgogICAgICBBIHNjaGVtYSBub2RlIG9mIHRoaXMgdHlwZSB3aWxsIGJlIHNldCB0byB6ZXJvICgwKSBvbiBjcmVhdGlvbgogICAgICBhbmQgd2lsbCB0aGVyZWFmdGVyIGluY3JlYXNlIG1vbm90b25pY2FsbHkgdW50aWwgaXQgcmVhY2hlcwogICAgICBhIG1heGltdW0gdmFsdWUgb2YgMl42NC0xICgxODQ0Njc0NDA3MzcwOTU1MTYxNSBkZWNpbWFsKSwKICAgICAgd2hlbiBpdCB3cmFwcyBhcm91bmQgYW5kIHN0YXJ0cyBpbmNyZWFzaW5nIGFnYWluIGZyb20gemVyby4KCiAgICAgIFByb3ZpZGVkIHRoYXQgYW4gYXBwbGljYXRpb24gZGlzY292ZXJzIGEgbmV3IHNjaGVtYSBub2RlCiAgICAgIG9mIHRoaXMgdHlwZSB3aXRoaW4gdGhlIG1pbmltdW0gdGltZSB0byB3cmFwLCBpdCBjYW4gdXNlIHRoZQogICAgICAnaW5pdGlhbCcgdmFsdWUgYXMgYSBkZWx0YS4gIEl0IGlzIGltcG9ydGFudCBmb3IgYSBtYW5hZ2VtZW50CiAgICAgIHN0YXRpb24gdG8gYmUgYXdhcmUgb2YgdGhpcyBtaW5pbXVtIHRpbWUgYW5kIHRoZSBhY3R1YWwgdGltZQogICAgICBiZXR3ZWVuIHBvbGxzLCBhbmQgdG8gZGlzY2FyZCBkYXRhIGlmIHRoZSBhY3R1YWwgdGltZSBpcyB0b28KICAgICAgbG9uZyBvciB0aGVyZSBpcyBubyBkZWZpbmVkIG1pbmltdW0gdGltZS4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBaZXJvQmFzZWRDb3VudGVyNjQgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyODU2OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBBZGRpdGlvbmFsIEhpZ2ggQ2FwYWNpdHkKICAgICAgICAgICAgICAgIERhdGEgVHlwZXMiOwogIH0KCiAgdHlwZWRlZiBnYXVnZTMyIHsKICAgIHR5cGUgdWludDMyOwogICAgZGVzY3JpcHRpb24KICAgICAiVGhlIGdhdWdlMzIgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHdoaWNoCiAgICAgIG1heSBpbmNyZWFzZSBvciBkZWNyZWFzZSwgYnV0IHNoYWxsIG5ldmVyIGV4Y2VlZCBhIG1heGltdW0KICAgICAgdmFsdWUsIG5vciBmYWxsIGJlbG93IGEgbWluaW11bSB2YWx1ZS4gIFRoZSBtYXhpbXVtIHZhbHVlCiAgICAgIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gMl4zMi0xICg0Mjk0OTY3Mjk1IGRlY2ltYWwpLCBhbmQKICAgICAgdGhlIG1pbmltdW0gdmFsdWUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLiAgVGhlIHZhbHVlIG9mCiAgICAgIGEgZ2F1Z2UzMiBoYXMgaXRzIG1heGltdW0gdmFsdWUgd2hlbmV2ZXIgdGhlIGluZm9ybWF0aW9uCiAgICAgIGJlaW5nIG1vZGVsZWQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGl0cyBtYXhpbXVtCiAgICAgIHZhbHVlLCBhbmQgaGFzIGl0cyBtaW5pbXVtIHZhbHVlIHdoZW5ldmVyIHRoZSBpbmZvcm1hdGlvbgogICAgICBiZWluZyBtb2RlbGVkIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBpdHMgbWluaW11bSB2YWx1ZS4KICAgICAgSWYgdGhlIGluZm9ybWF0aW9uIGJlaW5nIG1vZGVsZWQgc3Vic2VxdWVudGx5IGRlY3JlYXNlcwogICAgICBiZWxvdyAoaW5jcmVhc2VzIGFib3ZlKSB0aGUgbWF4aW11bSAobWluaW11bSkgdmFsdWUsIHRoZQogICAgICBnYXVnZTMyIGFsc28gZGVjcmVhc2VzIChpbmNyZWFzZXMpLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIEdhdWdlMzIgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgZ2F1Z2U2NCB7CiAgICB0eXBlIHVpbnQ2NDsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSBnYXVnZTY0IHR5cGUgcmVwcmVzZW50cyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB3aGljaAogICAgICBtYXkgaW5jcmVhc2Ugb3IgZGVjcmVhc2UsIGJ1dCBzaGFsbCBuZXZlciBleGNlZWQgYSBtYXhpbXVtCiAgICAgIHZhbHVlLCBub3IgZmFsbCBiZWxvdyBhIG1pbmltdW0gdmFsdWUuICBUaGUgbWF4aW11bSB2YWx1ZQogICAgICBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDJeNjQtMSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUpLCBhbmQKICAgICAgdGhlIG1pbmltdW0gdmFsdWUgY2Fubm90IGJlIHNtYWxsZXIgdGhhbiAwLiAgVGhlIHZhbHVlIG9mCiAgICAgIGEgZ2F1Z2U2NCBoYXMgaXRzIG1heGltdW0gdmFsdWUgd2hlbmV2ZXIgdGhlIGluZm9ybWF0aW9uCiAgICAgIGJlaW5nIG1vZGVsZWQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGl0cyBtYXhpbXVtCiAgICAgIHZhbHVlLCBhbmQgaGFzIGl0cyBtaW5pbXVtIHZhbHVlIHdoZW5ldmVyIHRoZSBpbmZvcm1hdGlvbgogICAgICBiZWluZyBtb2RlbGVkIGlzIHNtYWxsZXIgdGhhbiBvciBlcXVhbCB0byBpdHMgbWluaW11bSB2YWx1ZS4KICAgICAgSWYgdGhlIGluZm9ybWF0aW9uIGJlaW5nIG1vZGVsZWQgc3Vic2VxdWVudGx5IGRlY3JlYXNlcwogICAgICBiZWxvdyAoaW5jcmVhc2VzIGFib3ZlKSB0aGUgbWF4aW11bSAobWluaW11bSkgdmFsdWUsIHRoZQogICAgICBnYXVnZTY0IGFsc28gZGVjcmVhc2VzIChpbmNyZWFzZXMpLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIENvdW50ZXJCYXNlZEdhdWdlNjQgU01JdjIgdGV4dHVhbCBjb252ZW50aW9uIGRlZmluZWQKICAgICAgaW4gUkZDIDI4NTYiOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyODU2OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBBZGRpdGlvbmFsIEhpZ2ggQ2FwYWNpdHkKICAgICAgICAgICAgICAgIERhdGEgVHlwZXMiOwogIH0KCiAgLyoqKiBjb2xsZWN0aW9uIG9mIGlkZW50aWZpZXItcmVsYXRlZCB0eXBlcyAqKiovCgogIHR5cGVkZWYgb2JqZWN0LWlkZW50aWZpZXIgewogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICcoKFswLTFdKFwuWzEtM10/WzAtOV0pKXwoMlwuKDB8KFsxLTldXGQqKSkpKScKICAgICAgICAgICAgKyAnKFwuKDB8KFsxLTldXGQqKSkpKic7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgb2JqZWN0LWlkZW50aWZpZXIgdHlwZSByZXByZXNlbnRzIGFkbWluaXN0cmF0aXZlbHkKICAgICAgYXNzaWduZWQgbmFtZXMgaW4gYSByZWdpc3RyYXRpb24taGllcmFyY2hpY2FsLW5hbWUgdHJlZS4KCiAgICAgIFZhbHVlcyBvZiB0aGlzIHR5cGUgYXJlIGRlbm90ZWQgYXMgYSBzZXF1ZW5jZSBvZiBudW1lcmljYWwKICAgICAgbm9uLW5lZ2F0aXZlIHN1Yi1pZGVudGlmaWVyIHZhbHVlcy4gIEVhY2ggc3ViLWlkZW50aWZpZXIKICAgICAgdmFsdWUgTVVTVCBOT1QgZXhjZWVkIDJeMzItMSAoNDI5NDk2NzI5NSkuICBTdWItaWRlbnRpZmllcnMKICAgICAgYXJlIHNlcGFyYXRlZCBieSBzaW5nbGUgZG90cyBhbmQgd2l0aG91dCBhbnkgaW50ZXJtZWRpYXRlCiAgICAgIHdoaXRlc3BhY2UuCgogICAgICBUaGUgQVNOLjEgc3RhbmRhcmQgcmVzdHJpY3RzIHRoZSB2YWx1ZSBzcGFjZSBvZiB0aGUgZmlyc3QKICAgICAgc3ViLWlkZW50aWZpZXIgdG8gMCwgMSwgb3IgMi4gIEZ1cnRoZXJtb3JlLCB0aGUgdmFsdWUgc3BhY2UKICAgICAgb2YgdGhlIHNlY29uZCBzdWItaWRlbnRpZmllciBpcyByZXN0cmljdGVkIHRvIHRoZSByYW5nZQogICAgICAwIHRvIDM5IGlmIHRoZSBmaXJzdCBzdWItaWRlbnRpZmllciBpcyAwIG9yIDEuICBGaW5hbGx5LAogICAgICB0aGUgQVNOLjEgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBhbiBvYmplY3QgaWRlbnRpZmllcgogICAgICBoYXMgYWx3YXlzIGF0IGxlYXN0IHR3byBzdWItaWRlbnRpZmllcnMuICBUaGUgcGF0dGVybgogICAgICBjYXB0dXJlcyB0aGVzZSByZXN0cmljdGlvbnMuCgogICAgICBBbHRob3VnaCB0aGUgbnVtYmVyIG9mIHN1Yi1pZGVudGlmaWVycyBpcyBub3QgbGltaXRlZCwKICAgICAgbW9kdWxlIGRlc2lnbmVycyBzaG91bGQgcmVhbGl6ZSB0aGF0IHRoZXJlIG1heSBiZQogICAgICBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdGljayB3aXRoIHRoZSBTTUl2MiBsaW1pdCBvZiAxMjgKICAgICAgc3ViLWlkZW50aWZpZXJzLgoKICAgICAgVGhpcyB0eXBlIGlzIGEgc3VwZXJzZXQgb2YgdGhlIFNNSXYyIE9CSkVDVCBJREVOVElGSUVSIHR5cGUKICAgICAgc2luY2UgaXQgaXMgbm90IHJlc3RyaWN0ZWQgdG8gMTI4IHN1Yi1pZGVudGlmaWVycy4gIEhlbmNlLAogICAgICB0aGlzIHR5cGUgU0hPVUxEIE5PVCBiZSB1c2VkIHRvIHJlcHJlc2VudCB0aGUgU01JdjIgT0JKRUNUCiAgICAgIElERU5USUZJRVIgdHlwZTsgdGhlIG9iamVjdC1pZGVudGlmaWVyLTEyOCB0eXBlIFNIT1VMRCBiZQogICAgICB1c2VkIGluc3RlYWQuIjsKICAgIHJlZmVyZW5jZQogICAgICJJU085ODM0LTE6IEluZm9ybWF0aW9uIHRlY2hub2xvZ3kgLS0gT3BlbiBTeXN0ZW1zCiAgICAgIEludGVyY29ubmVjdGlvbiAtLSBQcm9jZWR1cmVzIGZvciB0aGUgb3BlcmF0aW9uIG9mIE9TSQogICAgICBSZWdpc3RyYXRpb24gQXV0aG9yaXRpZXM6IEdlbmVyYWwgcHJvY2VkdXJlcyBhbmQgdG9wCiAgICAgIGFyY3Mgb2YgdGhlIEFTTi4xIE9iamVjdCBJZGVudGlmaWVyIHRyZWUiOwogIH0KCiAgdHlwZWRlZiBvYmplY3QtaWRlbnRpZmllci0xMjggewogICAgdHlwZSBvYmplY3QtaWRlbnRpZmllciB7CiAgICAgIHBhdHRlcm4gJ1xkKihcLlxkKil7MSwxMjd9JzsKICAgIH0KICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoaXMgdHlwZSByZXByZXNlbnRzIG9iamVjdC1pZGVudGlmaWVycyByZXN0cmljdGVkIHRvIDEyOAogICAgICBzdWItaWRlbnRpZmllcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgT0JKRUNUIElERU5USUZJRVIgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgeWFuZy1pZGVudGlmaWVyIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgbGVuZ3RoICIxLi5tYXgiOwogICAgICBwYXR0ZXJuICdbYS16QS1aX11bYS16QS1aMC05XC1fLl0qJzsKICAgICAgcGF0dGVybiAnLnwuLnxbXnhYXS4qfC5bXm1NXS4qfC4uW15sTF0uKic7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICAiQSBZQU5HIGlkZW50aWZpZXIgc3RyaW5nIGFzIGRlZmluZWQgYnkgdGhlICdpZGVudGlmaWVyJwogICAgICAgcnVsZSBpbiBTZWN0aW9uIDEyIG9mIFJGQyA2MDIwLiAgQW4gaWRlbnRpZmllciBtdXN0CiAgICAgICBzdGFydCB3aXRoIGFuIGFscGhhYmV0aWMgY2hhcmFjdGVyIG9yIGFuIHVuZGVyc2NvcmUKICAgICAgIGZvbGxvd2VkIGJ5IGFuIGFyYml0cmFyeSBzZXF1ZW5jZSBvZiBhbHBoYWJldGljIG9yCiAgICAgICBudW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmVzLCBoeXBoZW5zLCBvciBkb3RzLgoKICAgICAgIEEgWUFORyBpZGVudGlmaWVyIE1VU1QgTk9UIHN0YXJ0IHdpdGggYW55IHBvc3NpYmxlCiAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgbG93ZXJjYXNlIG9yIHVwcGVyY2FzZSBjaGFyYWN0ZXIKICAgICAgIHNlcXVlbmNlICd4bWwnLiI7CiAgICByZWZlcmVuY2UKICAgICAgIlJGQyA2MDIwOiBZQU5HIC0gQSBEYXRhIE1vZGVsaW5nIExhbmd1YWdlIGZvciB0aGUgTmV0d29yawogICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gUHJvdG9jb2wgKE5FVENPTkYpIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiB0eXBlcyByZWxhdGVkIHRvIGRhdGUgYW5kIHRpbWUqKiovCgogIHR5cGVkZWYgZGF0ZS1hbmQtdGltZSB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJ1xkezR9LVxkezJ9LVxkezJ9VFxkezJ9OlxkezJ9OlxkezJ9KFwuXGQrKT8nCiAgICAgICAgICAgICsgJyhafFtcK1wtXVxkezJ9OlxkezJ9KSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgZGF0ZS1hbmQtdGltZSB0eXBlIGlzIGEgcHJvZmlsZSBvZiB0aGUgSVNPIDg2MDEKICAgICAgc3RhbmRhcmQgZm9yIHJlcHJlc2VudGF0aW9uIG9mIGRhdGVzIGFuZCB0aW1lcyB1c2luZyB0aGUKICAgICAgR3JlZ29yaWFuIGNhbGVuZGFyLiAgVGhlIHByb2ZpbGUgaXMgZGVmaW5lZCBieSB0aGUKICAgICAgZGF0ZS10aW1lIHByb2R1Y3Rpb24gaW4gU2VjdGlvbiA1LjYgb2YgUkZDIDMzMzkuCgogICAgICBUaGUgZGF0ZS1hbmQtdGltZSB0eXBlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgZGF0ZVRpbWUgWE1MCiAgICAgIHNjaGVtYSB0eXBlIHdpdGggdGhlIGZvbGxvd2luZyBub3RhYmxlIGV4Y2VwdGlvbnM6CgogICAgICAoYSkgVGhlIGRhdGUtYW5kLXRpbWUgdHlwZSBkb2VzIG5vdCBhbGxvdyBuZWdhdGl2ZSB5ZWFycy4KCiAgICAgIChiKSBUaGUgZGF0ZS1hbmQtdGltZSB0aW1lLW9mZnNldCAtMDA6MDAgaW5kaWNhdGVzIGFuIHVua25vd24KICAgICAgICAgIHRpbWUgem9uZSAoc2VlIFJGQyAzMzM5KSB3aGlsZSAtMDA6MDAgYW5kICswMDowMCBhbmQgWgogICAgICAgICAgYWxsIHJlcHJlc2VudCB0aGUgc2FtZSB0aW1lIHpvbmUgaW4gZGF0ZVRpbWUuCgogICAgICAoYykgVGhlIGNhbm9uaWNhbCBmb3JtYXQgKHNlZSBiZWxvdykgb2YgZGF0YS1hbmQtdGltZSB2YWx1ZXMKICAgICAgICAgIGRpZmZlcnMgZnJvbSB0aGUgY2Fub25pY2FsIGZvcm1hdCB1c2VkIGJ5IHRoZSBkYXRlVGltZSBYTUwKICAgICAgICAgIHNjaGVtYSB0eXBlLCB3aGljaCByZXF1aXJlcyBhbGwgdGltZXMgdG8gYmUgaW4gVVRDIHVzaW5nCiAgICAgICAgICB0aGUgdGltZS1vZmZzZXQgJ1onLgoKICAgICAgVGhpcyB0eXBlIGlzIG5vdCBlcXVpdmFsZW50IHRvIHRoZSBEYXRlQW5kVGltZSB0ZXh0dWFsCiAgICAgIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyIHNpbmNlIFJGQyAzMzM5IHVzZXMgYSBkaWZmZXJlbnQKICAgICAgc2VwYXJhdG9yIGJldHdlZW4gZnVsbC1kYXRlIGFuZCBmdWxsLXRpbWUgYW5kIHByb3ZpZGVzCiAgICAgIGhpZ2hlciByZXNvbHV0aW9uIG9mIHRpbWUtc2VjZnJhYy4KCiAgICAgIFRoZSBjYW5vbmljYWwgZm9ybWF0IGZvciBkYXRlLWFuZC10aW1lIHZhbHVlcyB3aXRoIGEga25vd24gdGltZQogICAgICB6b25lIHVzZXMgYSBudW1lcmljIHRpbWUgem9uZSBvZmZzZXQgdGhhdCBpcyBjYWxjdWxhdGVkIHVzaW5nCiAgICAgIHRoZSBkZXZpY2UncyBjb25maWd1cmVkIGtub3duIG9mZnNldCB0byBVVEMgdGltZS4gIEEgY2hhbmdlIG9mCiAgICAgIHRoZSBkZXZpY2UncyBvZmZzZXQgdG8gVVRDIHRpbWUgd2lsbCBjYXVzZSBkYXRlLWFuZC10aW1lIHZhbHVlcwogICAgICB0byBjaGFuZ2UgYWNjb3JkaW5nbHkuICBTdWNoIGNoYW5nZXMgbWlnaHQgaGFwcGVuIHBlcmlvZGljYWxseQogICAgICBpbiBjYXNlIGEgc2VydmVyIGZvbGxvd3MgYXV0b21hdGljYWxseSBkYXlsaWdodCBzYXZpbmcgdGltZQogICAgICAoRFNUKSB0aW1lIHpvbmUgb2Zmc2V0IGNoYW5nZXMuICBUaGUgY2Fub25pY2FsIGZvcm1hdCBmb3IKICAgICAgZGF0ZS1hbmQtdGltZSB2YWx1ZXMgd2l0aCBhbiB1bmtub3duIHRpbWUgem9uZSAodXN1YWxseQogICAgICByZWZlcnJpbmcgdG8gdGhlIG5vdGlvbiBvZiBsb2NhbCB0aW1lKSB1c2VzIHRoZSB0aW1lLW9mZnNldAogICAgICAtMDA6MDAuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMzMzOTogRGF0ZSBhbmQgVGltZSBvbiB0aGUgSW50ZXJuZXQ6IFRpbWVzdGFtcHMKICAgICAgUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyCiAgICAgIFhTRC1UWVBFUzogWE1MIFNjaGVtYSBQYXJ0IDI6IERhdGF0eXBlcyBTZWNvbmQgRWRpdGlvbiI7CiAgfQoKICB0eXBlZGVmIHRpbWV0aWNrcyB7CiAgICB0eXBlIHVpbnQzMjsKICAgIGRlc2NyaXB0aW9uCiAgICAgIlRoZSB0aW1ldGlja3MgdHlwZSByZXByZXNlbnRzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdGhhdAogICAgICByZXByZXNlbnRzIHRoZSB0aW1lLCBtb2R1bG8gMl4zMiAoNDI5NDk2NzI5NiBkZWNpbWFsKSwgaW4KICAgICAgaHVuZHJlZHRocyBvZiBhIHNlY29uZCBiZXR3ZWVuIHR3byBlcG9jaHMuICBXaGVuIGEgc2NoZW1hCiAgICAgIG5vZGUgaXMgZGVmaW5lZCB0aGF0IHVzZXMgdGhpcyB0eXBlLCB0aGUgZGVzY3JpcHRpb24gb2YKICAgICAgdGhlIHNjaGVtYSBub2RlIGlkZW50aWZpZXMgYm90aCBvZiB0aGUgcmVmZXJlbmNlIGVwb2Nocy4KCiAgICAgIEluIHRoZSB2YWx1ZSBzZXQgYW5kIGl0cyBzZW1hbnRpY3MsIHRoaXMgdHlwZSBpcyBlcXVpdmFsZW50CiAgICAgIHRvIHRoZSBUaW1lVGlja3MgdHlwZSBvZiB0aGUgU01JdjIuIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgMjU3ODogU3RydWN0dXJlIG9mIE1hbmFnZW1lbnQgSW5mb3JtYXRpb24gVmVyc2lvbiAyCiAgICAgICAgICAgICAgICAoU01JdjIpIjsKICB9CgogIHR5cGVkZWYgdGltZXN0YW1wIHsKICAgIHR5cGUgeWFuZzp0aW1ldGlja3M7CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgdGltZXN0YW1wIHR5cGUgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2YgYW4gYXNzb2NpYXRlZAogICAgICB0aW1ldGlja3Mgc2NoZW1hIG5vZGUgYXQgd2hpY2ggYSBzcGVjaWZpYyBvY2N1cnJlbmNlCiAgICAgIGhhcHBlbmVkLiAgVGhlIHNwZWNpZmljIG9jY3VycmVuY2UgbXVzdCBiZSBkZWZpbmVkIGluIHRoZQogICAgICBkZXNjcmlwdGlvbiBvZiBhbnkgc2NoZW1hIG5vZGUgZGVmaW5lZCB1c2luZyB0aGlzIHR5cGUuICBXaGVuCiAgICAgIHRoZSBzcGVjaWZpYyBvY2N1cnJlbmNlIG9jY3VycmVkIHByaW9yIHRvIHRoZSBsYXN0IHRpbWUgdGhlCiAgICAgIGFzc29jaWF0ZWQgdGltZXRpY2tzIGF0dHJpYnV0ZSB3YXMgemVybywgdGhlbiB0aGUgdGltZXN0YW1wCiAgICAgIHZhbHVlIGlzIHplcm8uICBOb3RlIHRoYXQgdGhpcyByZXF1aXJlcyBhbGwgdGltZXN0YW1wIHZhbHVlcwogICAgICB0byBiZSByZXNldCB0byB6ZXJvIHdoZW4gdGhlIHZhbHVlIG9mIHRoZSBhc3NvY2lhdGVkIHRpbWV0aWNrcwogICAgICBhdHRyaWJ1dGUgcmVhY2hlcyA0OTcrIGRheXMgYW5kIHdyYXBzIGFyb3VuZCB0byB6ZXJvLgoKICAgICAgVGhlIGFzc29jaWF0ZWQgdGltZXRpY2tzIHNjaGVtYSBub2RlIG11c3QgYmUgc3BlY2lmaWVkCiAgICAgIGluIHRoZSBkZXNjcmlwdGlvbiBvZiBhbnkgc2NoZW1hIG5vZGUgdXNpbmcgdGhpcyB0eXBlLgoKICAgICAgSW4gdGhlIHZhbHVlIHNldCBhbmQgaXRzIHNlbWFudGljcywgdGhpcyB0eXBlIGlzIGVxdWl2YWxlbnQKICAgICAgdG8gdGhlIFRpbWVTdGFtcCB0ZXh0dWFsIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiBnZW5lcmljIGFkZHJlc3MgdHlwZXMgKioqLwoKICB0eXBlZGVmIHBoeXMtYWRkcmVzcyB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4gJyhbMC05YS1mQS1GXXsyfSg6WzAtOWEtZkEtRl17Mn0pKik/JzsKICAgIH0KCiAgICBkZXNjcmlwdGlvbgogICAgICJSZXByZXNlbnRzIG1lZGlhLSBvciBwaHlzaWNhbC1sZXZlbCBhZGRyZXNzZXMgcmVwcmVzZW50ZWQKICAgICAgYXMgYSBzZXF1ZW5jZSBvY3RldHMsIGVhY2ggb2N0ZXQgcmVwcmVzZW50ZWQgYnkgdHdvIGhleGFkZWNpbWFsCiAgICAgIG51bWJlcnMuICBPY3RldHMgYXJlIHNlcGFyYXRlZCBieSBjb2xvbnMuICBUaGUgY2Fub25pY2FsCiAgICAgIHJlcHJlc2VudGF0aW9uIHVzZXMgbG93ZXJjYXNlIGNoYXJhY3RlcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgUGh5c0FkZHJlc3MgdGV4dHVhbCBjb252ZW50aW9uIG9mIHRoZSBTTUl2Mi4iOwogICAgcmVmZXJlbmNlCiAgICAgIlJGQyAyNTc5OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBTTUl2MiI7CiAgfQoKICB0eXBlZGVmIG1hYy1hZGRyZXNzIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnWzAtOWEtZkEtRl17Mn0oOlswLTlhLWZBLUZdezJ9KXs1fSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJUaGUgbWFjLWFkZHJlc3MgdHlwZSByZXByZXNlbnRzIGFuIElFRUUgODAyIE1BQyBhZGRyZXNzLgogICAgICBUaGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIHVzZXMgbG93ZXJjYXNlIGNoYXJhY3RlcnMuCgogICAgICBJbiB0aGUgdmFsdWUgc2V0IGFuZCBpdHMgc2VtYW50aWNzLCB0aGlzIHR5cGUgaXMgZXF1aXZhbGVudAogICAgICB0byB0aGUgTWFjQWRkcmVzcyB0ZXh0dWFsIGNvbnZlbnRpb24gb2YgdGhlIFNNSXYyLiI7CiAgICByZWZlcmVuY2UKICAgICAiSUVFRSA4MDI6IElFRUUgU3RhbmRhcmQgZm9yIExvY2FsIGFuZCBNZXRyb3BvbGl0YW4gQXJlYQogICAgICAgICAgICAgICAgTmV0d29ya3M6IE92ZXJ2aWV3IGFuZCBBcmNoaXRlY3R1cmUKICAgICAgUkZDIDI1Nzk6IFRleHR1YWwgQ29udmVudGlvbnMgZm9yIFNNSXYyIjsKICB9CgogIC8qKiogY29sbGVjdGlvbiBvZiBYTUwtc3BlY2lmaWMgdHlwZXMgKioqLwoKICB0eXBlZGVmIHhwYXRoMS4wIHsKICAgIHR5cGUgc3RyaW5nOwogICAgZGVzY3JpcHRpb24KICAgICAiVGhpcyB0eXBlIHJlcHJlc2VudHMgYW4gWFBBVEggMS4wIGV4cHJlc3Npb24uCgogICAgICBXaGVuIGEgc2NoZW1hIG5vZGUgaXMgZGVmaW5lZCB0aGF0IHVzZXMgdGhpcyB0eXBlLCB0aGUKICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIHNjaGVtYSBub2RlIE1VU1Qgc3BlY2lmeSB0aGUgWFBhdGgKICAgICAgY29udGV4dCBpbiB3aGljaCB0aGUgWFBhdGggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQuIjsKICAgIHJlZmVyZW5jZQogICAgICJYUEFUSDogWE1MIFBhdGggTGFuZ3VhZ2UgKFhQYXRoKSBWZXJzaW9uIDEuMCI7CiAgfQoKICAvKioqIGNvbGxlY3Rpb24gb2Ygc3RyaW5nIHR5cGVzICoqKi8KCiAgdHlwZWRlZiBoZXgtc3RyaW5nIHsKICAgIHR5cGUgc3RyaW5nIHsKICAgICAgcGF0dGVybiAnKFswLTlhLWZBLUZdezJ9KDpbMC05YS1mQS1GXXsyfSkqKT8nOwogICAgfQogICAgZGVzY3JpcHRpb24KICAgICAiQSBoZXhhZGVjaW1hbCBzdHJpbmcgd2l0aCBvY3RldHMgcmVwcmVzZW50ZWQgYXMgaGV4IGRpZ2l0cwogICAgICBzZXBhcmF0ZWQgYnkgY29sb25zLiAgVGhlIGNhbm9uaWNhbCByZXByZXNlbnRhdGlvbiB1c2VzCiAgICAgIGxvd2VyY2FzZSBjaGFyYWN0ZXJzLiI7CiAgfQoKICB0eXBlZGVmIHV1aWQgewogICAgdHlwZSBzdHJpbmcgewogICAgICBwYXR0ZXJuICdbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS0nCiAgICAgICAgICAgICsgJ1swLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICJBIFVuaXZlcnNhbGx5IFVuaXF1ZSBJRGVudGlmaWVyIGluIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24KICAgICAgZGVmaW5lZCBpbiBSRkMgNDEyMi4gIFRoZSBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gdXNlcwogICAgICBsb3dlcmNhc2UgY2hhcmFjdGVycy4KCiAgICAgIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBhIFVVSUQgaW4gc3RyaW5nIHJlcHJlc2VudGF0aW9uOgogICAgICBmODFkNGZhZS03ZGVjLTExZDAtYTc2NS0wMGEwYzkxZTZiZjYKICAgICAgIjsKICAgIHJlZmVyZW5jZQogICAgICJSRkMgNDEyMjogQSBVbml2ZXJzYWxseSBVbmlxdWUgSURlbnRpZmllciAoVVVJRCkgVVJOCiAgICAgICAgICAgICAgICBOYW1lc3BhY2UiOwogIH0KCiAgdHlwZWRlZiBkb3R0ZWQtcXVhZCB7CiAgICB0eXBlIHN0cmluZyB7CiAgICAgIHBhdHRlcm4KICAgICAgICAnKChbMC05XXxbMS05XVswLTldfDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNV0pXC4pezN9JwogICAgICArICcoWzAtOV18WzEtOV1bMC05XXwxWzAtOV1bMC05XXwyWzAtNF1bMC05XXwyNVswLTVdKSc7CiAgICB9CiAgICBkZXNjcmlwdGlvbgogICAgICAiQW4gdW5zaWduZWQgMzItYml0IG51bWJlciBleHByZXNzZWQgaW4gdGhlIGRvdHRlZC1xdWFkCiAgICAgICBub3RhdGlvbiwgaS5lLiwgZm91ciBvY3RldHMgd3JpdHRlbiBhcyBkZWNpbWFsIG51bWJlcnMKICAgICAgIGFuZCBzZXBhcmF0ZWQgd2l0aCB0aGUgJy4nIChmdWxsIHN0b3ApIGNoYXJhY3Rlci4iOwogIH0KfQo=
o-ran-smo-teiv-cloud urn:o-ran:smo-teiv-cloud CLOUD [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNsb3VkIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jbG91ZCI7CiAgICBwcmVmaXggb3ItdGVpdi1jbG91ZDsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gewogICAgICAgIHByZWZpeCBnZW87CiAgICAgICAgcmVmZXJlbmNlICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgICB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAgICAgIlJBTiBDbG91ZCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gQ0xPVUQgZG9tYWluLCB3aGljaCBjb21wcmlzZXMgY2xvdWQgaW5mcmFzdHJ1Y3R1cmUgYW5kCiAgICAgICAgZGVwbG95bWVudCBhc3BlY3RzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFkZGVkIGdyb3VwaW5ncywgT3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycCBvciBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdG9wb2xvZ3kgb2JqZWN0cy4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0wMiIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA3LTE1IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoaXMgcmV2aXNpb24gYWxpZ25zIE8tUkFOIFdvcmsgR3JvdXAgMTAgU3RhZ2UgMiBTcGVjaWZpY2F0aW9uIChPLVJBTi5XRzEwLlRFJklWLUNJTUkuMC1SMDA0LnYwMi4wMCkiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIENMT1VEOwoKICAgIGxpc3QgQ2xvdWRpZmllZE5GIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBSQU4gTmV0d29yayBGdW5jdGlvbiBzb2Z0d2FyZSB0aGF0IGlzIGRlcGxveWVkIGluIHRoZSBPLUNsb3VkIHZpYSBvbmUgb3IgbW9yZSBORiBEZXBsb3ltZW50cy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWRpZmllZCBORiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5GRGVwbG95bWVudCB7CiAgICAgICAgZGVzY3JpcHRpb24gIkEgc29mdHdhcmUgZGVwbG95bWVudCBvbiBPLUNsb3VkIHJlc291cmNlcyB0aGF0IHJlYWxpemVzLCBhbGwgb3IgcGFydCBvZiwgYSBDbG91ZGlmaWVkIE5GLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBORiBEZXBsb3ltZW50IjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0Nsb3VkTmFtZXNwYWNlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiT0Nsb3VkTmFtZXNwYWNlIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIGlzb2xhdGluZwogICAgICAgIGdyb3VwcyBvZiByZXNvdXJjZXMgd2l0aGluIGEgc2luZ2xlIGNsdXN0ZXIuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIENsb3VkIE5hbWVzcGFjZSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5vZGVDbHVzdGVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQSBOb2RlQ2x1c3RlciBtYW5hZ2VzIGEgY29sbGVjdGlvbiBvZiBOb2Rlcy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgTm9kZSBDbHVzdGVyIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0Nsb3VkU2l0ZSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgdGhlIGluZnJhc3RydWN0dXJlIHRoYXQKICAgICAgICBob3N0cyB0aGUgTkYgRGVwbG95bWVudC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG5hbWUgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5hbWUgb2YgQ2xvdWQgU2l0ZSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwogICAgICAgIH0KICAgIH0KCgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBDTE9VRElGSUVETkZfQ09NUFJJU0VTX05GREVQTE9ZTUVOVCB7IC8vIDEgdG8gMS4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGNvbXByaXNlZC1uRkRlcGxveW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQ2xvdWRpZmllZCBORiBjb21wcmlzZXMgb2YgdGhlc2UgTkYgRGVwbG95bWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgQ2xvdWRpZmllZE5GOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAxOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBjb21wcmlzZWQtYnktY2xvdWRpZmllZE5GIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5GIERlcGxveW1lbnQgcGFydCBvZiBDbG91ZGlmaWVkIE5GLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTkZERVBMT1lNRU5UX0RFUExPWUVEX09OX09DTE9VRE5BTUVTUEFDRSB7IC8vIDEuLm4gdG8gMS4ubgoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGRlcGxveWVkLW9uLW9jbG91ZE5hbWVzcGFjZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJORiBEZXBsb3ltZW50IGRlcGxveWVkIG9uIE8tQ2xvdWQgTmFtZXNwYWNlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBORkRlcGxveW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgZGVwbG95ZWQtbkZEZXBsb3ltZW50IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk9DbG91ZCBOYW1lc3BhY2UgZGVwbG95cyBORiBEZXBsb3ltZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBPQ2xvdWROYW1lc3BhY2U7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgT0NMT1VETkFNRVNQQUNFX0RFUExPWUVEX09OX05PREVDTFVTVEVSIHsgLy8gMS4ubiB0byAxCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGRlcGxveWVkLW9uLW5vZGVDbHVzdGVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tQ2xvdWQgTmFtZXNwYWNlIGRlcGxveWVkIG9uIE5vZGUgQ2x1c3Rlci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0Nsb3VkTmFtZXNwYWNlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGRlcGxveWVkLW9jbG91ZE5hbWVzcGFjZSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOb2RlIENsdXN0ZXIgZGVwbG95cyBPLUNsb3VkIE5hbWVzcGFjZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTm9kZUNsdXN0ZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTk9ERUNMVVNURVJfTE9DQVRFRF9BVF9PQ0xPVURTSVRFIHsgLy8gMS4ubiB0byAxLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbG9jYXRlZC1hdC1vY2xvdWRTaXRlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5vZGUgQ2x1c3RlciBsb2NhdGVkIGF0IE8tQ2xvdWQgU2l0ZS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTm9kZUNsdXN0ZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgbG9jYXRpb24tb2Ytb25vZGVDbHVzdGVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tQ2xvdWQgU2l0ZSBpcyBsb2NhdGlvbiBvZiBOb2RlIENsdXN0ZXIuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE9DbG91ZFNpdGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQp9
o-ran-smo-teiv-common-yang-extensions urn:o-ran:smo-teiv-common-yang-extensions \N [] 2024-05-24 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgewoKICB5YW5nLXZlcnNpb24gMS4xOwogIG5hbWVzcGFjZSAidXJuOm8tcmFuOnNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMiOwogIHByZWZpeCBvci10ZWl2LXlleHQ7CgogIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogIGRlc2NyaXB0aW9uCiAgIlRvcG9sb2d5IGFuZCBJbnZlbnRvcnkgWUFORyBleHRlbnNpb25zIG1vZGVsCgogIFRoaXMgbW9kZWwgY29udGFpbnMgZXh0ZW5zaW9ucyB0byB0aGUgWUFORyBsYW5ndWFnZSB0aGF0IHRvcG9sb2d5IGFuZAogIGludmVudG9yeSBtb2RlbHMgd2lsbCB1c2UgdG8gZGVmaW5lIGFuZCBhbm5vdGF0ZSB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCgogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIGV4dGVuc2lvbiBiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJEZWZpbmVzIGEgYmktZGlyZWN0aW9uYWwgcmVsYXRpb25zaGlwIGluIHRoZSB0b3BvbG9neS4KCiAgICAgICAgICAgIEEgYmktZGlyZWN0aW9uYWwtYXNzb2NpYXRpb24gKEJEQSkgaXMgYSByZWxhdGlvbnNoaXAgY29tcHJpc2luZyBvZgogICAgICAgICAgICBhbiBBLXNpZGUgYW5kIGEgQi1zaWRlLiBUaGUgQS1zaWRlIGlzIGNvbnNpZGVyZWQgdGhlIG9yaWdpbmF0aW5nCiAgICAgICAgICAgIHNpZGUgb2YgdGhlIHJlbGF0aW9uc2hpcDsgdGhlIEItc2lkZSBpcyBjb25zaWRlcmVkIHRoZSB0ZXJtaW5hdGluZwogICAgICAgICAgICBzaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBvcmRlciBvZiBBLXNpZGUgYW5kIEItc2lkZSBpcyBvZgogICAgICAgICAgICBpbXBvcnRhbmNlIGFuZCBNVVNUIE5PVCBiZSBjaGFuZ2VkIG9uY2UgZGVmaW5lZC4KCiAgICAgICAgICAgIEJvdGggQS1zaWRlIGFuZCBCLXNpZGUgYXJlIGRlZmluZWQgb24gYSB0eXBlLCBhbmQgYXJlIGdpdmVuIGEgcm9sZS4KICAgICAgICAgICAgQSB0eXBlIG1heSBoYXZlIG11bHRpcGxlIG9yaWdpbmF0aW5nIGFuZC9vciB0ZXJtaW5hdGluZyBzaWRlcyBvZiBhCiAgICAgICAgICAgIHJlbGF0aW9uc2hpcCwgYWxsIGRpc3Rpbmd1aXNoZWQgYnkgcm9sZSBuYW1lLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlICdtb2R1bGUnIHN0YXRlbWVudC4KICAgICAgICAgICAgTXVsdGlwbGUgJ2JpLWRpcmVjdGlvbmFsLXRvcG9sb2d5LXJlbGF0aW9uc2hpcCcgc3RhdGVtZW50cyBhcmUKICAgICAgICAgICAgYWxsb3dlZCBwZXIgcGFyZW50IHN0YXRlbWVudC4KCiAgICAgICAgICAgIFN1YnN0YXRlbWVudHMgdG8gdGhlICdiaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIGRlZmluZQogICAgICAgICAgICB0aGUgQS1zaWRlIGFuZCB0aGUgQi1zaWRlLCByZXNwZWN0aXZlbHksIGFuZCBvcHRpb25hbGx5IHByb3BlcnRpZXMKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcC4gRGF0YSBub2RlcyBvZiB0eXBlcyAnbGVhZicgYW5kICdsZWFmLWxpc3QnIGFyZQogICAgICAgICAgICB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIE9uZSBvZiB0aGUgZGF0YSBub2RlcyBNVVNUIGJlIGFubm90YXRlZCB3aXRoCiAgICAgICAgICAgIHRoZSAnYS1zaWRlJyBleHRlbnNpb247IGFub3RoZXIgZGF0YSBub2RlIE1VU1QgYmUgYW5ub3RhdGVkIHdpdGggdGhlCiAgICAgICAgICAgICdiLXNpZGUnIGV4dGVuc2lvbi4gT3RoZXIgZGF0YSBub2RlcyBkZWZpbmUgcHJvcGVydGllcyBvZiB0aGUKICAgICAgICAgICAgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSByZWxhdGlvbnNoaXAgbmFtZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIG5hbWVzcGFjZSBvZiB0aGUgZGVjbGFyaW5nIG1vZHVsZSBhbmQgTVVTVCBiZQogICAgICAgICAgICB1bmlxdWUgd2l0aGluIHRoZSBzY29wZS4iOwoKICAgICAgICBhcmd1bWVudCByZWxhdGlvbnNoaXBOYW1lOwogICAgfQoKICAgIGV4dGVuc2lvbiBhU2lkZSB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIkRlZmluZXMgdGhlIEEtc2lkZSBvZiBhIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIGEgJ2xlYWYnIG9yICdsZWFmLWxpc3QnCiAgICAgICAgICAgIHN0YXRlbWVudCwgd2hpY2ggaXRzZWxmIG11c3QgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgdGhlCiAgICAgICAgICAgICd1bmktZGlyZWN0aW9uYWwtdG9wb2xvZ3ktcmVsYXRpb25zaGlwJyBzdGF0ZW1lbnQuCgogICAgICAgICAgICBUaGUgZGF0YSB0eXBlIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIE1VU1QgYmUKICAgICAgICAgICAgJ2luc3RhbmNlLWlkZW50aWZpZXInLiBDb25zdHJhaW50cyBNQVkgYmUgdXNlZCBhcyBwYXJ0IG9mIHRoZSBwYXJlbnQKICAgICAgICAgICAgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIHRvIGVuZm9yY2UgY2FyZGluYWxpdHkuCgogICAgICAgICAgICBUaGUgaWRlbnRpZmllciBvZiB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBpcyB1c2VkIGFzIG5hbWUKICAgICAgICAgICAgb2YgdGhlIHJvbGUgb2YgdGhlIEEtc2lkZSBvZiB0aGUgcmVsYXRpb25zaGlwLiBUaGUgbmFtZSBvZiB0aGUgcm9sZQogICAgICAgICAgICBpcyBzY29wZWQgdG8gdGhlIHR5cGUgb24gd2hpY2ggdGhlIEEtc2lkZSBpcyBkZWZpbmVkIGFuZCBNVVNUIGJlCiAgICAgICAgICAgIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLgoKICAgICAgICAgICAgV2hpbGUgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgZG9lcyBub3QgcmVzdWx0IGluIGEgcHJvcGVydHkKICAgICAgICAgICAgb2YgdGhlIHJlbGF0aW9uc2hpcCwgaXQgaXMgUkVDT01NRU5ERUQgdG8gYXZvaWQgdXNpbmcgdGhlIG5hbWUgb2YgYW4KICAgICAgICAgICAgZXhpc3RpbmcgdHlwZSBwcm9wZXJ0eSBhcyByb2xlIG5hbWUgdG8gYXZvaWQgcG90ZW50aWFsIGFtYmlndWl0aWVzCiAgICAgICAgICAgIGJldHdlZW4gcHJvcGVydGllcyBvZiBhIHR5cGUsIGFuZCByb2xlcyBvZiBhIHJlbGF0aW9uc2hpcCBvbiB0aGUKICAgICAgICAgICAgdHlwZS4KCiAgICAgICAgICAgIFRoZSBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQS1zaWRlIHJlc2lkZXMuCiAgICAgICAgICAgIElmIHRoZSB0eXBlIGlzIGRlY2xhcmVkIGluIGFub3RoZXIgbW9kdWxlLCB0aGUgdHlwZSBtdXN0IGJlCiAgICAgICAgICAgIHByZWZpeGVkLCBhbmQgYSBjb3JyZXNwb25kaW5nICdpbXBvcnQnIHN0YXRlbWVudCBiZSB1c2VkIHRvIGRlY2xhcmUKICAgICAgICAgICAgdGhlIHByZWZpeC4iOwoKICAgICAgICBhcmd1bWVudCBhU2lkZVR5cGU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGJTaWRlIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiRGVmaW5lcyB0aGUgQi1zaWRlIG9mIGEgcmVsYXRpb25zaGlwLgoKICAgICAgICAgICAgVGhlIHN0YXRlbWVudCBNVVNUIG9ubHkgYmUgYSBzdWJzdGF0ZW1lbnQgb2YgYSAnbGVhZicgb3IgJ2xlYWYtbGlzdCcKICAgICAgICAgICAgc3RhdGVtZW50LCB3aGljaCBpdHNlbGYgbXVzdCBiZSBhIHN1YnN0YXRlbWVudCBvZiB0aGUKICAgICAgICAgICAgJ3VuaS1kaXJlY3Rpb25hbC10b3BvbG9neS1yZWxhdGlvbnNoaXAnIHN0YXRlbWVudC4KCiAgICAgICAgICAgIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmVudCAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgTVVTVCBiZQogICAgICAgICAgICAnaW5zdGFuY2UtaWRlbnRpZmllcicuIENvbnN0cmFpbnRzIE1BWSBiZSB1c2VkIGFzIHBhcnQgb2YgdGhlIHBhcmVudAogICAgICAgICAgICAnbGVhZicgb3IgJ2xlYWYtbGlzdCcgdG8gZW5mb3JjZSBjYXJkaW5hbGl0eS4KCiAgICAgICAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwYXJlbnQgJ2xlYWYnIG9yICdsZWFmLWxpc3QnIGlzIHVzZWQgYXMgbmFtZQogICAgICAgICAgICBvZiB0aGUgcm9sZSBvZiB0aGUgQi1zaWRlIG9mIHRoZSByZWxhdGlvbnNoaXAuIFRoZSBuYW1lIG9mIHRoZSByb2xlCiAgICAgICAgICAgIGlzIHNjb3BlZCB0byB0aGUgdHlwZSBvbiB3aGljaCB0aGUgQi1zaWRlIGlzIGRlZmluZWQgYW5kIE1VU1QgYmUKICAgICAgICAgICAgdW5pcXVlIHdpdGhpbiB0aGUgc2NvcGUuCgogICAgICAgICAgICBXaGlsZSB0aGUgcGFyZW50ICdsZWFmJyBvciAnbGVhZi1saXN0JyBkb2VzIG5vdCByZXN1bHQgaW4gYSBwcm9wZXJ0eQogICAgICAgICAgICBvZiB0aGUgcmVsYXRpb25zaGlwLCBpdCBpcyBSRUNPTU1FTkRFRCB0byBhdm9pZCB1c2luZyB0aGUgbmFtZSBvZiBhbgogICAgICAgICAgICBleGlzdGluZyB0eXBlIHByb3BlcnR5IGFzIHJvbGUgbmFtZSB0byBhdm9pZCBwb3RlbnRpYWwgYW1iaWd1aXRpZXMKICAgICAgICAgICAgYmV0d2VlbiBwcm9wZXJ0aWVzIG9mIGEgdHlwZSwgYW5kIHJvbGVzIG9mIGEgcmVsYXRpb25zaGlwIG9uIHRoZQogICAgICAgICAgICB0eXBlLgoKICAgICAgICAgICAgVGhlIGFyZ3VtZW50IGlzIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9uIHdoaWNoIHRoZSBCLXNpZGUgcmVzaWRlcy4KICAgICAgICAgICAgSWYgdGhlIHR5cGUgaXMgZGVjbGFyZWQgaW4gYW5vdGhlciBtb2R1bGUsIHRoZSB0eXBlIG11c3QgYmUKICAgICAgICAgICAgcHJlZml4ZWQsIGFuZCBhIGNvcnJlc3BvbmRpbmcgJ2ltcG9ydCcgc3RhdGVtZW50IGJlIHVzZWQgdG8gZGVjbGFyZQogICAgICAgICAgICB0aGUgcHJlZml4LiI7CgogICAgICAgIGFyZ3VtZW50IGJTaWRlVHlwZTsKICAgIH0KCiAgICBleHRlbnNpb24gZG9tYWluIHsKICAgICAgICBkZXNjcmlwdGlvbiAiS2V5d29yZCB1c2VkIHRvIGNhcnJ5IGRvbWFpbiBpbmZvcm1hdGlvbi4iOwogICAgICAgIGFyZ3VtZW50IGRvbWFpbk5hbWU7CiAgICB9CgogICAgZXh0ZW5zaW9uIGxhYmVsIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGxhYmVsIGNhbiBiZSB1c2VkIHRvIGdpdmUgbW9kdWxlcyBhbmQgc3VibW9kdWxlcyBhIHNlbWFudGljCiAgICAgICAgICAgIHZlcnNpb24sIGluIGFkZGl0aW9uIHRvIHRoZWlyIHJldmlzaW9uLgoKICAgICAgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbGFiZWwgaXMgJ3gueS56JyAtIGV4cHJlc3NlZCBhcyBwYXR0ZXJuLCBpdCBpcwogICAgICAgICAgICBbMC05XStcXC5bMC05XStcXC5bMC05XSsKCiAgICAgICAgICAgIFRoZSBzdGF0ZW1lbnQgTVVTVCBvbmx5IGJlIGEgc3Vic3RhdGVtZW50IG9mIHRoZSByZXZpc2lvbiBzdGF0ZW1lbnQuCiAgICAgICAgICAgIFplcm8gb3Igb25lIHJldmlzaW9uIGxhYmVsIHN0YXRlbWVudHMgcGVyIHBhcmVudCBzdGF0ZW1lbnQgYXJlCiAgICAgICAgICAgIGFsbG93ZWQuCgogICAgICAgICAgICBSZXZpc2lvbiBsYWJlbHMgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCBhbGwgcmV2aXNpb25zIG9mIGEgbW9kdWxlIG9yCiAgICAgICAgICAgIHN1Ym1vZHVsZS4iOwoKICAgICAgICBhcmd1bWVudCBzZW12ZXJzaW9uOwogICAgfQp9
-o-ran-smo-teiv-common-yang-types urn:o-ran:smo-teiv-common-yang-types \N [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICBwcmVmaXggb3ItdGVpdi10eXBlczsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHJlLXVzYWJsZSBkYXRhIHR5cGVzIHRoYXQgdG9wb2xvZ3kgYW5kIGludmVudG9yeSBtb2RlbHMKICAgIHdpbGwgZnJlcXVlbnRseSB1c2UgYXMgcGFydCBvZiB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNC0xMC0wNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIGFuZCBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgZm9yIHNvdXJjZUlkcyBhbmQgcmVsaWFiaWxpdHlJbmRpY2F0b3IgdG8gbWV0YWRhdGEuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBncm91cGluZyBUb3BfR3JwX1R5cGUgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyBjb250YWluaW5nIHRoZSBrZXkgYXR0cmlidXRlIGNvbW1vbiB0byBhbGwgdHlwZXMuCiAgICAgICAgICAgIEFsbCB0eXBlcyBNVVNUIHVzZSB0aGlzIGdyb3VwaW5nLiI7CgogICAgICAgIGxlYWYgaWQgewogICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRvcG9sb2d5IGVudGl0aWVzLiBSZXByZXNlbnRzIHRoZQogICAgICAgICAgICAgICAgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgICAgICB9CiAgICB9CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IGZvciBhcHBsaWNhdGlvbnMgd2lzaGluZwogICAgICAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGRlY29yYXRvcnMuIFRoaXMgaXMgZG9uZSB2aWEgYXVnbWVudGF0aW9ucy4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpci4KCiAgICAgICAgICAgIFRoaXMgaXMgYSBjb25zdW1lciBkYXRhIGFuZCBjYW4gYmUgYXR0YWNoZWQgdG8gVG9wb2xvZ3kgRW50aXR5IG9yCiAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkKICAgICAgICAgICAgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLAogICAgICAgICAgICBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQKICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CiAgICB9CgogICAgbGVhZi1saXN0IGNsYXNzaWZpZXJzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBpZGVudGl0eXJlZiB7IGJhc2UgY2xhc3NpZmllcjsgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSBlbnRpdHkuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMuCgogICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGF0dGFjaGVkIHRvIHRoZSBUb3BvbG9neSBFbnRpdHkgaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAgICAgICBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkncyBhdHRyaWJ1dGVzLiBUaGlzIGlzIGV4cG9zZWQgdG8gdGhlCiAgICAgICAgICAgICAgICBjb25zdW1lcnMgYW5kIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgcmVzcG9uc2libGUgYWRhcHRlci4gVGhpcwogICAgICAgICAgICAgICAgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZAogICAgICAgICAgICAgICAgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgICAgIHR5cGUgc291cmNlSWQ7CiAgICAgICAgICAgIG9yZGVyZWQtYnkgdXNlcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSByZWxhdGlvbnNoaXAuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgZGVjbGFyZWQgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBpcyBleHBvc2VkIHRvIHRoZQogICAgICAgICAgICAgICAgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMKICAgICAgICAgICAgICAgIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4KICAgICAgICAgICAgICAgIGFueSB3YXksIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLiI7CgogICAgICAgICAgICB0eXBlIHNvdXJjZUlkOwogICAgICAgICAgICBvcmRlcmVkLWJ5IHVzZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAyOwogICAgICAgIH0KICAgIH0KCiAgICBjb250YWluZXIgbWV0YWRhdGEgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgYW4gZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpcnMuCgogICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IEVudGl0eSBvciBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwKICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5IG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzCiAgICAgICAgICAgIGF0dHJpYnV0ZXMuIFRoaXMgaXMgZXhwb3NlZCB0byB0aGUgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkKICAgICAgICAgICAgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlCiAgICAgICAgICAgIGF1Z21lbnRlZCBvciBkZXZpYXRlZCBpbiBhbnkgd2F5LCB1bmxlc3Mgc3RhdGVkIG90aGVyd2lzZS4iOwoKICAgICAgICBsZWFmIHJlbGlhYmlsaXR5SW5kaWNhdG9yIHsKICAgICAgICAgICAgdHlwZSBlbnVtZXJhdGlvbiB7CiAgICAgICAgICAgICAgICBlbnVtIE9LIHsKICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGRhdGEgaXMgaW4gYWxpZ25tZW50IHdpdGggdGhlIHNvdXJjZSBvZiB0cnV0aCwKICAgICAgICAgICAgICAgICAgICBhcyBmYXIgYXMgVG9wb2xvZ3kgRXhwb3N1cmUgSGFuZGxpbmcgaXMgYXdhcmUuIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZW51bSBSRVNUT1JFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIHdhcyByZXN0b3JlZCBmcm9tIGJhY2t1cCBhbmQgdGhlIHJlc3BvbnNpYmxlCiAgICAgICAgICAgICAgICAgICAgYWRhcHRlcnMgYXJlIGNoZWNraW5nIHRvIGVuc3VyZSB0aGUgZGF0YSBpcyBjdXJyZW50LiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVudW0gQURWSVNFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVudGl0eSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgVG9wb2xvZ3kgRXhwb3N1cmUgSGFuZGxpbmcgYW5kCiAgICAgICAgICAgICAgICAgICAgcG90ZW50aWFsbHkgbm90IGFsaWduZWQgd2l0aCB0aGUgc291cmNlIG9mIHRydXRoLiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZGVudGl0eSBjbGFzc2lmaWVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMKICAgICAgICB3aXRoIGlkZW50aXR5LiAiOwogICAgfQoKICAgIHR5cGVkZWYgc291cmNlSWQgewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBpZGVudGl0eSB0aGF0IHJlcHJlc2VudHMgYSBuYXRpdmUgaWRlbnRpZmllciBvZiBhIHRvcG9sb2d5IGVudGl0eS4iOwogICAgICAgIHR5cGUgc3RyaW5nOwogICAgfQp9
+o-ran-smo-teiv-common-yang-types urn:o-ran:smo-teiv-common-yang-types \N [] 2025-01-17 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICBwcmVmaXggb3ItdGVpdi10eXBlczsKCiAgICBpbXBvcnQgaWV0Zi15YW5nLXR5cGVzIHsgcHJlZml4IHlhbmc7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7IHByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgb3JnYW5pemF0aW9uICJPUkFOIjsKICAgIGNvbnRhY3QgIlRoZSBBdXRob3JzIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVG9wb2xvZ3kgYW5kIEludmVudG9yeSBjb21tb24gdHlwZXMgbW9kZWwKCiAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHJlLXVzYWJsZSBkYXRhIHR5cGVzIHRoYXQgdG9wb2xvZ3kgYW5kIGludmVudG9yeSBtb2RlbHMKICAgIHdpbGwgZnJlcXVlbnRseSB1c2UgYXMgcGFydCBvZiB0eXBlcyBhbmQgcmVsYXRpb25zaGlwcy4KCiAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7CiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKCiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIjsKCiAgICByZXZpc2lvbiAiMjAyNS0wMS0xNyIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBmaXJzdERpc2NvdmVyZWQgYW5kIGxhc3RNb2RpZmllZCB0byBtZXRhZGF0YSBjb250YWluZXIiOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjUuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0xMC0wNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJBZGRlZCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIGFuZCBPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwCiAgICAgICAgZm9yIHNvdXJjZUlkcyBhbmQgcmVsaWFiaWxpdHlJbmRpY2F0b3IgdG8gbWV0YWRhdGEuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBncm91cGluZyBUb3BfR3JwX1R5cGUgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyBjb250YWluaW5nIHRoZSBrZXkgYXR0cmlidXRlIGNvbW1vbiB0byBhbGwgdHlwZXMuCiAgICAgICAgICAgIEFsbCB0eXBlcyBNVVNUIHVzZSB0aGlzIGdyb3VwaW5nLiI7CgogICAgICAgIGxlYWYgaWQgewogICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVuaXF1ZSBpZGVudGlmaWVyIG9mIHRvcG9sb2d5IGVudGl0aWVzLiBSZXByZXNlbnRzIHRoZQogICAgICAgICAgICAgICAgRW50aXR5IEluc3RhbmNlIElkZW50aWZpZXIuIjsKICAgICAgICB9CiAgICB9CgogICAgY29udGFpbmVyIGRlY29yYXRvcnMgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgZXh0ZW5zaW9uIHBvaW50IGZvciBhcHBsaWNhdGlvbnMgd2lzaGluZwogICAgICAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGRlY29yYXRvcnMuIFRoaXMgaXMgZG9uZSB2aWEgYXVnbWVudGF0aW9ucy4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpci4KCiAgICAgICAgICAgIFRoaXMgaXMgYSBjb25zdW1lciBkYXRhIGFuZCBjYW4gYmUgYXR0YWNoZWQgdG8gVG9wb2xvZ3kgRW50aXR5IG9yCiAgICAgICAgICAgIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZSBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkKICAgICAgICAgICAgb3IgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkLAogICAgICAgICAgICBhbmQgaXQgTVVTVCBOT1QgYmUgYXVnbWVudGVkIG9yIGRldmlhdGVkIGluIGFueSB3YXksIHVubGVzcyBzdGF0ZWQKICAgICAgICAgICAgb3RoZXJ3aXNlLiI7CiAgICB9CgogICAgbGVhZi1saXN0IGNsYXNzaWZpZXJzIHsKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiQ29uc3VtZXIgZGVmaW5lZCB0YWdzIHRvIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnNoaXBzLgoKICAgICAgICAgICAgVGhpcyBpcyBhIGNvbnN1bWVyIGRhdGEgYW5kIGNhbiBiZSBhdHRhY2hlZCB0byBUb3BvbG9neSBFbnRpdHkgb3IKICAgICAgICAgICAgVG9wb2xvZ3kgUmVsYXRpb24gaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlIGRlY2xhcmVkIFRvcG9sb2d5IEVudGl0eQogICAgICAgICAgICBvciBUb3BvbG9neSBSZWxhdGlvbnNoaXAncyBhdHRyaWJ1dGVzLiBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsCiAgICAgICAgICAgIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZAogICAgICAgICAgICBvdGhlcndpc2UuIjsKCiAgICAgICAgdHlwZSBpZGVudGl0eXJlZiB7IGJhc2UgY2xhc3NpZmllcjsgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSBlbnRpdHkuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMuCgogICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGF0dGFjaGVkIHRvIHRoZSBUb3BvbG9neSBFbnRpdHkgaW5zdGFuY2UsIG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAgICAgICBkZWNsYXJlZCBUb3BvbG9neSBFbnRpdHkncyBhdHRyaWJ1dGVzLiBUaGlzIGlzIGV4cG9zZWQgdG8gdGhlCiAgICAgICAgICAgICAgICBjb25zdW1lcnMgYW5kIGNhbiBvbmx5IGJlIHNldCBieSB0aGUgcmVzcG9uc2libGUgYWRhcHRlci4gVGhpcwogICAgICAgICAgICAgICAgY2Fubm90IGJlIGluc3RhbnRpYXRlZCwgYW5kIGl0IE1VU1QgTk9UIGJlIGF1Z21lbnRlZCBvciBkZXZpYXRlZAogICAgICAgICAgICAgICAgaW4gYW55IHdheSwgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgICAgIHR5cGUgc291cmNlSWQ7CiAgICAgICAgICAgIG9yZGVyZWQtYnkgdXNlcjsKICAgICAgICAgICAgbWluLWVsZW1lbnRzIDE7CiAgICAgICAgfQogICAgfQoKICAgIGdyb3VwaW5nIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgewogICAgICAgIGRlc2NyaXB0aW9uICJHcm91cGluZyB0byBpZGVudGlmeSBzb3VyY2VJZHMgb24gYSB0b3BvbG9neSByZWxhdGlvbnNoaXAuIjsKCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcyB7CgogICAgICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgIkFuIG9yZGVyZWQgbGlzdCBvZiBpZGVudGl0aWVzIHRoYXQgcmVwcmVzZW50IHRoZSBzZXQgb2YgbmF0aXZlCiAgICAgICAgICAgICAgICBzb3VyY2UgaWRlbnRpZmllcnMgZm9yIHBhcnRpY2lwYXRpbmcgZW50aXRpZXMgaW4gdGhlIHJlbGF0aW9uc2hpcC4KCiAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IFJlbGF0aW9uIGluc3RhbmNlLCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgICAgICAgZGVjbGFyZWQgVG9wb2xvZ3kgUmVsYXRpb25zaGlwJ3MgYXR0cmlidXRlcy4gVGhpcyBpcyBleHBvc2VkIHRvIHRoZQogICAgICAgICAgICAgICAgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkgdGhlIHJlc3BvbnNpYmxlIGFkYXB0ZXIuIFRoaXMKICAgICAgICAgICAgICAgIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4KICAgICAgICAgICAgICAgIGFueSB3YXksIHVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlLiI7CgogICAgICAgICAgICB0eXBlIHNvdXJjZUlkOwogICAgICAgICAgICBvcmRlcmVkLWJ5IHVzZXI7CiAgICAgICAgICAgIG1pbi1lbGVtZW50cyAyOwogICAgICAgIH0KICAgIH0KCiAgICBjb250YWluZXIgbWV0YWRhdGEgewogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGlzIGNvbnRhaW5lciBzZXJ2ZXMgYXMgYW4gZXh0ZW5zaW9uIHBvaW50IHRvIGRlZmluZSBtZXRhZGF0YS4gVGhleQogICAgICAgICAgICBjYW4gb25seSBiZSBkZWZpbmVkIGluIG5hbWUgdmFsdWUgcGFpcnMuCgogICAgICAgICAgICBUaGlzIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIFRvcG9sb2d5IEVudGl0eSBvciBUb3BvbG9neSBSZWxhdGlvbiBpbnN0YW5jZSwKICAgICAgICAgICAgb3V0c2lkZSBvZiB0aGUgZGVjbGFyZWQgVG9wb2xvZ3kgRW50aXR5IG9yIFRvcG9sb2d5IFJlbGF0aW9uc2hpcCdzCiAgICAgICAgICAgIGF0dHJpYnV0ZXMuIFRoaXMgaXMgZXhwb3NlZCB0byB0aGUgY29uc3VtZXJzIGFuZCBjYW4gb25seSBiZSBzZXQgYnkKICAgICAgICAgICAgVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZSBIYW5kbGluZyBhbmQgRGlzY292ZXJ5IGFuZCBSZWNvbmNpbGlhdGlvbiBBZGFwdGVyLgogICAgICAgICAgICBUaGlzIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQsIGFuZCBpdCBNVVNUIE5PVCBiZSBhdWdtZW50ZWQgb3IgZGV2aWF0ZWQgaW4gYW55IHdheSwKICAgICAgICAgICAgdW5sZXNzIHN0YXRlZCBvdGhlcndpc2UuIjsKCiAgICAgICAgbGVhZiByZWxpYWJpbGl0eUluZGljYXRvciB7CiAgICAgICAgICAgIHR5cGUgZW51bWVyYXRpb24gewogICAgICAgICAgICAgICAgZW51bSBPSyB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIGlzIGluIGFsaWdubWVudCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGgsCiAgICAgICAgICAgICAgICAgICAgYXMgZmFyIGFzIFRvcG9sb2d5IGFuZCBJbnZlbnRvcnkgRXhwb3N1cmUgSGFuZGxpbmcgaXMgYXdhcmUuIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZW51bSBSRVNUT1JFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBkYXRhIHdhcyByZXN0b3JlZCBmcm9tIGJhY2t1cCBhbmQgdGhlIHJlc3BvbnNpYmxlCiAgICAgICAgICAgICAgICAgICAgYWRhcHRlcnMgYXJlIGNoZWNraW5nIHRvIGVuc3VyZSB0aGUgZGF0YSBpcyBjdXJyZW50LiI7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVudW0gQURWSVNFRCB7CiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVudGl0eSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZQogICAgICAgICAgICAgICAgICAgIEhhbmRsaW5nIGFuZCBwb3RlbnRpYWxseSBub3QgYWxpZ25lZCB3aXRoIHRoZSBzb3VyY2Ugb2YgdHJ1dGguIjsKICAgICAgICAgICAgICAgICAgICB2YWx1ZSAyOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxlYWYgZmlyc3REaXNjb3ZlcmVkIHsKICAgICAgICAgICAgdHlwZSB5YW5nOmRhdGUtYW5kLXRpbWU7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaW1lc3RhbXAgaW5kaWNhdGluZyB3aGVuIGFuIGluc3RhbmNlIG9mIFRvcG9sb2d5IEVudGl0eSBvciBSZWxhdGlvbgogICAgICAgICAgICB3YXMgZmlyc3QgcmVwcmVzZW50ZWQgaW4gVG9wb2xvZ3kgYW5kIEludmVudG9yeSBFeHBvc3VyZSBIYW5kbGluZyB2aWEgZGlzY292ZXJ5LiI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIGxhc3RNb2RpZmllZCB7CiAgICAgICAgICAgIHR5cGUgeWFuZzpkYXRlLWFuZC10aW1lOwogICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGltZXN0YW1wIGluZGljYXRpbmcgd2hlbiBhbiBpbnN0YW5jZSBvZiBUb3BvbG9neSBFbnRpdHkgb3IgUmVsYXRpb24KICAgICAgICAgICAgd2FzIGxhc3QgdXBkYXRlZCAoZXhjbHVkaW5nIGNsYXNzaWZpZXJzIGFuZCBkZWNvcmF0b3JzKS4iOwogICAgICAgIH0KICAgIH0KCiAgICBpZGVudGl0eSBjbGFzc2lmaWVyIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIGNsYXNzaWZpZXIgaXMgdXNlZCBhcyBhIGJhc2UgdG8gcHJvdmlkZSBhbGwgY2xhc3NpZmllcnMKICAgICAgICB3aXRoIGlkZW50aXR5LiAiOwogICAgfQoKICAgIHR5cGVkZWYgc291cmNlSWQgewogICAgICAgIGRlc2NyaXB0aW9uICJBbiBpZGVudGl0eSB0aGF0IHJlcHJlc2VudHMgYSBuYXRpdmUgaWRlbnRpZmllciBvZiBhIHRvcG9sb2d5IGVudGl0eS4iOwogICAgICAgIHR5cGUgc3RyaW5nOwogICAgfQp9
o-ran-smo-teiv-equipment urn:o-ran:smo-teiv-equipment EQUIPMENT [] 2024-10-21 bW9kdWxlIG8tcmFuLXNtby10ZWl2LWVxdWlwbWVudCB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtZXF1aXBtZW50IjsKICAgIHByZWZpeCBvci10ZWl2LWVxdWlwOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7cHJlZml4IG9yLXRlaXYtdHlwZXM7IH0KCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7cHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIGltcG9ydCBpZXRmLWdlby1sb2NhdGlvbiB7CiAgICAgICAgcHJlZml4IGdlbzsKICAgICAgICByZWZlcmVuY2UgIlJGQyA5MTc5OiBBIFlBTkcgR3JvdXBpbmcgZm9yIEdlb2dyYXBoaWMgTG9jYXRpb25zIjsKICAgIH0KCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICJSQU4gRXF1aXBtZW50IHRvcG9sb2d5IG1vZGVsLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlCiAgICBSQU4gRXF1aXBtZW50IGRvbWFpbiwgd2hpY2ggaXMgbW9kZWxsZWQgdG8gdW5kZXJzdGFuZCB0aGUgcGh5c2ljYWwKICAgIGxvY2F0aW9uIG9mIGVxdWlwbWVudCBzdWNoIGFzIGFudGVubmFzIGFzc29jaWF0ZWQgd2l0aCBhIGNlbGwvY2FycmllcgogICAgYW5kIHRoZWlyIHJlbGV2YW50IHByb3BlcnRpZXMgZS5nLiB0aWx0LCBtYXggcG93ZXIgZXRjLgoKICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgTW9kaWZpY2F0aW9ucyBDb3B5cmlnaHQgKEMpIDIwMjQgT3BlbkluZnJhIEZvdW5kYXRpb24gRXVyb3BlCgogICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoKICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywKICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMjEiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiRGVwcmVjYXRlIEFudGVubmFNb2R1bGUgYXR0cmlidXRlIGFudGVubmFCZWFtV2lkdGguCiAgICAgICAgVG8gYmUgcmVwbGFjZWQgYnkgaG9yaXpvbnRhbEJlYW1XaWR0aCBhbmQgdmVydGljYWxCZWFtV2lkdGguIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC42LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDgiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgYXppbXV0aCBhdHRyaWJ1dGUgZm9yIEFudGVubmFNb2R1bGUuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmdzLCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIG9yIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAKICAgICAgICB0byB0aGUgY29ycmVzcG9uZGluZyB0b3BvbG9neSBvYmplY3RzLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBFUVVJUE1FTlQ7CgogICAgbGlzdCBBbnRlbm5hTW9kdWxlIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQW4gQW50ZW5uYSBNb2R1bGUgcmVwcmVzZW50cyB0aGUgcGh5c2ljYWwgYXNwZWN0IG9mIGFuCiAgICAgICAgYW50ZW5uYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGFudGVubmFNb2RlbE51bWJlciB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVmVuZG9yLXNwZWNpZmljIGFudGVubmEgbW9kZWwgaWRlbnRpZmllci4gVGhpcwogICAgICAgICAgICAgICAgYXR0cmlidXRlIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcyBubwogICAgICAgICAgICAgICAgb3BlcmF0aW9uYWwgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBtZWNoYW5pY2FsQW50ZW5uYUJlYXJpbmcgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgYmVhcmluZyBvbiBhbnRlbm5hIHN1YnVuaXQgd2hlcmUgYW50ZW5uYQogICAgICAgICAgICAgICAgdW5pdCBpcyBpbnN0YWxsZWQuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbWVjaGFuaWNhbEFudGVubmFUaWx0IHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgZml4ZWQgYW50ZW5uYSB0aWx0IG9mIHRoZSBpbnN0YWxsYXRpb24sIGRlZmluZWQKICAgICAgICAgICAgICAgIGFzIHRoZSBpbmNsaW5hdGlvbiBvZiB0aGUgYW50ZW5uYSBlbGVtZW50IHJlc3BlY3QgdG8gdGhlCiAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBwbGFuZS4gSXQgaXMgYSBzaWduZWQgdmFsdWUuIFBvc2l0aXZlIGluZGljYXRlcwogICAgICAgICAgICAgICAgZG93bnRpbHQsIGFuZCBuZWdhdGl2ZSBpbmRpY2F0ZXMgdXB0aWx0LiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIHBvc2l0aW9uV2l0aGluU2VjdG9yIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIHVuaXQgcG9zaXRpb24gd2l0aGluIHNlY3Rvci4gVGhpcyBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgIGlzIHBhcnQgb2YgQUlTRyB2MyBBREIgU3RhbmRhcmQgYW5kIGhhcyBubyBvcGVyYXRpb25hbAogICAgICAgICAgICAgICAgaW1wYWN0LiI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiB0b3RhbFRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRvdGFsIGFudGVubmEgZWxldmF0aW9uIGluY2x1ZGluZyB0aGUgaW5zdGFsbGVkCiAgICAgICAgICAgICAgICB0aWx0IGFuZCB0aGUgdGlsdCBhcHBsaWVkIGJ5IHRoZSBSZW1vdGUgRWxlY3RyaWNhbAogICAgICAgICAgICAgICAgVGlsdCAoUkVUKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBlbGVjdHJpY2FsQW50ZW5uYVRpbHQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkVsZWN0cmljYWxseS1jb250cm9sbGVkIHRpbHQgb2YgbWFpbiBiZWFtIG1heGltdW0KICAgICAgICAgICAgICAgIHdpdGggcmVzcGVjdCB0byBkaXJlY3Rpb24gb3J0aG9nb25hbCB0byBhbnRlbm5hIGVsZW1lbnQKICAgICAgICAgICAgICAgIGF4aXMgKHNlZSAzR1BQIFRTIDI1LjQ2NikuIFZhbHVlIGlzIHNpZ25lZDsgdGlsdCBkb3duIGlzCiAgICAgICAgICAgICAgICBwb3NpdGl2ZSwgdGlsdCB1cCBpcyBuZWdhdGl2ZS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGFudGVubmFCZWFtV2lkdGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIGhvcml6b250YWwgcGxhbmUuIE1lYXN1cmVkIGluCiAgICAgICAgICAgICAgICBkZWdyZWVzLgoKICAgICAgICAgICAgICAgIERlcHJlY2F0ZWQ6IFNpbmNlIDI0LlE0LiBSZXBsYWNlZCBieSBBbnRlbm5hTW9kdWxlOjpob3Jpem9udGFsQmVhbVdpZHRoCiAgICAgICAgICAgICAgICBhbmQgQW50ZW5uYU1vZHVsZTo6dmVydGljYWxCZWFtV2lkdGguIFBsYW5uZWQgdG8gYmUgcmVtb3ZlZC4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgaG9yaXpvbnRhbEJlYW1XaWR0aCAgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIGhvcml6b250YWwgcGxhbmUuIjsKICAgICAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0IHsKICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgMTsKICAgICAgICAgICAgICAgICAgICByYW5nZSAiMC4uMzYwIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuaXRzICJkZWNpbWFsIGRlZ3JlZXMiOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIHZlcnRpY2FsQmVhbVdpZHRoICAgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBhbmd1bGFyIHNwYW4gb2YgdGhlIG1haW4gbG9iZSBvZiB0aGUgYW50ZW5uYQogICAgICAgICAgICAgICAgcmFkaWF0aW9uIHBhdHRlcm4gaW4gdGhlIHZlcnRpY2FsIHBsYW5lLiI7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgIjAuLjM2MCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhemltdXRoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJUaGUgdmFsdWUgb2YgdGhlIGF6aW11dGggb2YgdGhlIEFudGVubmEgTW9kdWxlLiI7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NCB7CiAgICAgICAgICAgICAgICAgICAgZnJhY3Rpb24tZGlnaXRzIDE7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UgIjAuLjM2MCI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB1bml0cyAiZGVjaW1hbCBkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdXNlcyBnZW86Z2VvLWxvY2F0aW9uOwogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IFNpdGUgewogICAgICAgIGRlc2NyaXB0aW9uICJBIHNpdGUgaXMgYSBwaHlzaWNhbCBsb2NhdGlvbiB3aGVyZSBhbiBlcXVpcG1lbnQgY2FuIGJlCiAgICAgICAgaW5zdGFsbGVkLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgbmFtZSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmFtZSBvZiBTaXRlIjsKICAgICAgICAgICAgICAgIHR5cGUgc3RyaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICB1c2VzIGdlbzpnZW8tbG9jYXRpb247CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgQU5URU5OQU1PRFVMRV9JTlNUQUxMRURfQVRfU0lURSB7IC8vIDAuLm4gdG8gMC4uMQoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBBbnRlbm5hTW9kdWxlIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgU2l0ZSB0eXBlLgogICAgICAgICAgICBUaGUgU2l0ZSByZXByZXNlbnRzIHRoZSBwaHlzaWNhbCBsb2NhdGlvbiB3aGVyZSB0aGUgQW50ZW5uYU1vZHVsZSBpcyBpbnN0YWxsZWQuCiAgICAgICAgICAgIEFuIEFudGVubmFNb2R1bGUgaW5zdGFuY2UgY2FuIG9ubHkgYmUgaW5zdGFsbGVkIGF0IG9uZSBTaXRlLgogICAgICAgICAgICBBIFNpdGUgaW5zdGFuY2UgY2FuIGhhdmUgbWFueSBpbnN0YWxsZWQgQW50ZW5uYU1vZHVsZXMuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGluc3RhbGxlZC1hdC1zaXRlIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIkFudGVubmEgTW9kdWxlIGluc3RhbGxlZCBhdCBTaXRlLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBBbnRlbm5hTW9kdWxlOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgaW5zdGFsbGVkLWFudGVubmFNb2R1bGUgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiU2l0ZSB3aGVyZSBBbnRlbm5hIE1vZHVsZSBpcyBpbnN0YWxsZWQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIFNpdGU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9Cn0=
o-ran-smo-teiv-oam urn:o-ran:smo-teiv-oam OAM [] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LW9hbSB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtb2FtIjsKICAgIHByZWZpeCBvci10ZWl2LW9hbTsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbiAKICAgICJSQU4gTyZNIHRvcG9sb2d5IG1vZGVsLgoKICAgIFRoaXMgbW9kZWwgY29udGFpbnMgdGhlIHRvcG9sb2d5IGVudGl0aWVzIGFuZCByZWxhdGlvbnMgaW4gdGhlCiAgICBSQU4gTyZNIGRvbWFpbiwgd2hpY2ggYXJlIGludGVuZGVkIHRvIHJlcHJlc2VudCBtYW5hZ2VtZW50IHN5c3RlbXMKICAgIGFuZCBtYW5hZ2VtZW50IGludGVyZmFjZXMuCgogICAgQ29weXJpZ2h0IChDKSAyMDI0IEVyaWNzc29uCiAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQogICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjQuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNS0yNCIgewogICAgICAgIGRlc2NyaXB0aW9uICJJbml0aWFsIHJldmlzaW9uLiI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuMy4wOwogICAgfQoKICAgIG9yLXRlaXYteWV4dDpkb21haW4gT0FNOwoKICAgIGxpc3QgTWFuYWdlZEVsZW1lbnQgewogICAgICAgIGRlc2NyaXB0aW9uICJBIE1hbmFnZWQgRWxlbWVudCAoTUUpIGlzIGEgbm9kZSBpbnRvIGEgdGVsZWNvbW11bmljYXRpb24KICAgICAgICBuZXR3b3JrIHByb3ZpZGluZyBzdXBwb3J0IGFuZC9vciBzZXJ2aWNlIHRvIHN1YnNjcmliZXJzLiBBbiBNRQogICAgICAgIGNvbW11bmljYXRlcyB3aXRoIGEgbWFuYWdlciBhcHBsaWNhdGlvbiAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkKICAgICAgICBvdmVyIG9uZSBvciBtb3JlIGludGVyZmFjZXMgZm9yIHRoZSBwdXJwb3NlIG9mIGJlaW5nIG1vbml0b3JlZAogICAgICAgIGFuZC9vciBjb250cm9sbGVkLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwogICAgfQp9
o-ran-smo-teiv-ran urn:o-ran:smo-teiv-ran RAN [] 2024-10-08 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJhbiB7CiAgICB5YW5nLXZlcnNpb24gMS4xOwogICAgbmFtZXNwYWNlICJ1cm46by1yYW46c21vLXRlaXYtcmFuIjsKICAgIHByZWZpeCBvci10ZWl2LXJhbjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMge3ByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMge3ByZWZpeCBvci10ZWl2LXlleHQ7IH0KCiAgICBpbXBvcnQgXzNncHAtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggdHlwZXMzZ3BwOyB9CgogICAgaW1wb3J0IGlldGYtZ2VvLWxvY2F0aW9uIHsKICAgICAgICBwcmVmaXggZ2VvOwogICAgICAgIHJlZmVyZW5jZSAiUkZDIDkxNzk6IEEgWUFORyBHcm91cGluZyBmb3IgR2VvZ3JhcGhpYyBMb2NhdGlvbnMiOwogICAgfQoKICAgIG9yZ2FuaXphdGlvbiAiT1JBTiI7CiAgICBjb250YWN0ICJUaGUgQXV0aG9ycyI7CiAgICBkZXNjcmlwdGlvbgogICAgICAgICJSQU4gTG9naWNhbCB0b3BvbG9neSBtb2RlbC4KCiAgICAgICAgVGhpcyBtb2RlbCBjb250YWlucyB0aGUgdG9wb2xvZ3kgZW50aXRpZXMgYW5kIHJlbGF0aW9ucyBpbiB0aGUKICAgICAgICBSQU4gTG9naWNhbCBkb21haW4sIHdoaWNoIHJlcHJlc2VudHMgdGhlIGZ1bmN0aW9uYWwgY2FwYWJpbGl0eQogICAgICAgIG9mIHRoZSBkZXBsb3llZCBSQU4gdGhhdCBhcmUgcmVsZXZhbnQgdG8gckFwcHMgdXNlIGNhc2VzLgoKICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMjQgRXJpY3Nzb24KICAgICAgICBNb2RpZmljYXRpb25zIENvcHlyaWdodCAoQykgMjAyNCBPcGVuSW5mcmEgRm91bmRhdGlvbiBFdXJvcGUKCiAgICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTsKICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CgogICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAgICAgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLAogICAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogICAgICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKICAgICAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCiAgICAgICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAiOwoKICAgIHJldmlzaW9uICIyMDI0LTEwLTA4IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkFkZGVkIHJhbmdlIGZvciBhemltdXRoIGF0dHJpYnV0ZSBvZiBTZWN0b3IuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC42LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmdzLCBPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwIG9yIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAKICAgICAgICB0byB0aGUgY29ycmVzcG9uZGluZyB0b3BvbG9neSBvYmplY3QuIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC41LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDctMTUiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiVGhpcyByZXZpc2lvbiBhbGlnbnMgTy1SQU4gV29yayBHcm91cCAxMCBTdGFnZSAyIFNwZWNpZmljYXRpb24gKE8tUkFOLldHMTAuVEUmSVYtQ0lNSS4wLVIwMDQudjAyLjAwKSI7CiAgICAgICAgb3ItdGVpdi15ZXh0OmxhYmVsIDAuNC4wOwogICAgfQoKICAgIHJldmlzaW9uICIyMDI0LTA1LTI0IiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBSQU47CgogICAgbGlzdCBPUlVGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIFJhZGlvIFVuaXQgKE8tUlUpLgoKICAgICAgICBBIGxvZ2ljYWwgbm9kZSBob3N0aW5nIExvdy1QSFkgbGF5ZXIgYW5kIFJGIHByb2Nlc3NpbmcgYmFzZWQgb24gYQogICAgICAgIGxvd2VyIGxheWVyIGZ1bmN0aW9uYWwgc3BsaXQuICBUaGlzIGlzIHNpbWlsYXIgdG8gM0dQUOKAmXMg4oCcVFJQ4oCdIG9yCiAgICAgICAg4oCcUlJI4oCdIGJ1dCBtb3JlIHNwZWNpZmljIGluIGluY2x1ZGluZyB0aGUgTG93LVBIWSBsYXllciAoRkZUL2lGRlQsCiAgICAgICAgUFJBQ0ggZXh0cmFjdGlvbikuIFRoZSBPLVJVIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIGludGVyZmFjZQogICAgICAgIChhbHNvIGtub3duIGFzIExMUyBpbnRlcmZhY2UpIGFzIHdlbGwgYXMgTG93LVBIWSBmdW5jdGlvbnMgb2YgdGhlCiAgICAgICAgcmFkaW8gaW50ZXJmYWNlIHRvd2FyZHMgdGhlIFVFLiBUaGlzIGlzIGRlcGxveWVkIGFzIGEgUE5GLiBUaGUgTy1SVQogICAgICAgIHRlcm1pbmF0ZXMgdGhlIE9wZW4gRnJvbnRoYXVsIE0tUGxhbmUgaW50ZXJmYWNlIHRvd2FyZHMgdGhlIE8tRFUKICAgICAgICBhbmQgU01PLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBPLVJVIG9iamVjdC4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIG9ydUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIE8tUlUgd2l0aGluIGEgT1JVRnVuY3Rpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5lYXJSVFJJQ0Z1bmN0aW9uIHsKICAgICAgICBkZXNjcmlwdGlvbiAiTmVhci1SZWFsLVRpbWUgUkFOIEludGVsbGlnZW50IENvbnRyb2xsZXIgKE5lYXItUlQgUklDKS4KCiAgICAgICAgQW4gTy1SQU4gTmV0d29yayBGdW5jdGlvbiAoTkYpIHRoYXQgZW5hYmxlcyBuZWFyLXJlYWwtdGltZSBjb250cm9sCiAgICAgICAgYW5kIG9wdGltaXphdGlvbiBvZiBSQU4gZWxlbWVudHMgYW5kIHJlc291cmNlcyB2aWEgZmluZS1ncmFpbmVkCiAgICAgICAgZGF0YSBjb2xsZWN0aW9uIGFuZCBhY3Rpb25zIG92ZXIgRTIgaW50ZXJmYWNlLiBJdCBtYXkgaW5jbHVkZQogICAgICAgIEFJL01MIChBcnRpZmljaWFsIEludGVsbGlnZW5jZSAvIE1hY2hpbmUgTGVhcm5pbmcpIHdvcmtmbG93CiAgICAgICAgaW5jbHVkaW5nIG1vZGVsIHRyYWluaW5nLCBpbmZlcmVuY2UsIGFuZCB1cGRhdGVzLgoKICAgICAgICBOb3RlOiBJbiBUb3BvbG9neSwgeW91IGNhbiBjcmVhdGUsIHJlYWQsIHVwZGF0ZSwgYW5kIGRlbGV0ZQogICAgICAgIHRoZSBOZWFyLVJUIFJJQyBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgbGVhZiBuZWFyUnRSaWNJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoZSBOZWFyLVJUIFJJQyB3aXRoaW4gYSBOZWFyUlRSSUNGdW5jdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb250YWluZXIgcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4KICAgICAgICAgICAgICAgIG5vZGUgaWRlbnRpdHkiOwogICAgICAgICAgICAgICAgdXNlcyB0eXBlczNncHA6UExNTklkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0RVRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBEaXN0cmlidXRlZCBVbml0IChPLURVKS4KCiAgICAgICAgVGhlIE8tRFUgaXMgYW4gTy1SQU4gTkYgaW4gdGhlIE8tUkFOIEFyY2hpdGVjdHVyZS4gQW4gTy1EVSwgY29tYmluZWQKICAgICAgICB3aXRoIG9uZSBvciBtb3JlIE8tUlUocykgY29ubmVjdGVkIHRvIGl0LCBzdXBwb3J0cyBhbmQgaXMgZnVsbHkKICAgICAgICBjb21wYXRpYmxlIHdpdGggdGhlIGZ1bmN0aW9ucyBvZiBhIGdOQi1EVSBhcyBkZWZpbmVkIGJ5IDNHUFAgVFMgMzguNDAxLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1EVToKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tQ1UtQ1AgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzCiAgICAgICAgY29ubmVjdGVkIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEYxLVUgaW50ZXJmYWNlLiBPbmUgTy1EVSBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmx5IG9uZSBPLUNVLUNQLiBPbmUgTy1EVSBjYW4gYmUgY29ubmVjdGVkIHRvCiAgICAgICAgbXVsdGlwbGUgTy1DVS1VUHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gTy1EVSBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgTkctUkFOCiAgICAgICAgbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQgZGVsZXRlCiAgICAgICAgdGhlIGdOQi1EVSBvYmplY3QuIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX0VudGl0eV9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVzIHsKICAgICAgICAgICAgY29udGFpbmVyIGRVcExNTklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJQTE1OIGlkZW50aWZpZXIgdXNlZCBhcyBwYXJ0IG9mIFBNIEV2ZW50cyBkYXRhIjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJEVUlkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIERVIHdpdGhpbiBhIGdOb2RlQiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJJZGVudGl0eSBvZiBnTm9kZUIgd2l0aGluIGEgUExNTiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDY0OwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGdOQklkTGVuZ3RoIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMZW5ndGggb2YgZ05CSWQgYml0IHN0cmluZyByZXByZXNlbnRhdGlvbiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgT0NVQ1BGdW5jdGlvbiB7CiAgICAgICAgZGVzY3JpcHRpb24gIk8tUkFOIENlbnRyYWxpemVkIFVuaXQgQ29udHJvbCBQbGFuZSAoTy1DVS1DUCkKCiAgICAgICAgVGhpcyBpcyBhIGxvZ2ljYWwgbm9kZSBob3N0aW5nIHRoZSBSYWRpbyBSZXNvdXJjZSBDb250cm9sIChSUkMpIGFuZAogICAgICAgIHRoZSBjb250cm9sIHBsYW5lIHBhcnQgb2YgdGhlIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sCiAgICAgICAgKFBEQ1ApLiBUaGUgTy1DVS1DUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UgY29ubmVjdGVkIHdpdGgKICAgICAgICB0aGUgTy1DVS1VUCBhbmQgdGhlIEYxLUMgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoIHRoZSBPLVJBTgogICAgICAgIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1DUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtQyBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLVVQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25seSBvbmUgTy1DVS1DUCBpcwogICAgICAgIGNvbm5lY3RlZCB0byBvbmUgTy1EVS4gT25seSBvbmUgTy1DVS1DUCBpcyBjb25uZWN0ZWQgdG8gb25lCiAgICAgICAgTy1DVS1VUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBPLUNVLVVQcyB1bmRlcgogICAgICAgIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZSBPLUNVLVVQIGNhbiBiZSBjb25uZWN0ZWQgdG8KICAgICAgICBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlIHNhbWUgTy1DVS1DUC4KCiAgICAgICAgTm90ZTogQSBnTkIgbWF5IGNvbnNpc3Qgb2YgYSBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1DUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtQ1Agb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CQ1VOYW1lIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOYW1lIG9mIGdOb2RlQi1DVSI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiSWRlbnRpdHkgb2YgZ05vZGVCIHdpdGhpbiBhIFBMTU4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBnTkJJZExlbmd0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGVuZ3RoIG9mIGdOQklkIGJpdCBzdHJpbmcgcmVwcmVzZW50YXRpb24iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY29udGFpbmVyIHBMTU5JZCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUExNTiBpZGVudGlmaWVyIHRvIGJlIHVzZWQgYXMgcGFydCBvZiBnbG9iYWwgUkFOCiAgICAgICAgICAgICAgICBub2RlIGlkZW50aXR5IjsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE9DVVVQRnVuY3Rpb24gewogICAgICAgIGRlc2NyaXB0aW9uICJPLVJBTiBDZW50cmFsaXplZCBVbml0IFVzZXIgUGxhbmUgKE8tQ1UtVVApCgogICAgICAgIEFuIE8tQ1UtVVAgaXMgYSBsb2dpY2FsIG5vZGUgaG9zdGluZyB0aGUgVXNlciBQbGFuZSBwYXJ0IG9mIHRoZQogICAgICAgIFBhY2tldCBEYXRhIENvbnZlcmdlbmNlIFByb3RvY29sIChQRENQKSBhbmQgdGhlIFNlcnZpY2UgRGF0YQogICAgICAgIEFkYXB0YXRpb24gUHJvdG9jb2wgKFNEQVApLiBUaGUgTy1DVS1VUCB0ZXJtaW5hdGVzIHRoZSBFMSBpbnRlcmZhY2UKICAgICAgICBjb25uZWN0ZWQgd2l0aCB0aGUgTy1DVS1DUCBhbmQgdGhlIEYxLVUgaW50ZXJmYWNlIGNvbm5lY3RlZCB3aXRoCiAgICAgICAgdGhlIE8tUkFOIERpc3RyaWJ1dGVkIFVuaXQgKE8tRFUpLgoKICAgICAgICBUaGUgZm9sbG93aW5nIGlzIHRydWUgZm9yIGEgTy1DVS1VUDoKICAgICAgICBJcyBjb25uZWN0ZWQgdG8gdGhlIE8tRFUgdGhyb3VnaCB0aGUgRjEtVSBpbnRlcmZhY2UuIElzIGNvbm5lY3RlZAogICAgICAgIHRvIHRoZSBPLUNVLUNQIHRocm91Z2ggdGhlIEUxIGludGVyZmFjZS4gT25lIE8tQ1UtVVAgaXMKICAgICAgICBjb25uZWN0ZWQgdG8gb25seSBvbmUgTy1DVS1DUC4gT25lIE8tRFUgY2FuIGJlIGNvbm5lY3RlZCB0bwogICAgICAgIG11bHRpcGxlIE8tQ1UtVVBzIHVuZGVyIHRoZSBjb250cm9sIG9mIHRoZSBzYW1lIE8tQ1UtQ1AuIE9uZQogICAgICAgIE8tQ1UtVVAgY2FuIGJlIGNvbm5lY3RlZCB0byBtdWx0aXBsZSBEVXMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCiAgICAgICAgc2FtZSBPLUNVLUNQLgoKICAgICAgICBOb3RlOiBBIGdOQiBtYXkgY29uc2lzdCBvZiBhbiBPLUNVLUNQLCBtdWx0aXBsZSBPLUNVLVVQcyBhbmQKICAgICAgICBtdWx0aXBsZSBPLURVcy4gQW4gTy1DVS1VUCBpcyBhIGNvbmNyZXRlIGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUKICAgICAgICBORy1SQU4gbm9kZSBvYmplY3QuIEluIFRvcG9sb2d5LCB5b3UgY2FuIGNyZWF0ZSwgcmVhZCwgdXBkYXRlLCBhbmQKICAgICAgICBkZWxldGUgdGhlIE8tQ1UtVVAgb2JqZWN0LiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgZ05CSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIklkZW50aXR5IG9mIGdOb2RlQiB3aXRoaW4gYSBQTE1OIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZ05CSWRMZW5ndGggewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIkxlbmd0aCBvZiBnTkJJZCBiaXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpc3QgcExNTklkTGlzdCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBQTE1OIGlkZW50aWZpZXIgdG8gYmUgdXNlZCBhcyBwYXJ0IG9mIGdsb2JhbCBSQU4gbm9kZSBpZGVudGl0eSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBOUkNlbGxDVSB7CiAgICAgICAgZGVzY3JpcHRpb24gIlJlcHJlc2VudHMgYW4gTlIgQ2VsbCBpbiBnTm9kZUItQ1UuCgogICAgICAgIDVHIE5SIGlzIGEgbmV3IHJhZGlvIGFjY2VzcyB0ZWNobm9sb2d5IChSQVQpIGRldmVsb3BlZCBieSAzR1BQIGZvcgogICAgICAgIHRoZSA1RyAoZmlmdGggZ2VuZXJhdGlvbikgbW9iaWxlIG5ldHdvcmsuIEl0IGlzIGRlc2lnbmVkIHRvIGJlIHRoZQogICAgICAgIGdsb2JhbCBzdGFuZGFyZCBmb3IgdGhlIGFpciBpbnRlcmZhY2Ugb2YgNUcgbmV0d29ya3MuCgogICAgICAgIDVHIE5SIGhhcyBzeW5jaHJvbml6YXRpb24gc2lnbmFsIHRoYXQgaXMga25vd24gYXMgUHJpbWFyeQogICAgICAgIFN5bmNocm9uaXphdGlvbiBTaWduYWwgKFBTUykgYW5kIFNlY29uZGFyeSBTeW5jaHJvbml6YXRpb24KICAgICAgICBTaWduYWwgKFNTUykuIFRoZXNlIHNpZ25hbHMgYXJlIHNwZWNpZmljIHRvIE5SIHBoeXNpY2FsIGxheWVyIGFuZAogICAgICAgIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSBVRSBmb3IgZG93bmxpbmsKICAgICAgICBzeW5jaHJvbml6YXRpb246IFBTUyBwcm92aWRlcyBSYWRpbyBGcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YgMXN0CiAgICAgICAgU3ltYm9sIGluIGEgUmFkaW8gZnJhbWUpIFNTUyBwcm92aWRlcyBTdWJmcmFtZSBCb3VuZGFyeSAoUG9zaXRpb24gb2YKICAgICAgICAxc3QgU3ltYm9sIGluIGEgU3ViZnJhbWUpIFBoeXNpY2FsIExheWVyIENlbGwgSUQgKFBDSSkgaW5mb3JtYXRpb24KICAgICAgICB1c2luZyBib3RoIFBTUyBhbmQgU1NTLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgY2VsbExvY2FsSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlVzZWQgdG9nZXRoZXIgd2l0aCBnTm9kZUIgaWRlbnRpZmllciB0byBpZGVudGlmeSBOUgogICAgICAgICAgICAgICAgY2VsbCBpbiBQTE1OLiBVc2VkIHRvZ2V0aGVyIHdpdGggZ05CSWQgdG8gZm9ybSBOQ0kuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBwbG1uSWQgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlBMTU4gSUQgZm9yIE5SIENHSS4gSWYgZW1wdHksCiAgICAgICAgICAgICAgICBHTkJDVUNQRnVuY3Rpb246OnBMTU5JZCBpcyB1c2VkIGZvciBQTE1OIElEIGluIE5SIENHSSI7CiAgICAgICAgICAgICAgICB1c2VzIHR5cGVzM2dwcDpQTE1OSWQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgbkNJIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsIElkZW50aXR5IjsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKSI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgTlJDZWxsRFUgewogICAgICAgIGRlc2NyaXB0aW9uICJSZXByZXNlbnRzIGFuIE5SIENlbGwgaW4gZ05vZGVCLURVLgoKICAgICAgICA1RyBOUiBpcyBhIG5ldyByYWRpbyBhY2Nlc3MgdGVjaG5vbG9neSAoUkFUKSBkZXZlbG9wZWQgYnkgM0dQUCBmb3IKICAgICAgICB0aGUgNUcgKGZpZnRoIGdlbmVyYXRpb24pIG1vYmlsZSBuZXR3b3JrLiBJdCBpcyBkZXNpZ25lZCB0byBiZSB0aGUKICAgICAgICBnbG9iYWwgc3RhbmRhcmQgZm9yIHRoZSBhaXIgaW50ZXJmYWNlIG9mIDVHIG5ldHdvcmtzLgoKICAgICAgICA1RyBOUiBoYXMgc3luY2hyb25pemF0aW9uIHNpZ25hbCB0aGF0IGlzIGtub3duIGFzIFByaW1hcnkKICAgICAgICBTeW5jaHJvbml6YXRpb24gc2lnbmFsIChQU1MpIGFuZCBTZWNvbmRhcnkgU3luY2hyb25pemF0aW9uIHNpZ25hbAogICAgICAgIChTU1MpLiBUaGVzZSBzaWduYWxzIGFyZSBzcGVjaWZpYyB0byBOUiBwaHlzaWNhbCBsYXllciBhbmQgcHJvdmlkZQogICAgICAgIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gcmVxdWlyZWQgYnkgVUUgZm9yIGRvd25saW5rCiAgICAgICAgc3luY2hyb25pemF0aW9uOiBQU1MgcHJvdmlkZXMgUmFkaW8gRnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mIDFzdAogICAgICAgIFN5bWJvbCBpbiBhIFJhZGlvIGZyYW1lKSBTU1MgcHJvdmlkZXMgU3ViZnJhbWUgQm91bmRhcnkgKFBvc2l0aW9uIG9mCiAgICAgICAgMXN0IFN5bWJvbCBpbiBhIFN1YmZyYW1lKSBQaHlzaWNhbCBMYXllciBDZWxsIElEIChQQ0kpIGluZm9ybWF0aW9uCiAgICAgICAgdXNpbmcgYm90aCBQU1MgYW5kIFNTUy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGNlbGxMb2NhbElkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVc2VkIHRvZ2V0aGVyIHdpdGggZ05vZGVCIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgTlIKICAgICAgICAgICAgICAgIGNlbGwgaW4gUExNTi4gVXNlZCB0b2dldGhlciB3aXRoIGdOQklkIHRvIGZvcm0gTkNJLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIG5DSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbCBJZGVudGl0eS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQ2NDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBuUlBDSSB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiVGhlIFBoeXNpY2FsIENlbGwgSWRlbnRpdHkgKFBDSSkgb2YgdGhlIE5SIGNlbGwuIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgblJUQUMgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFRyYWNraW5nIEFyZWEgQ29kZSAoVEFDKS4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBsaXN0IE5SU2VjdG9yQ2FycmllciB7CiAgICAgICAgZGVzY3JpcHRpb24gIlRoZSBOUiBTZWN0b3IgQ2FycmllciBvYmplY3QgcHJvdmlkZXMgdGhlIGF0dHJpYnV0ZXMgZm9yCiAgICAgICAgZGVmaW5pbmcgdGhlIGxvZ2ljYWwgY2hhcmFjdGVyaXN0aWNzIG9mIGEgY2FycmllciAoY2VsbCkgaW4gYQogICAgICAgIHNlY3Rvci4gQSBzZWN0b3IgaXMgYSBjb3ZlcmFnZSBhcmVhIGFzc29jaWF0ZWQgd2l0aCBhIGJhc2Ugc3RhdGlvbgogICAgICAgIGhhdmluZyBpdHMgb3duIGFudGVubmFzLCByYWRpbyBwb3J0cywgYW5kIGNvbnRyb2wgY2hhbm5lbHMuIFRoZQogICAgICAgIGNvbmNlcHQgb2Ygc2VjdG9ycyB3YXMgZGV2ZWxvcGVkIHRvIGltcHJvdmUgY28tY2hhbm5lbCBpbnRlcmZlcmVuY2UKICAgICAgICBpbiBjZWxsdWxhciBzeXN0ZW1zLCBhbmQgbW9zdCB3aXJlbGVzcyBzeXN0ZW1zIHVzZSB0aHJlZSBzZWN0b3IKICAgICAgICBjZWxscy4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIGFyZmNuREwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIEFic29sdXRlIFJhZGlvIEZyZXF1ZW5jeSBDaGFubmVsIE51bWJlcgogICAgICAgICAgICAgICAgKE5SLUFSRkNOKSBmb3IgZG93bmxpbmsiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhcmZjblVMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBBYnNvbHV0ZSBSYWRpbyBmcmVxdWVuY3kgQ2hhbm5lbCBOdW1iZXIKICAgICAgICAgICAgICAgIChOUi1BUkZDTikgZm9yIHVwbGluay4iOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBmcmVxdWVuY3lETCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiUkYgUmVmZXJlbmNlIEZyZXF1ZW5jeSBvZiBkb3dubGluayBjaGFubmVsIjsKICAgICAgICAgICAgICAgIHR5cGUgaW50MzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgZnJlcXVlbmN5VUwgewogICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gIlJGIFJlZmVyZW5jZSBGcmVxdWVuY3kgb2YgdXBsaW5rIGNoYW5uZWwiOwogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBiU0NoYW5uZWxCd0RMIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJCUyBDaGFubmVsIGJhbmR3aWR0aCBpbiBNSHogZm9yIGRvd25saW5rLiI7CiAgICAgICAgICAgICAgICB0eXBlIGludDMyOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIGxpc3QgQW50ZW5uYUNhcGFiaWxpdHkgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIE1PIHNlcnZlcyBhcyBhIG1hcHBpbmcgYmV0d2VlbiB0aGUgY2VsbCBhbmQgdGhlIFJCUwogICAgICAgIGVxdWlwbWVudCB1c2VkIHRvIHByb3ZpZGUgY292ZXJhZ2UgaW4gYSBjZXJ0YWluIGdlb2dyYXBoaWNhbCBhcmVhLgogICAgICAgIFRoZSBNTyBhbHNvIGNvbnRyb2xzIHRoZSBtYXhpbXVtIG91dHB1dCBwb3dlciBvZiB0aGUgc2VjdG9yLiI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9FbnRpdHlfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYtbGlzdCBlVXRyYW5GcUJhbmRzIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJMaXN0IG9mIExURSBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGdlcmFuRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBHRVJBTiBmcmVxdWVuY3kgYmFuZHMgdGhhdCBhc3NvY2lhdGVkCiAgICAgICAgICAgICAgICBoYXJkd2FyZSBzdXBwb3J0cyI7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IG5SRnFCYW5kcyB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiTGlzdCBvZiBOUiBmcmVxdWVuY3kgYmFuZHMgYXNzb2NpYXRlZCBoYXJkd2FyZQogICAgICAgICAgICAgICAgc3VwcG9ydHMiOwogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgbGlzdCBTZWN0b3IgewogICAgICAgIGRlc2NyaXB0aW9uICJBIGdyb3VwIG9mIGNvLWxvY2F0ZWQgQ2VsbHMgdGhhdCBoYXZlIGEgc2hhcmVkCiAgICAgICAgY292ZXJhZ2UgYXJlYS4iOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fRW50aXR5X01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgY29udGFpbmVyIGF0dHJpYnV0ZXMgewogICAgICAgICAgICBsZWFmIHNlY3RvcklkIHsKICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uICJVbml2ZXJzYWxseSB1bmlxdWUgSUQgZ2VuZXJhdGVkIGJ5IHRoZSBzZWN0b3IncwogICAgICAgICAgICAgICAgZGlzY292ZXJ5IG1lY2hhbmlzbS4iOwogICAgICAgICAgICAgICAgdHlwZSB1aW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHVzZXMgZ2VvOmdlby1sb2NhdGlvbjsKCiAgICAgICAgICAgIGxlYWYgYXppbXV0aCB7CiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiAiQXZlcmFnZSB2YWx1ZSBvZiB0aGUgYXppbXV0aHMgb2YgdGhlIGNlbGxzCiAgICAgICAgICAgICAgICBjb21wcmlzaW5nIHRoZSBzZWN0b3IsIGRldGVybWluZWQgZHVyaW5nIHNlY3RvciBkaXNjb3ZlcnkuIjsKICAgICAgICAgICAgICAgIHR5cGUgZGVjaW1hbDY0ewogICAgICAgICAgICAgICAgICAgIGZyYWN0aW9uLWRpZ2l0cyAxOwogICAgICAgICAgICAgICAgICAgIHJhbmdlICIwLi4zNjAiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdW5pdHMgImRlY2ltYWwgZGVncmVlcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgT0RVRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMRFUgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUkNlbGxEVSB0eXBlLgogICAgICAgICAgICBUaGUgT0RVRnVuY3Rpb24gcmVwcmVzZW50cyB0aGUgRFUgY29tcG9uZW50IG9mIGEgZ05CIHRoYXQgcHJvdmlkZXMgdGhlIE5SQ2VsbERVLgogICAgICAgICAgICBBIE9EVUZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBtdXN0IGJlIHByb3ZpZGVkIGJ5IGFuIE9EVUZ1bmN0aW9uLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHByb3ZpZGVkLW5yQ2VsbER1IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk8tRFUgRnVuY3Rpb24gcHJvdmlkZXMgTlIgQ2VsbC1EVS4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgQ2VsbC1EVSBwcm92aWRlZCBieSBPLURVIEZ1bmN0aW9uLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBPRFVGVU5DVElPTl9QUk9WSURFU19OUlNFQ1RPUkNBUlJJRVIgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0RVRnVuY3Rpb24gdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBOUlNlY3RvckNhcnJpZXIgdHlwZS4KICAgICAgICAgICAgVGhlIE9EVUZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIERVIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUlNlY3RvckNhcnJpZXIuCiAgICAgICAgICAgIEEgT0RVRnVuY3Rpb24gaW5zdGFuY2UgY2FuIHByb3ZpZGUgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgbXVzdCBiZSBwcm92aWRlZCBieSBhbiBPRFVGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uclNlY3RvckNhcnJpZXIgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBwcm92aWRlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgT0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2R1RnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTlIgU2VjdG9yIENhcnJpZXIgcHJvdmlkZWQgYnkgTy1EVSBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgTlJTZWN0b3JDYXJyaWVyOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE9DVUNQRlVOQ1RJT05fUFJPVklERVNfTlJDRUxMQ1UgeyAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbENVIHR5cGUuCiAgICAgICAgICAgIFRoZSBPQ1VDUEZ1bmN0aW9uIHJlcHJlc2VudHMgdGhlIENVLUNQIGNvbXBvbmVudCBvZiBhIGdOQiB0aGF0IHByb3ZpZGVzIHRoZSBOUkNlbGxDVS4KICAgICAgICAgICAgQSBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIGNhbiBwcm92aWRlIG1hbnkgTlJDZWxsQ1UuCiAgICAgICAgICAgIEFuIE5SQ2VsbENVIGluc3RhbmNlIG11c3QgYmUgcHJvdmlkZWQgYnkgYW4gT0NVQ1BGdW5jdGlvbi4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBwcm92aWRlZC1uckNlbGxDdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLUNQIEZ1bmN0aW9uIHByb3ZpZGVzIE5SIENlbGwtQ1UuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIE9DVUNQRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgcHJvdmlkZWQtYnktb2N1Y3BGdW5jdGlvbiB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLUNVIHByb3ZpZGVkIGJ5IE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SQ2VsbENVOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SQ0VMTERVX1VTRVNfTlJTRUNUT1JDQVJSSUVSIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTlJTZWN0b3JDYXJyaWVyIHR5cGUuCiAgICAgICAgICAgIFRoZSBOUkNlbGxEVSByZXByZXNlbnRzIHRoZSBjZWxsIHRoYXQgdXNlcyB0aGUgTlJTZWN0b3JDYXJyaWVyLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gdXNlIG1hbnkgTlJTZWN0b3JDYXJyaWVycy4KICAgICAgICAgICAgQW4gTlJTZWN0b3JDYXJyaWVyIGluc3RhbmNlIGNhbiBvbmx5IGJlIHVzZWQgYnkgb25lIE5SQ2VsbERVLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IHVzZWQtbnJTZWN0b3JDYXJyaWVyIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIENlbGwtRFUgdXNlcyBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgTlJDZWxsRFU7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgdXNlZC1ieS1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBTZWN0b3IgQ2FycmllciB1c2VkIGJ5IE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIE5SU2VjdG9yQ2FycmllcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE5SU0VDVE9SQ0FSUklFUl9VU0VTX0FOVEVOTkFDQVBBQklMSVRZIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SU2VjdG9yQ2FycmllciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIEFudGVubmFDYXBhYmlsaXR5IHR5cGUuCiAgICAgICAgICAgIFRoZSBOUlNlY3RvckNhcnJpZXIgcmVwcmVzZW50cyB0aGUgY2FycmllciB0aGF0IHVzZXMgdGhlIEFudGVubmFDYXBhYmlsaXR5LgogICAgICAgICAgICBBbiBOUlNlY3RvckNhcnJpZXIgaW5zdGFuY2UgY2FuIHVzZSBvbmx5IG9uZSBBbnRlbm5hQ2FwYWJpbGl0eS4KICAgICAgICAgICAgQW4gQW50ZW5uYUNhcGFiaWxpdHkgaW5zdGFuY2UgY2FuIGJlIHVzZWQgYnkgbWFueSBOUlNlY3RvckNhcnJpZXJzLgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZiB1c2VkLWFudGVubmFDYXBhYmlsaXR5IHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk5SIFNlY3RvciBDYXJyaWVyIHVzZXMgQW50ZW5uYSBDYXBhYmlsaXR5LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBOUlNlY3RvckNhcnJpZXI7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCB1c2VkLWJ5LW5yU2VjdG9yQ2FycmllciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBbnRlbm5hIENhcGFiaWxpdHkgdXNlZCBieSBOUiBTZWN0b3IgQ2Fycmllci4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgQW50ZW5uYUNhcGFiaWxpdHk7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBTRUNUT1JfR1JPVVBTX05SQ0VMTERVIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIFNlY3RvciB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5SQ2VsbERVIHR5cGUuCiAgICAgICAgICAgIFRoZSBTZWN0b3IgcmVwcmVzZW50cyB0aGUgZ2VvZ3JhcGhpY2FsIGFyZWEgdGhhdCBncm91cHMgdGhlIE5SQ2VsbERVcy4KICAgICAgICAgICAgQSBTZWN0b3IgaW5zdGFuY2UgY2FuIGdyb3VwIG1hbnkgTlJDZWxsRFVzLgogICAgICAgICAgICBBbiBOUkNlbGxEVSBpbnN0YW5jZSBjYW4gb25seSBiZSBncm91cGVkIGJ5IG9uZSBTZWN0b3IuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgZ3JvdXBlZC1uckNlbGxEdSB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJTZWN0b3IgZ3JvdXBzIE5SIENlbGwtRFUuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIFNlY3RvcjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KCiAgICAgICAgbGVhZiBncm91cGVkLWJ5LXNlY3RvciB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJOUiBDZWxsLURVIGdyb3VwZWQgYnkgU2VjdG9yLiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBOUkNlbGxEVTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgIH0KICAgIH0KfQ==
o-ran-smo-teiv-rel-oam-ran urn:o-ran:smo-teiv-rel-oam-ran REL_OAM_RAN ["o-ran-smo-teiv-oam", "o-ran-smo-teiv-ran"] 2024-10-04 bW9kdWxlIG8tcmFuLXNtby10ZWl2LXJlbC1vYW0tcmFuIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInVybjpvLXJhbjpzbW8tdGVpdi1yZWwtb2FtLXJhbiI7CiAgICBwcmVmaXggb3ItdGVpdi1yZWwtb2FtcmFuOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCBvci10ZWl2LXR5cGVzOyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLWV4dGVuc2lvbnMgeyBwcmVmaXggb3ItdGVpdi15ZXh0OyB9CgogICAgaW1wb3J0IG8tcmFuLXNtby10ZWl2LW9hbSB7IHByZWZpeCBvci10ZWl2LW9hbTsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1yYW4geyBwcmVmaXggb3ItdGVpdi1yYW47IH0KCiAgICBvcmdhbml6YXRpb24gIk9SQU4iOwogICAgY29udGFjdCAiVGhlIEF1dGhvcnMiOwogICAgZGVzY3JpcHRpb24KICAgICAgICAiUkFOIE8mTSB0byBMb2dpY2FsIHRvcG9sb2d5IG1vZGVsLgoKICAgICAgICBUaGlzIG1vZGVsIGNvbnRhaW5zIHRoZSBSQU4gTyZNIHRvIExvZ2ljYWwgdG9wb2xvZ3kgcmVsYXRpb25zCgogICAgICAgIENvcHlyaWdodCAoQykgMjAyNCBFcmljc3NvbgogICAgICAgIE1vZGlmaWNhdGlvbnMgQ29weXJpZ2h0IChDKSAyMDI0IE9wZW5JbmZyYSBGb3VuZGF0aW9uIEV1cm9wZQoKICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOwogICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KICAgICAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKCiAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCgogICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKICAgICAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsCiAgICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCiAgICAgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogICAgICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoKICAgICAgICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCI7CgogICAgcmV2aXNpb24gIjIwMjQtMTAtMDQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiQWRkZWQgZ3JvdXBpbmcsIE9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnAgdG8gdGhlIHRvcG9sb2d5IG9iamVjdC4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjUuMDsKICAgIH0KCiAgICByZXZpc2lvbiAiMjAyNC0wNy0xNSIgewogICAgICAgIGRlc2NyaXB0aW9uICJUaGlzIHJldmlzaW9uIGFsaWducyBPLVJBTiBXb3JrIEdyb3VwIDEwIFN0YWdlIDIgU3BlY2lmaWNhdGlvbiAoTy1SQU4uV0cxMC5URSZJVi1DSU1JLjAtUjAwNC52MDIuMDApIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgcmV2aXNpb24gIjIwMjQtMDUtMjQiIHsKICAgICAgICBkZXNjcmlwdGlvbiAiSW5pdGlhbCByZXZpc2lvbi4iOwogICAgICAgIG9yLXRlaXYteWV4dDpsYWJlbCAwLjMuMDsKICAgIH0KCiAgICBvci10ZWl2LXlleHQ6ZG9tYWluIFJFTF9PQU1fUkFOOwoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PRFVGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE9EVUZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0RVRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9EVUZ1bmN0aW9ucy4KICAgICAgICAgICAgQW4gT0RVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9kdUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tRFUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1EVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0RVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19PQ1VDUEZVTkNUSU9OIHsgICAgLy8gMSB0byAwLi5uCgogICAgICAgIGRlc2NyaXB0aW9uCiAgICAgICAgICAgICJUaGUgYVNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE1hbmFnZWRFbGVtZW50IHR5cGUuCiAgICAgICAgICAgIFRoZSBiU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgT0NVQ1BGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9DVUNQRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE9DVUNQRnVuY3Rpb25zLgogICAgICAgICAgICBBbiBPQ1VDUEZ1bmN0aW9uIGluc3RhbmNlIG11c3QgYmUgbWFuYWdlZCBieSBvbmUgTWFuYWdlZEVsZW1lbnQuCiAgICAgICAgICAgICI7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOk9yaWdpbl9SZWxhdGlvbnNoaXBfTWFwcGluZ19HcnA7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgbWFuYWdlZC1vY3VjcEZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tQ1UtQ1AgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1DVS1DUCBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T0NVQ1BGdW5jdGlvbjsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgICAgICBtYW5kYXRvcnkgdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBNQU5BR0VERUxFTUVOVF9NQU5BR0VTX09DVVVQRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPQ1VVUEZ1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgT0NVVVBGdW5jdGlvbi4KICAgICAgICAgICAgQSBNYW5hZ2VkRWxlbWVudCBpbnN0YW5jZSBjYW4gbWFuYWdlIG1hbnkgT0NVVVBGdW5jdGlvbnMuCiAgICAgICAgICAgIEFuIE9DVVVQRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9jdXVwRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTy1DVS1VUCBGdW5jdGlvbi4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgb3ItdGVpdi1vYW06TWFuYWdlZEVsZW1lbnQ7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICB9CgogICAgICAgIGxlYWYgbWFuYWdlZC1ieS1tYW5hZ2VkRWxlbWVudCB7CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJPLUNVLVVQIEZ1bmN0aW9uIG1hbmFnZWQgYnkgTWFuYWdlZCBFbGVtZW50LiI7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBvci10ZWl2LXJhbjpPQ1VVUEZ1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIE1BTkFHRURFTEVNRU5UX01BTkFHRVNfT1JVRlVOQ1RJT04geyAgICAvLyAxIHRvIDAuLm4KCiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICAgICAgIlRoZSBhU2lkZSBvZiB0aGlzIHJlbGF0aW9uc2hpcCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgTWFuYWdlZEVsZW1lbnQgdHlwZS4KICAgICAgICAgICAgVGhlIGJTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBPUlVGdW5jdGlvbiB0eXBlLgogICAgICAgICAgICBUaGUgTWFuYWdlZEVsZW1lbnQgcmVwcmVzZW50cyB0aGUgbm9kZSB0aGF0IG1hbmFnZXMgdGhlIE9SVUZ1bmN0aW9uLgogICAgICAgICAgICBBIE1hbmFnZWRFbGVtZW50IGluc3RhbmNlIGNhbiBtYW5hZ2UgbWFueSBPUlVGdW5jdGlvbi4KICAgICAgICAgICAgQW4gT1JVRnVuY3Rpb24gaW5zdGFuY2UgbXVzdCBiZSBtYW5hZ2VkIGJ5IG9uZSBNYW5hZ2VkRWxlbWVudC4KICAgICAgICAgICAgIjsKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6T3JpZ2luX1JlbGF0aW9uc2hpcF9NYXBwaW5nX0dycDsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYtbGlzdCBtYW5hZ2VkLW9ydUZ1bmN0aW9uIHsKICAgICAgICAgICAgZGVzY3JpcHRpb24gIk1hbmFnZWQgRWxlbWVudCBtYW5hZ2VzIE8tUlUgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTy1SVSBGdW5jdGlvbiBtYW5hZ2VkIGJ5IE1hbmFnZWQgRWxlbWVudC4iOwogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgb3ItdGVpdi1yYW46T1JVRnVuY3Rpb247CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgICAgICAgbWFuZGF0b3J5IHRydWU7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgTUFOQUdFREVMRU1FTlRfTUFOQUdFU19ORUFSUlRSSUNGVU5DVElPTiB7ICAgIC8vIDEgdG8gMC4ubgoKICAgICAgICBkZXNjcmlwdGlvbgogICAgICAgICAgICAiVGhlIGFTaWRlIG9mIHRoaXMgcmVsYXRpb25zaGlwIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBNYW5hZ2VkRWxlbWVudCB0eXBlLgogICAgICAgICAgICBUaGUgYlNpZGUgb2YgdGhpcyByZWxhdGlvbnNoaXAgaXMgYW4gaW5zdGFuY2Ugb2YgdGhlIE5lYXJSVFJJQ0Z1bmN0aW9uIHR5cGUuCiAgICAgICAgICAgIFRoZSBNYW5hZ2VkRWxlbWVudCByZXByZXNlbnRzIHRoZSBub2RlIHRoYXQgbWFuYWdlcyB0aGUgTmVhclJUUklDRnVuY3Rpb24uCiAgICAgICAgICAgIEEgTWFuYWdlZEVsZW1lbnQgaW5zdGFuY2UgY2FuIG1hbmFnZSBtYW55IE5lYXJSVFJJQ0Z1bmN0aW9uLgogICAgICAgICAgICBBbiBOZWFyUlRSSUNGdW5jdGlvbiBpbnN0YW5jZSBtdXN0IGJlIG1hbmFnZWQgYnkgb25lIE1hbmFnZWRFbGVtZW50LgogICAgICAgICAgICAiOwoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpPcmlnaW5fUmVsYXRpb25zaGlwX01hcHBpbmdfR3JwOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IG1hbmFnZWQtbmVhclJUUklDRnVuY3Rpb24gewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTWFuYWdlZCBFbGVtZW50IG1hbmFnZXMgTmVhciBSVCBSSUMgRnVuY3Rpb24uIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmFTaWRlIG9yLXRlaXYtb2FtOk1hbmFnZWRFbGVtZW50OwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgfQoKICAgICAgICBsZWFmIG1hbmFnZWQtYnktbWFuYWdlZEVsZW1lbnQgewogICAgICAgICAgICBkZXNjcmlwdGlvbiAiTmVhciBSVCBSSUMgRnVuY3Rpb24gbWFuYWdlZCBieSBNYW5hZ2VkIEVsZW1lbnQuIjsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIG9yLXRlaXYtcmFuOk5lYXJSVFJJQ0Z1bmN0aW9uOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICAgICAgIG1hbmRhdG9yeSB0cnVlOwogICAgICAgIH0KICAgIH0KfQ==
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
o-ran-smo-teiv-cloud_CloudifiedNF CloudifiedNF o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-cloud_NFDeployment NFDeployment o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-cloud_NodeCluster NodeCluster o-ran-smo-teiv-cloud ["name"]
o-ran-smo-teiv-ran_Sector Sector o-ran-smo-teiv-ran ["azimuth", "geo-location", "sectorId"]
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
ANTENNAMODULE_INSTALLED_AT_SITE installed-at-site AntennaModule o-ran-smo-teiv-equipment 0 9223372036854775807 installed-antennaModule Site o-ran-smo-teiv-equipment 0 1 BI_DIRECTIONAL false A_SIDE o-ran-smo-teiv-equipment_AntennaModule o-ran-smo-teiv-equipment
ANTENNAMODULE_SERVES_ANTENNACAPABILITY serviced-antennaCapability AntennaModule o-ran-smo-teiv-equipment 0 9223372036854775807 serving-antennaModule AntennaCapability o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_ANTENNACAPABILITY o-ran-smo-teiv-rel-equipment-ran
ANTENNAMODULE_SERVES_NRCELLDU serviced-nrCellDu AntennaModule o-ran-smo-teiv-equipment 1 9223372036854775807 serving-antennaModule NRCellDU o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU o-ran-smo-teiv-rel-equipment-ran
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_consumer_data;
-ALTER SCHEMA ties_consumer_data OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_consumer_data;
+ALTER SCHEMA teiv_consumer_data OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-CREATE TABLE IF NOT EXISTS ties_consumer_data."module_reference" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."module_reference" (
"name" TEXT PRIMARY KEY,
"namespace" TEXT,
"revision" TEXT NOT NULL,
"status" VARCHAR(127) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."decorators" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."decorators" (
"name" TEXT PRIMARY KEY,
"dataType" VARCHAR(511) NOT NULL,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_consumer_data."classifiers" (
+CREATE TABLE IF NOT EXISTS teiv_consumer_data."classifiers" (
"name" TEXT PRIMARY KEY,
"moduleReferenceName" TEXT NOT NULL,
- FOREIGN KEY ("moduleReferenceName") REFERENCES ties_consumer_data."module_reference" ("name") ON DELETE CASCADE
+ FOREIGN KEY ("moduleReferenceName") REFERENCES teiv_consumer_data."module_reference" ("name") ON DELETE CASCADE
);
COMMIT;
BEGIN;
-CREATE SCHEMA IF NOT EXISTS ties_groups;
-ALTER SCHEMA ties_groups OWNER TO :pguser;
+CREATE SCHEMA IF NOT EXISTS teiv_groups;
+ALTER SCHEMA teiv_groups OWNER TO :pguser;
SET default_tablespace = '';
SET default_table_access_method = heap;
SET ROLE :pguser;
-- Function to create CONSTRAINT only if it does not exists
-CREATE OR REPLACE FUNCTION ties_groups.create_constraint_if_not_exists (
+CREATE OR REPLACE FUNCTION teiv_groups.create_constraint_if_not_exists (
t_name TEXT, c_name TEXT, constraint_sql TEXT
)
RETURNS void AS
$$
BEGIN
- IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'ties_groups' AND table_name = t_name AND constraint_name = c_name) THEN
+ IF NOT EXISTS (SELECT constraint_name FROM information_schema.table_constraints WHERE table_schema = 'teiv_groups' AND table_name = t_name AND constraint_name = c_name) THEN
EXECUTE constraint_sql;
END IF;
END;
$$ language 'plpgsql';
-CREATE TABLE IF NOT EXISTS ties_groups."groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."groups" (
"id" VARCHAR(150) PRIMARY KEY,
"name" VARCHAR(150) NOT NULL,
"type" VARCHAR(50) NOT NULL
);
-CREATE TABLE IF NOT EXISTS ties_groups."static_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."static_groups" (
"id" VARCHAR(150),
"topology_type" TEXT NOT NULL,
"provided_members_ids" TEXT[] NOT NULL,
PRIMARY KEY ("id", "topology_type"),
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-CREATE TABLE IF NOT EXISTS ties_groups."dynamic_groups" (
+CREATE TABLE IF NOT EXISTS teiv_groups."dynamic_groups" (
"id" VARCHAR(150) PRIMARY KEY,
"criteria" JSONB NOT NULL,
- FOREIGN KEY ("id") REFERENCES ties_groups."groups" ("id") ON DELETE CASCADE
+ FOREIGN KEY ("id") REFERENCES teiv_groups."groups" ("id") ON DELETE CASCADE
);
-SELECT ties_groups.create_constraint_if_not_exists(
+SELECT teiv_groups.create_constraint_if_not_exists(
'groups',
'CHECK_groups_type',
- 'ALTER TABLE ties_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
+ 'ALTER TABLE teiv_groups."groups" ADD CONSTRAINT "CHECK_groups_type" CHECK ("type" IN (''static'', ''dynamic''))'
);
COMMIT;
--- /dev/null
+--
+-- ============LICENSE_START=======================================================
+-- Modifications Copyright (C) 2025 OpenInfra Foundation Europe
+-- ================================================================================
+-- 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.
+--
+-- SPDX-License-Identifier: Apache-2.0
+-- ============LICENSE_END=========================================================
+--
+
+BEGIN;
+
+INSERT INTO teiv_data."responsible_adapter" (id, hashed_id) VALUES(:'adapterId', decode(:'adapterHashedId', 'hex')) ON CONFLICT DO NOTHING ;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_ODUFunction" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_ODUFunction" SET "REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION" IS NULL AND "REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" SET "REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" IS NULL AND "REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_Site" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_AntennaCapability" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "REL_metadata_ANTENNAMODULE_INSTALLED_AT_SITE"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_ANTENNAMODULE_INSTALLED_AT_SITE" IS NULL AND "REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "REL_metadata_SECTOR_GROUPS_ANTENNAMODULE"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_SECTOR_GROUPS_ANTENNAMODULE" IS NULL AND "REL_ID_SECTOR_GROUPS_ANTENNAMODULE" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellCU" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellCU" SET "REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU" IS NULL AND "REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-oam_ManagedElement" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU" IS NULL AND "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "REL_metadata_SECTOR_GROUPS_NRCELLDU"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_SECTOR_GROUPS_NRCELLDU" IS NULL AND "REL_ID_SECTOR_GROUPS_NRCELLDU" IS NOT NULL;
+
+UPDATE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" SET "REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" IS NULL AND "REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" IS NULL AND "REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_metadata_NRCELLDU_USES_NRSECTORCARRIER"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_NRCELLDU_USES_NRSECTORCARRIER" IS NULL AND "REL_ID_NRCELLDU_USES_NRSECTORCARRIER" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_metadata_NRSECTORCARRIER_USES_ANTENNACAPABILITY"='{"reliabilityIndicator":"OK"}' WHERE "REL_metadata_NRSECTORCARRIER_USES_ANTENNACAPABILITY" IS NULL AND "REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_Sector" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."1D71FC3BAE50E72552EAAC17B3B0C959B403E822" SET "metadata"='{"reliabilityIndicator":"OK"}' WHERE "metadata" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_ODUFunction" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_ODUFunction" SET "REL_RESP_id_MANAGEDELEMENT_MANAGES_ODUFUNCTION"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_MANAGEDELEMENT_MANAGES_ODUFUNCTION" IS NULL AND "REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" SET "REL_RESP_id_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" IS NULL AND "REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_Site" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_AntennaCapability" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "REL_RESP_id_ANTENNAMODULE_INSTALLED_AT_SITE"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_ANTENNAMODULE_INSTALLED_AT_SITE" IS NULL AND "REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "REL_RESP_id_SECTOR_GROUPS_ANTENNAMODULE"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_SECTOR_GROUPS_ANTENNAMODULE" IS NULL AND "REL_ID_SECTOR_GROUPS_ANTENNAMODULE" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellCU" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellCU" SET "REL_RESP_id_OCUCPFUNCTION_PROVIDES_NRCELLCU"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_OCUCPFUNCTION_PROVIDES_NRCELLCU" IS NULL AND "REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-oam_ManagedElement" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "REL_RESP_id_ODUFUNCTION_PROVIDES_NRCELLDU"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_ODUFUNCTION_PROVIDES_NRCELLDU" IS NULL AND "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "REL_RESP_id_SECTOR_GROUPS_NRCELLDU"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_SECTOR_GROUPS_NRCELLDU" IS NULL AND "REL_ID_SECTOR_GROUPS_NRCELLDU" IS NOT NULL;
+
+UPDATE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" SET "REL_RESP_id_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" IS NULL AND "REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_RESP_id_ODUFUNCTION_PROVIDES_NRSECTORCARRIER"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" IS NULL AND "REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_RESP_id_NRCELLDU_USES_NRSECTORCARRIER"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_NRCELLDU_USES_NRSECTORCARRIER" IS NULL AND "REL_ID_NRCELLDU_USES_NRSECTORCARRIER" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_RESP_id_NRSECTORCARRIER_USES_ANTENNACAPABILITY"= decode(:'adapterHashedId', 'hex') WHERE "REL_RESP_id_NRSECTORCARRIER_USES_ANTENNACAPABILITY" IS NULL AND "REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_Sector" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."1D71FC3BAE50E72552EAAC17B3B0C959B403E822" SET "RESP_id"= decode(:'adapterHashedId', 'hex') WHERE "RESP_id" IS NULL AND "id" IS NOT NULL;
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_ODUFunction" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_ODUFunction" SET "REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION" = COALESCE("REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION" IS NOT NULL AND NOT "REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" SET "REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" = COALESCE("REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" IS NOT NULL AND NOT "REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_Site" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_AntennaCapability" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "REL_metadata_ANTENNAMODULE_INSTALLED_AT_SITE" = COALESCE("REL_metadata_ANTENNAMODULE_INSTALLED_AT_SITE", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE" IS NOT NULL AND NOT "REL_metadata_ANTENNAMODULE_INSTALLED_AT_SITE" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-equipment_AntennaModule" SET "REL_metadata_SECTOR_GROUPS_ANTENNAMODULE" = COALESCE("REL_metadata_SECTOR_GROUPS_ANTENNAMODULE", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_SECTOR_GROUPS_ANTENNAMODULE" IS NOT NULL AND NOT "REL_metadata_SECTOR_GROUPS_ANTENNAMODULE" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellCU" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellCU" SET "REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU" = COALESCE("REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU" IS NOT NULL AND NOT "REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-oam_ManagedElement" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU" = COALESCE("REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU" IS NOT NULL AND NOT "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRCellDU" SET "REL_metadata_SECTOR_GROUPS_NRCELLDU" = COALESCE("REL_metadata_SECTOR_GROUPS_NRCELLDU", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_SECTOR_GROUPS_NRCELLDU" IS NOT NULL AND NOT "REL_metadata_SECTOR_GROUPS_NRCELLDU" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" SET "REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" = COALESCE("REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" IS NOT NULL AND NOT "REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" = COALESCE("REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" IS NOT NULL AND NOT "REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_metadata_NRCELLDU_USES_NRSECTORCARRIER" = COALESCE("REL_metadata_NRCELLDU_USES_NRSECTORCARRIER", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_NRCELLDU_USES_NRSECTORCARRIER" IS NOT NULL AND NOT "REL_metadata_NRCELLDU_USES_NRSECTORCARRIER" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" SET "REL_metadata_NRSECTORCARRIER_USES_ANTENNACAPABILITY" = COALESCE("REL_metadata_NRSECTORCARRIER_USES_ANTENNACAPABILITY", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY" IS NOT NULL AND NOT "REL_metadata_NRSECTORCARRIER_USES_ANTENNACAPABILITY" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."o-ran-smo-teiv-ran_Sector" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+UPDATE teiv_data."1D71FC3BAE50E72552EAAC17B3B0C959B403E822" SET "metadata" = COALESCE("metadata", '{}') || ('{"firstDiscovered": "' || :'upgradeTime' || '"}')::jsonb || ('{"lastModified": "' || :'upgradeTime' || '"}')::jsonb WHERE "id" IS NOT NULL AND NOT "metadata" ?& array['firstDiscovered','lastModified'];
+
+COMMIT;
\ No newline at end of file
+<!--
+ ============LICENSE_START=======================================================
+ Copyright (C) 2024 Ericsson
+ Modifications Copyright (C) 2025 OpenInfra Foundation Europe
+ ================================================================================
+ 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.
+
+ SPDX-License-Identifier: Apache-2.0
+ ============LICENSE_END=========================================================
+-->
+
# PGSQL schema generator
During the `generate-resources` phase of the Maven build pgsql-schema-generator will run (see `exec-maven-plugin` in the
`teiv` POM), v1 of the SQL files in this directory are **automatically overwritten** if there are changes to the YANG
BEGIN;
-COPY ties_consumer_data."module_reference"("name", "namespace", "revision", "content", "ownerAppId", "status") FROM stdin;
+COPY teiv_consumer_data."module_reference"("name", "namespace", "revision", "content", "ownerAppId", "status") FROM stdin;
test-app-module urn:o-ran:test-app-module 2024-05-24 bW9kdWxlIHRlc3QtYXBwLW1vZHVsZSB7CgogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOnRlc3QtYXBwLW1vZHVsZSI7CiAgICBwcmVmaXggbW9kdWxlOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCB0ZXN0OyB9CiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7cHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIHJldmlzaW9uICIyMDI0LTA2LTEwIiB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICBJbml0aWFsIHJldmlzaW9uLjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgYXVnbWVudCAvdGVzdDpkZWNvcmF0b3JzIHsKICAgICAgICBsZWFmIGxvY2F0aW9uIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgfQogICAgICAgIGxlYWYgdmVuZG9yIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgfQogICAgfQoKICAgIGlkZW50aXR5IE91dGRvb3IgewogICAgICAgIGJhc2UgdGVzdDpjbGFzc2lmaWVyczsKICAgIH0KCiAgICBpZGVudGl0eSBSdXJhbCB7CiAgICAgICAgYmFzZSB0ZXN0OmNsYXNzaWZpZXJzOwogICAgfQoKICAgIGlkZW50aXR5IFdlZWtlbmQgewogICAgICAgIGJhc2UgdGVzdDpjbGFzc2lmaWVyczsKICAgIH0KCn0K APP IN_USAGE
test-app-for-deletion-module urn:o-ran:test-app-for-deletion-module 2024-05-24 bW9kdWxlIHRlc3QtYXBwLW1vZHVsZSB7CgogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOnRlc3QtYXBwLW1vZHVsZSI7CiAgICBwcmVmaXggbW9kdWxlOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCB0ZXN0OyB9CiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7cHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIHJldmlzaW9uICIyMDI0LTA2LTEwIiB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICBJbml0aWFsIHJldmlzaW9uLjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgYXVnbWVudCAvdGVzdDpkZWNvcmF0b3JzIHsKICAgICAgICBsZWFmIGxvY2F0aW9uIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgfQogICAgICAgIGxlYWYgdmVuZG9yIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgfQogICAgfQoKICAgIGlkZW50aXR5IE91dGRvb3IgewogICAgICAgIGJhc2UgdGVzdDpjbGFzc2lmaWVyczsKICAgIH0KCiAgICBpZGVudGl0eSBSdXJhbCB7CiAgICAgICAgYmFzZSB0ZXN0OmNsYXNzaWZpZXJzOwogICAgfQoKICAgIGlkZW50aXR5IFdlZWtlbmQgewogICAgICAgIGJhc2UgdGVzdDpjbGFzc2lmaWVyczsKICAgIH0KCn0K APP IN_USAGE
test-app-in-deleting-status urn:o-ran:test-app-in-deleting-status 2024-10-14 bW9kdWxlIHRlc3QtYXBwLW1vZHVsZSB7CgogICAgeWFuZy12ZXJzaW9uIDEuMTsKICAgIG5hbWVzcGFjZSAidXJuOnRlc3QtYXBwLW1vZHVsZSI7CiAgICBwcmVmaXggbW9kdWxlOwoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCB0ZXN0OyB9CiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctZXh0ZW5zaW9ucyB7cHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIHJldmlzaW9uICIyMDI0LTA2LTEwIiB7CiAgICAgICAgZGVzY3JpcHRpb24KICAgICAgICBJbml0aWFsIHJldmlzaW9uLjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC4zLjA7CiAgICB9CgogICAgYXVnbWVudCAvdGVzdDpkZWNvcmF0b3JzIHsKICAgICAgICBsZWFmIGxvY2F0aW9uIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgfQogICAgICAgIGxlYWYgdmVuZG9yIHsKICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgfQogICAgfQoKICAgIGlkZW50aXR5IE91dGRvb3IgewogICAgICAgIGJhc2UgdGVzdDpjbGFzc2lmaWVyczsKICAgIH0KCiAgICBpZGVudGl0eSBSdXJhbCB7CiAgICAgICAgYmFzZSB0ZXN0OmNsYXNzaWZpZXJzOwogICAgfQoKICAgIGlkZW50aXR5IFdlZWtlbmQgewogICAgICAgIGJhc2UgdGVzdDpjbGFzc2lmaWVyczsKICAgIH0KCn0K APP DELETING
\.
-COPY ties_consumer_data."decorators" ("name", "dataType", "moduleReferenceName" ) FROM stdin;
+COPY teiv_consumer_data."decorators" ("name", "dataType", "moduleReferenceName" ) FROM stdin;
test-app-module:textdata TEXT test-app-module
test-app-module:intdata INT test-app-module
\.
-COPY ties_consumer_data."classifiers" ("name", "moduleReferenceName" ) FROM stdin;
+COPY teiv_consumer_data."classifiers" ("name", "moduleReferenceName" ) FROM stdin;
test-app-module:Indoor test-app-module
test-app-module:Outdoor test-app-module
test-app-module:Rural test-app-module
BEGIN;
-COPY ties_data."responsible_adapter" ("id", "hashed_id") FROM stdin;
+COPY teiv_data."responsible_adapter" ("id", "hashed_id") FROM stdin;
orannamespace-ran-topology-adapter \\xff10444ea1540885f3e34b3670be8bbfd6a780c6
namespace-ran-topology-adapter \\x5f270b1ee231080eb5ffd2e04077cdcfe60e018a
test-namespace-test-adapter-id \\x41131feea09d9620d911657a710803ea92414059
ran-topology-adapter \\x5b35d8c6c5f8e8acb48912b8f328ebc9b6924e03
\.
-COPY ties_data."o-ran-smo-teiv-oam_ManagedElement" ("id", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} {"reliabilityIndicator":"RESTORED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"] [] {} {"reliabilityIndicator":"OK"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"] [] {} {"reliabilityIndicator":"ADVISED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"] [] {} {"reliabilityIndicator":"RESTORED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16", "urn:cmHandle:453431CC154F900606657D584700827A"] [] {} {"reliabilityIndicator":"ADVISED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} {"reliabilityIndicator":"ADVISED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28", "urn:cmHandle:30C68865AF2F353F202056CB1921D418"] [] {} {"reliabilityIndicator":"ADVISED"}
+COPY teiv_data."o-ran-smo-teiv-oam_ManagedElement" ("id", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"] [] {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16", "urn:cmHandle:453431CC154F900606657D584700827A"] [] {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28", "urn:cmHandle:30C68865AF2F353F202056CB1921D418"] [] {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."o-ran-smo-teiv-ran_Sector" ("id", "geo-location", "sectorId", "azimuth", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
-Sector=1 POINT(59.4019881 17.9419888) 1 1.1 ["source1", "source2"] [] {} {"reliabilityIndicator":"RESTORED"}
-Sector=2 POINT(60.4019881 18.9419888) 2 2.2 ["source1", "source2"] [] {} {"reliabilityIndicator":"RESTORED"}
-Sector=3 POINT(61.4019881 19.9419888) 3 3.3 ["source1", "source2"] [] {} {"reliabilityIndicator":"ADVISED"}
+COPY teiv_data."o-ran-smo-teiv-ran_Sector" ("id", "geo-location", "sectorId", "azimuth", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
+urn:Sector=1 POINT(59.4019881 17.9419888) 1 1.1 ["source1", "source2"] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:Sector=2 POINT(60.4019881 18.9419888) 2 2.2 ["source1", "source2"] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:Sector=3 POINT(61.4019881 19.9419888) 3 3.3 ["source1", "source2"] [] {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."o-ran-smo-teiv-ran_AntennaCapability" ("id", "eUtranFqBands", "geranFqBands", "nRFqBands", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 ["123","456","789"] ["123","4564","789"] ["123","456","789"] ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} {"reliabilityIndicator":"INVALID"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1 ["123","456","789"] ["123","4564","789"] ["123","456","789"] ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} {"reliabilityIndicator":"RESTORED"}
+COPY teiv_data."o-ran-smo-teiv-ran_AntennaCapability" ("id", "eUtranFqBands", "geranFqBands", "nRFqBands", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 ["123","456","789"] ["123","4564","789"] ["123","456","789"] ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} {"reliabilityIndicator":"INVALID","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1 ["123","456","789"] ["123","4564","789"] ["123","456","789"] ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."o-ran-smo-teiv-equipment_AntennaModule" ("id", "antennaBeamWidth", "antennaModelNumber", "electricalAntennaTilt", "geo-location", "mechanicalAntennaBearing", "mechanicalAntennaTilt", "positionWithinSector", "totalTilt", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_installed-at-site", "REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_FK_grouped-by-sector", "REL_ID_SECTOR_GROUPS_ANTENNAMODULE", "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE", "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE", "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE", "REL_metadata_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_metadata_SECTOR_GROUPS_ANTENNAMODULE", "metadata" ) FROM stdin;
-urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A \N 5 11 POINT(39.4019881 67.9419888) 6 0 7 -900 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} \N \N [] [] {} Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=44F4F4FC906E9A7525065E4565246F7469CBD11FC7752C61EA6D74776845900AFF472DCAACA1F66443490B6CE0DD9AC9A5E1467022118599F6B4C6EC63400512 [] [] {} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"OK"}
-urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7 \N 5 11 POINT(49.4019881 68.9419888) 6 0 7 -900 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} \N \N [] [] {} Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=CEEC51BE136D671D2101C09FEDD8A1D95E1E177A4818E9FC0D6E63E610BC8FE26FC9C729A1E58AD43D70472F4CD54403E25CB1E5D2BBA66966625C21435C4A78 [] [] {} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"ADVISED"} {"reliabilityIndicator":"RESTORED"}
-urn:o-ran:smo:teiv:sha512:AntennaModule=72AC3D5E2A5F1C47BD09258A9F7B48E0123E9AD752AC54F7E8D8F9D3A6BC487A89A762A5D12CB9D148BB9E5D53A4F3F981345ACDF7B4CB55D67BC12A13FD5B7A \N 5 11 POINT Z (47.497913 19.040236 111.1) 4 2 5 -850 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} \N \N [] [] {} Sector=3 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=67C8D3C4E7B9A2F4C0A7D1B4E3F8D7C9E6F8C3A9D4F2E5B1C7D2F5C8B1D2F6C7A5E7B3C4A1D2E3F7B5A9C7D2F5B8C1D2F7C8A9D4E3F8D7A1E3B5C7 [] [] {} {"reliabilityIndicator":"OK"} {} {"reliabilityIndicator":"ADVISED"}
-urn:o-ran:smo:teiv:sha512:AntennaModule=84A3E5D7C916F4B2390DC45F178BE6A9235FD80CB41972E3456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123 \N 5 11 POINT(-49.4019881 -68.9419888) 6 0 5 -900 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} \N \N [] [] {} Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=DAFC42AF147B582C3212D1AEFEEB92EA6F2F288B5929FAED1E7F74F721CD9FF37FDAD83AB2F69BE54E81583F5DE65514F36DC2F6E3CCB77A77736D32546D5B89 [] [] {} {"reliabilityIndicator":"OK"} {} {"reliabilityIndicator":"ADVISED"}
-urn:o-ran:smo:teiv:sha512:AntennaModule=B7F52C914E8D36A0185BC9D47EF230A95C681D7B4F923E0A5D8C741F6B9203E85A4D967B312C8F405E9B7831A6D2C5904F8B3E167A9D204C5B8371F9E6A02D45 \N 5 11 POINT Z (-47.497913 -19.040236 -111.1) 4 2 5 -850 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} \N \N [] [] {} Sector=3 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=BFFB53CF258C693D4323E2BFFFFC93FB7F3F399C6939FBFE2F8F85F832DE9FF48FEAE94BC3F79CF65F92694F6EF76625F47ED3F7F4DDC88B88847E43657E6C9A [] [] {} {"reliabilityIndicator":"OK"} {} {"reliabilityIndicator":"ADVISED"}
+COPY teiv_data."o-ran-smo-teiv-equipment_AntennaModule" ("id", "antennaBeamWidth", "antennaModelNumber", "electricalAntennaTilt", "geo-location", "mechanicalAntennaBearing", "mechanicalAntennaTilt", "positionWithinSector", "totalTilt", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_installed-at-site", "REL_ID_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_CD_sourceIds_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_CD_classifiers_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_CD_decorators_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_FK_grouped-by-sector", "REL_ID_SECTOR_GROUPS_ANTENNAMODULE", "REL_CD_sourceIds_SECTOR_GROUPS_ANTENNAMODULE", "REL_CD_classifiers_SECTOR_GROUPS_ANTENNAMODULE", "REL_CD_decorators_SECTOR_GROUPS_ANTENNAMODULE", "REL_metadata_ANTENNAMODULE_INSTALLED_AT_SITE", "REL_metadata_SECTOR_GROUPS_ANTENNAMODULE", "metadata" ) FROM stdin;
+urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A \N 5 11 POINT(39.4019881 67.9419888) 6 0 7 -900 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} \N \N [] [] {} urn:Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=44F4F4FC906E9A7525065E4565246F7469CBD11FC7752C61EA6D74776845900AFF472DCAACA1F66443490B6CE0DD9AC9A5E1467022118599F6B4C6EC63400512 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7 \N 5 11 POINT(49.4019881 68.9419888) 6 0 7 -900 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} \N \N [] [] {} urn:Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=CEEC51BE136D671D2101C09FEDD8A1D95E1E177A4818E9FC0D6E63E610BC8FE26FC9C729A1E58AD43D70472F4CD54403E25CB1E5D2BBA66966625C21435C4A78 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:o-ran:smo:teiv:sha512:AntennaModule=72AC3D5E2A5F1C47BD09258A9F7B48E0123E9AD752AC54F7E8D8F9D3A6BC487A89A762A5D12CB9D148BB9E5D53A4F3F981345ACDF7B4CB55D67BC12A13FD5B7A \N 5 11 POINT Z (47.497913 19.040236 111.1) 4 2 5 -850 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} \N \N [] [] {} urn:Sector=3 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=67C8D3C4E7B9A2F4C0A7D1B4E3F8D7C9E6F8C3A9D4F2E5B1C7D2F5C8B1D2F6C7A5E7B3C4A1D2E3F7B5A9C7D2F5B8C1D2F7C8A9D4E3F8D7A1E3B5C7 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:o-ran:smo:teiv:sha512:AntennaModule=84A3E5D7C916F4B2390DC45F178BE6A9235FD80CB41972E3456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123 \N 5 11 POINT(-49.4019881 -68.9419888) 6 0 5 -900 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} \N \N [] [] {} urn:Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=DAFC42AF147B582C3212D1AEFEEB92EA6F2F288B5929FAED1E7F74F721CD9FF37FDAD83AB2F69BE54E81583F5DE65514F36DC2F6E3CCB77A77736D32546D5B89 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:o-ran:smo:teiv:sha512:AntennaModule=B7F52C914E8D36A0185BC9D47EF230A95C681D7B4F923E0A5D8C741F6B9203E85A4D967B312C8F405E9B7831A6D2C5904F8B3E167A9D204C5B8371F9E6A02D45 \N 5 11 POINT Z (-47.497913 -19.040236 -111.1) 4 2 5 -850 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} \N \N [] [] {} urn:Sector=3 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_ANTENNAMODULE=BFFB53CF258C693D4323E2BFFFFC93FB7F3F399C6939FBFE2F8F85F832DE9FF48FEAE94BC3F79CF65F92694F6EF76625F47ED3F7F4DDC88B88847E43657E6C9A [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id", "gNBCUName", "gNBId", "gNBIdLength", "pLMNId", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_managed-by-managedElement", "REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION", "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION", "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION", "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION") FROM stdin;
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,OCUCPFunction=9 ocucp-9 9 1 {"mcc":"123","mnc":"82"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,OCUCPFunction=9", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=0F7F3F3CEC7B3CDA05A7B7D2874D1EF39EBDAA18AD7D6F43CF219C087510114C59C6B78EC21F8E9C6F19B5F1999FBBA2DF8C3DDF76F416C874508303F0DA4AB4 [] [] {}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUCPFunction=10 ocucp-10 10 2 {"mcc":"456","mnc":"83"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUCPFunction=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=7053BF6EEB9769084BB91850C356BF20E3C9D6AD8F0D7212911DC827AD1B4D42AEDA0C43FD5715C94E14334EF49FA09405A976451B777B442BBF397DE89528A4 [] [] {}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUCPFunction=13 ocucp-13 13 2 {"mcc":"789","mnc":"84"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUCPFunction=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=C88ACE9CD7BA7E56FD059C027DA8E4D0ED0A3E13F9E358D5F4A66EE004FC3767A9D20B0512661B6D2F5F82F106725C04C5DC8826D990DECB4D5AD571BE402BE0 [] [] {}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,OCUCPFunction=14 ocucp-14 14 2 {"mcc":"123","mnc":"85"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,OCUCPFunction=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=F23FADEDC45AE38DBC567C57FC4DD5D61D239B0BEF3C93DD54DF85545E6D0C8B9B26A1D3911B56A3F8C2EB148A4F276D1EBAF7EE2D2E35C8B37F008F572DF7B6 [] [] {}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUCPFunction=16 ocucp-16 16 2 {"mcc":"456","mnc":"86"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUCPFunction=16", "urn:cmHandle:453431CC154F900606657D584700827A"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=5ECE0941DDBC9B4DEE8492333129A0AB80720CB6005A80B54C4D9247029A41FA42DB6D2C709F71D7ED5D82F5EA90CE2C0B553AC1BD860D8A6DFA218E2E790F1C [] [] {}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUCPFunction=19 ocucp-19 19 2 {"mcc":"789","mnc":"87"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUCPFunction=19", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=63EA5A9F77FE5DED61CF6DC30233AB17A57D6E04283365D7C1976FF646961FAAF1889BBA618029EA10DA8761F8DAA643B707B602D4E61898A2B5259AA0118887 [] [] {}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,OCUCPFunction=28 ocucp-28 28 2 {"mcc":"123","mnc":"88"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,OCUCPFunction=28", "urn:cmHandle:30C68865AF2F353F202056CB1921D418"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=CD564BF182FD6DE77816BA69F25B664374AD02D642DF05FF8991E1009E7E09C50E92F6858A1E1B025CFDA933AB769B8C68FBAE0DBBAA140AE321DC55AED6C2A3 [] [] {}
+COPY teiv_data."o-ran-smo-teiv-ran_OCUCPFunction" ("id", "gNBCUName", "gNBId", "gNBIdLength", "pLMNId", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_managed-by-managedElement", "REL_ID_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION", "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION", "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION", "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION", "REL_metadata_MANAGEDELEMENT_MANAGES_OCUCPFUNCTION") FROM stdin;
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,OCUCPFunction=9 ocucp-9 9 1 {"mcc":"01","mnc":"234"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,OCUCPFunction=9", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=0F7F3F3CEC7B3CDA05A7B7D2874D1EF39EBDAA18AD7D6F43CF219C087510114C59C6B78EC21F8E9C6F19B5F1999FBBA2DF8C3DDF76F416C874508303F0DA4AB4 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUCPFunction=10 ocucp-10 10 2 {"mcc":"01","mnc":"234"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUCPFunction=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=7053BF6EEB9769084BB91850C356BF20E3C9D6AD8F0D7212911DC827AD1B4D42AEDA0C43FD5715C94E14334EF49FA09405A976451B777B442BBF397DE89528A4 [] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUCPFunction=13 ocucp-13 13 2 {"mcc":"01","mnc":"234"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUCPFunction=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=C88ACE9CD7BA7E56FD059C027DA8E4D0ED0A3E13F9E358D5F4A66EE004FC3767A9D20B0512661B6D2F5F82F106725C04C5DC8826D990DECB4D5AD571BE402BE0 [] [] {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,OCUCPFunction=14 ocucp-14 14 2 {"mcc":"01","mnc":"234"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,OCUCPFunction=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=F23FADEDC45AE38DBC567C57FC4DD5D61D239B0BEF3C93DD54DF85545E6D0C8B9B26A1D3911B56A3F8C2EB148A4F276D1EBAF7EE2D2E35C8B37F008F572DF7B6 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUCPFunction=16 ocucp-16 16 2 {"mcc":"01","mnc":"234"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUCPFunction=16", "urn:cmHandle:453431CC154F900606657D584700827A"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=5ECE0941DDBC9B4DEE8492333129A0AB80720CB6005A80B54C4D9247029A41FA42DB6D2C709F71D7ED5D82F5EA90CE2C0B553AC1BD860D8A6DFA218E2E790F1C [] [] {} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUCPFunction=19 ocucp-19 19 2 {"mcc":"01","mnc":"234"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUCPFunction=19", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=63EA5A9F77FE5DED61CF6DC30233AB17A57D6E04283365D7C1976FF646961FAAF1889BBA618029EA10DA8761F8DAA643B707B602D4E61898A2B5259AA0118887 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,OCUCPFunction=28 ocucp-28 28 2 {"mcc":"01","mnc":"234"} ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,OCUCPFunction=28", "urn:cmHandle:30C68865AF2F353F202056CB1921D418"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUCPFUNCTION=CD564BF182FD6DE77816BA69F25B664374AD02D642DF05FF8991E1009E7E09C50E92F6858A1E1B025CFDA933AB769B8C68FBAE0DBBAA140AE321DC55AED6C2A3 [] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."o-ran-smo-teiv-ran_OCUUPFunction" ("id", "gNBId", "gNBIdLength", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_managed-by-managedElement", "REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "metadata") FROM stdin;
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,OCUUPFunction=9 9 1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,OCUUPFunction=9", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=5255F37093F8EB3763CE5F017DFC1E162B44FC9DF6E13744C04DC1832C5E754AB7BE440DBE1187EE8EEE42FD04E652BB8148655C6F977B1FFDDA54FE87C6411A [] ["ocucp-ocuup-model:Weekend"] {"ocucp-ocuup-model:metadata" : "value1"} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"RESTORED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUUPFunction=10 10 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUUPFunction=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=80D3B4C44B4F0BEFC7660AF0A4E91F89C8108DA814B09728F848C0C5C10E2D956A73FBC85EB2AE0A7EA4D95308A606856603B53C8C2669A50BCB58B9FC87D7F2 [] [] {} {} {"reliabilityIndicator":"ADVISED","foo":"bar"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUUPFunction=13 13 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUUPFunction=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=29DE1D3B8DA9C9FA1201C36F74FEBE14493F7C674E47E1FFCB6AADEED8EABB0460770EC21E7AC8EEBBB057ABC0E31269AB5C92D941E9BA53877164918C6EFB30 [] [] {} {"reliabilityIndicator":"RESTORED"} {"reliabilityIndicator":"RESTORED","foo":"bar"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,OCUUPFunction=14 14 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,OCUUPFunction=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=4C571BDD5DF9B297C1B249D0242EB9DDC77052BB0A33E62DB851809A075259EE3A0C354FA3978276BD5EE0BBB8CFDBF19F7C3C7017F828B9A2EBAD020E7FDF98 [] [] {} {"reliabilityIndicator":"RESTORED","foo":"bar"} {"reliabilityIndicator":"ADVISED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUUPFunction=16 16 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUUPFunction=16", "urn:cmHandle:453431CC154F900606657D584700827A"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=DD5E12CB8D14C89E1C199BDABBCC71908F76AB04FE8FD7F7334A9A403B5BE0D8BB5DA69B4258C7AF4834BF2D3E00B6D5C263AD38A83A22E7EC673ACE1CAF0CF2 [] [] {} {"reliabilityIndicator":"RESTORED","foo":"bar"} {"reliabilityIndicator":"RESTORED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUUPFunction=19 19 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUUPFunction=19", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=2AF48E294918A4EE0E3E7C783A70841E1DEEF72CDD43FE3CD1DF6531CCA06203B574BE02553254220A637632AECB719951DAE2A3D0487D24EA1A090843563603 [] [] {} {"reliabilityIndicator":"ADVISED","foo":"bar"} {"foo":"bar"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,OCUUPFunction=28 28 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,OCUUPFunction=28", "urn:cmHandle:30C68865AF2F353F202056CB1921D418"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=140E8C8C56B1E717CD992D3FF0C61C04C1633E1FEF17ABB92A9A17C53E18CFAF5D72C4C71415E0026C99671657FB3EC1BD394174DD306261ADA8A6CDF4D42748 [] [] {} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"ADVISED"}
+COPY teiv_data."o-ran-smo-teiv-ran_OCUUPFunction" ("id", "gNBId", "gNBIdLength", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_managed-by-managedElement", "REL_ID_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "REL_CD_decorators_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "REL_metadata_MANAGEDELEMENT_MANAGES_OCUUPFUNCTION", "metadata") FROM stdin;
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,OCUUPFunction=9 9 1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,OCUUPFunction=9", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=5255F37093F8EB3763CE5F017DFC1E162B44FC9DF6E13744C04DC1832C5E754AB7BE440DBE1187EE8EEE42FD04E652BB8148655C6F977B1FFDDA54FE87C6411A [] ["ocucp-ocuup-model:Weekend"] {"ocucp-ocuup-model:metadata" : "value1"} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUUPFunction=10 10 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,OCUUPFunction=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=80D3B4C44B4F0BEFC7660AF0A4E91F89C8108DA814B09728F848C0C5C10E2D956A73FBC85EB2AE0A7EA4D95308A606856603B53C8C2669A50BCB58B9FC87D7F2 [] [] {} {} {"reliabilityIndicator":"ADVISED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUUPFunction=13 13 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,OCUUPFunction=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=29DE1D3B8DA9C9FA1201C36F74FEBE14493F7C674E47E1FFCB6AADEED8EABB0460770EC21E7AC8EEBBB057ABC0E31269AB5C92D941E9BA53877164918C6EFB30 [] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"RESTORED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,OCUUPFunction=14 14 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,OCUUPFunction=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=4C571BDD5DF9B297C1B249D0242EB9DDC77052BB0A33E62DB851809A075259EE3A0C354FA3978276BD5EE0BBB8CFDBF19F7C3C7017F828B9A2EBAD020E7FDF98 [] [] {} {"reliabilityIndicator":"RESTORED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUUPFunction=16 16 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,OCUUPFunction=16", "urn:cmHandle:453431CC154F900606657D584700827A"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=DD5E12CB8D14C89E1C199BDABBCC71908F76AB04FE8FD7F7334A9A403B5BE0D8BB5DA69B4258C7AF4834BF2D3E00B6D5C263AD38A83A22E7EC673ACE1CAF0CF2 [] [] {} {"reliabilityIndicator":"RESTORED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUUPFunction=19 19 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,OCUUPFunction=19", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=2AF48E294918A4EE0E3E7C783A70841E1DEEF72CDD43FE3CD1DF6531CCA06203B574BE02553254220A637632AECB719951DAE2A3D0487D24EA1A090843563603 [] [] {} {"reliabilityIndicator":"ADVISED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,OCUUPFunction=28 28 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,OCUUPFunction=28", "urn:cmHandle:30C68865AF2F353F202056CB1921D418"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_OCUUPFUNCTION=140E8C8C56B1E717CD992D3FF0C61C04C1633E1FEF17ABB92A9A17C53E18CFAF5D72C4C71415E0026C99671657FB3EC1BD394174DD306261ADA8A6CDF4D42748 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."o-ran-smo-teiv-ran_ODUFunction" ("id", "dUpLMNId", "gNBDUId", "gNBId", "gNBIdLength", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_managed-by-managedElement", "REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "metadata", "REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION") FROM stdin;
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 {"mcc":"123","mnc":"82"} \N 9 1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["test-app-module:Indoor","test-app-module:Weekend"] {"test-app-module:textdata":"ORAN"} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=9243B48F7D6A6CF471226915C74CF5FE4BDA6FA3CF7D897473007B46DF7FC50230BD6B8B4256116A6AFBF4D822CF9379EB56DE9490C1C0B54238263F2574B426 [] ["test-app-module:Indoor","test-app-module:Weekend"] {"test-app-module:textdata":"ORAN"} {"reliabilityIndicator":"OK","newKeyType":"newValue"} {"reliabilityIndicator":"ADVISED","newKeyType":"newValue"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10 {"mcc":"456","mnc":"83"} \N 10 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"] [] {"test-app-module:textdata":"Budapest","test-app-module:intdata":123} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=661A89AD3C2702233CD9E96E97E738C05C35EC5FDF32DC78D149B773726350067315B72448D004C938BCD0263F0C4BCCC8A5F9CDD145B9B740983D1523664328 [] ["test-app-module:Rural","test-app-module:Weekend"] {"test-app-module:textdata":"Budapest","test-app-module:intdata":123} {"reliabilityIndicator":"RESTORED"} {"reliabilityIndicator":"ADVISED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13 {"mcc":"789","mnc":"84"} \N 13 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"] ["test-app-module:Indoor"] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":456} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=DD9259A1B57FF2BB9DEC77C29DBFA4A5C49960D80622F603809ACA47E786DDD5C7ABD267D554A7C796477A9B2E02E072A8E682E4ED38F331BFB6DC3827CE4DB7 [] [] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":456} {"reliabilityIndicator":"RESTORED"} {"reliabilityIndicator":"ADVISED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,ODUFunction=14 {"mcc":"123","mnc":"85"} \N 14 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,ODUFunction=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"] ["test-app-module:Rural","test-app-module:Weekend"] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":123} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=6F7BFBD3DA2A9A592084C75242210A33C9DCF10CFCD53B761A6ACCD385132921679EC3C16394A4DEEE5883712C9719511388230151BA84FBF209DFCFB639E2EA [] [] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":123} {"reliabilityIndicator":"ADVISED"} {"reliabilityIndicator":"ADVISED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16 {"mcc":"456","mnc":"86"} 16 16 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16", "urn:cmHandle:453431CC154F900606657D584700827A"] ["test-app-module:Indoor","test-app-module:Rural","test-app-module:Weekend"] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":123} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=D67357F682531C7B068486313B0FDAC3E719A166229520196FB9CE917E0236754226A5BCBF7BB7240E516D7ED3FEA852855EC3F121DD4BAFEC5646F2A37F57EE [] ["test-app-module:Indoor","test-app-module:Rural","test-app-module:Weekend"] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":123} {"reliabilityIndicator":"RESTORED"} {}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19 {"mcc":"789","mnc":"87"} \N 19 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=6BD25E5C8FB7842F69010736253CC47F43535D7238E9E9A03E8092E8C019C83270DE47C96EF1049C40B83A130F9F129AE93B9C8538B6B004AE89BD0A098E48DD [] [] {} {} {"reliabilityIndicator":"OK","foo":"bar"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,ODUFunction=28 {"mcc":"123","mnc":"88"} \N 28 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,ODUFunction=28", "urn:cmHandle:30C68865AF2F353F202056CB1921D418"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=ADD4A82DFBAF0409FA9D3C929A09314088627B447C733429D4EE7AAE2FFAEE4894F90826B6814B63431EC07140783C7861E463C5AF8330E29469D704675EAB43 [] [] {} {} {"reliabilityIndicator":"RESTORED"}
+COPY teiv_data."o-ran-smo-teiv-ran_ODUFunction" ("id", "dUpLMNId", "gNBDUId", "gNBId", "gNBIdLength", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_managed-by-managedElement", "REL_ID_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "REL_CD_sourceIds_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "REL_CD_classifiers_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "REL_CD_decorators_MANAGEDELEMENT_MANAGES_ODUFUNCTION", "metadata", "REL_metadata_MANAGEDELEMENT_MANAGES_ODUFUNCTION") FROM stdin;
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 {"mcc":"123","mnc":"82"} \N 9 1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["test-app-module:Indoor","test-app-module:Weekend"] {"test-app-module:textdata":"ORAN"} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=9243B48F7D6A6CF471226915C74CF5FE4BDA6FA3CF7D897473007B46DF7FC50230BD6B8B4256116A6AFBF4D822CF9379EB56DE9490C1C0B54238263F2574B426 [] ["test-app-module:Indoor","test-app-module:Weekend"] {"test-app-module:textdata":"ORAN"} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-09T10:40:36.461565Z","lastModified":"2025-01-09T10:40:36.461565Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-09T10:40:36.461565Z","lastModified":"2025-01-09T10:40:36.461565Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10 {"mcc":"456","mnc":"83"} \N 10 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10", "urn:cmHandle:72FDA73D085F138FECC974CB91F1450E"] [] {"test-app-module:textdata":"Budapest","test-app-module:intdata":123} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=661A89AD3C2702233CD9E96E97E738C05C35EC5FDF32DC78D149B773726350067315B72448D004C938BCD0263F0C4BCCC8A5F9CDD145B9B740983D1523664328 [] ["test-app-module:Rural","test-app-module:Weekend"] {"test-app-module:textdata":"Budapest","test-app-module:intdata":123} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-09T11:40:36.461565Z","lastModified":"2025-01-09T11:40:36.461565Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-09T11:40:36.461565Z","lastModified":"2025-01-09T11:40:36.461565Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13 {"mcc":"789","mnc":"84"} \N 13 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13,ODUFunction=13", "urn:cmHandle:E5196035D0B49A65B00EAA392B4EE155"] ["test-app-module:Indoor"] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":456} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=DD9259A1B57FF2BB9DEC77C29DBFA4A5C49960D80622F603809ACA47E786DDD5C7ABD267D554A7C796477A9B2E02E072A8E682E4ED38F331BFB6DC3827CE4DB7 [] [] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":456} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-11T23:40:36.461565Z","lastModified":"2025-01-11T23:40:36.461565Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-11T23:40:36.461565Z","lastModified":"2025-01-11T23:40:36.461565Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,ODUFunction=14 {"mcc":"123","mnc":"85"} \N 14 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14,ODUFunction=14", "urn:cmHandle:D67C0BD04FA613BBFD176B24B68FD6A4"] ["test-app-module:Rural","test-app-module:Weekend"] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":123} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=6F7BFBD3DA2A9A592084C75242210A33C9DCF10CFCD53B761A6ACCD385132921679EC3C16394A4DEEE5883712C9719511388230151BA84FBF209DFCFB639E2EA [] [] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":123} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-11T09:40:36.461565Z","lastModified":"2025-01-11T09:40:36.461565Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-11T09:40:36.461565Z","lastModified":"2025-01-11T09:40:36.461565Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16 {"mcc":"456","mnc":"86"} 16 16 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16,ODUFunction=16", "urn:cmHandle:453431CC154F900606657D584700827A"] ["test-app-module:Indoor","test-app-module:Rural","test-app-module:Weekend"] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":123} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=16 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=D67357F682531C7B068486313B0FDAC3E719A166229520196FB9CE917E0236754226A5BCBF7BB7240E516D7ED3FEA852855EC3F121DD4BAFEC5646F2A37F57EE [] ["test-app-module:Indoor","test-app-module:Rural","test-app-module:Weekend"] {"test-app-module:textdata":"Stockholm","test-app-module:intdata":123} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-12T21:40:36.461565Z","lastModified":"2025-01-12T21:40:36.461565Z"} {}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19 {"mcc":"789","mnc":"87"} \N 19 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=6BD25E5C8FB7842F69010736253CC47F43535D7238E9E9A03E8092E8C019C83270DE47C96EF1049C40B83A130F9F129AE93B9C8538B6B004AE89BD0A098E48DD [] [] {} {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,ODUFunction=28 {"mcc":"123","mnc":"88"} \N 28 2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28,ODUFunction=28", "urn:cmHandle:30C68865AF2F353F202056CB1921D418"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=28 urn:o-ran:smo:teiv:sha512:MANAGEDELEMENT_MANAGES_ODUFUNCTION=ADD4A82DFBAF0409FA9D3C929A09314088627B447C733429D4EE7AAE2FFAEE4894F90826B6814B63431EC07140783C7861E463C5AF8330E29469D704675EAB43 [] [] {} {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-14T12:40:36.461565Z","lastModified":"2025-01-14T12:40:36.461565Z"}
\.
-COPY ties_data."o-ran-smo-teiv-ran_NRCellDU" ("id", "cellLocalId", "nCI", "nRPCI", "nRTAC", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_provided-by-oduFunction", "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_FK_grouped-by-sector", "REL_ID_SECTOR_GROUPS_NRCELLDU", "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU", "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU", "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU", "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_metadata_SECTOR_GROUPS_NRCELLDU") FROM stdin;
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1 1 1 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418CE1B9ED9E21D38DA51772175BD498BE825D9EA362F9B7393C36AB72F6FDEE702439143D578268A2E84719A9352C8EA70F847B7B7664E047C [] [] {} Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=4BBE73F685A98EF799968ACFE76F376D795F4CC3B56A6B867642048CDF4C1B8E323430EA7C6C38E4031FB891158763CC5459A8704E1A9FBFBD53CE8AD23BF463 [] [] {} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"OK"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2 2 2 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=78ECC09D4832328976EF0F9C19699EE05D98E3837368D386AE39AD027543494AC620086BD2A7403DACFAA7B474B3DEBD313E0906F1EDE7FA2B584E16542A706A [] [] {} Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=46AAB2CC5388BECD7B2180C89EEFA64B9A3BC197B614B57FD4BD9ADACE2475A89E16BA04291DE1674FAF2925483E23B8EDCAD4EE98759A9C08E2677CD88F4C43 [] [] {} {"reliabilityIndicator":"RESTORED"} {"reliabilityIndicator":"RESTORED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3 3 3 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=714C1B73945C298CAA03FE0D800053CDD1C571BBF375DC647B9F23FDA861CEB369832A3593BB1AA4B8A7245AD187ED24ADDF6FB147130827CDC17BA8370C4838 [] [] {} Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=F892571703F0E20A37F3950818DEFA9991ACF35828EEEBD3E43404218F947E1F522258A1F31F4C82A53E7E60D9E1A7AC7AC4219A0D9DD0D8FD192BC73BBB5101 [] [] {} {"reliabilityIndicator":"OK","foo":"bar"} {"reliabilityIndicator":"OK","foo":"bar"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=91 91 91 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=91", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} \N \N [] [] {} \N \N [] [] {} {"reliabilityIndicator":"RESTORED","foo":"bar"} {"reliabilityIndicator":"RESTORED","foo":"bar"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=92 92 92 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=92", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=DDECCEFB8831FA4EB21B121BA35EAB07ED8D841B5A38580C5F3AD11E66FE73D2FC42E823C6C73288860C7562B610C3D07B6C39FD386171A3BE622096F4B3D006 [] [] {} \N \N [] [] {} {"reliabilityIndicator":"ADVISED","foo":"bar"} {"reliabilityIndicator":"ABC","foo":"bar"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=93 93 93 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=93", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] ["test-app-module:Rural"] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=7723E5D5B3332E0890EAA620C77A6A47065E15A2EA28AD83F3B3CFEA5A7E3BB5965AE78890F1BF000EAA89BF8DE209E506192BF5EA6871426603ED76CBFAF088 [] [] {} \N \N [] [] {} {"reliabilityIndicator":"RESTORED","foo":"bar"} {"reliabilityIndicator":"RESTORED","foo":"bar"}
+COPY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ("id", "cellLocalId", "nCI", "nRPCI", "nRTAC", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_provided-by-oduFunction", "REL_ID_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_FK_grouped-by-sector", "REL_ID_SECTOR_GROUPS_NRCELLDU", "REL_CD_sourceIds_SECTOR_GROUPS_NRCELLDU", "REL_CD_classifiers_SECTOR_GROUPS_NRCELLDU", "REL_CD_decorators_SECTOR_GROUPS_NRCELLDU", "REL_metadata_ODUFUNCTION_PROVIDES_NRCELLDU", "REL_metadata_SECTOR_GROUPS_NRCELLDU") FROM stdin;
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1 1 1 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=4E40BE000AFEA418CE1B9ED9E21D38DA51772175BD498BE825D9EA362F9B7393C36AB72F6FDEE702439143D578268A2E84719A9352C8EA70F847B7B7664E047C [] [] {} urn:Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=4BBE73F685A98EF799968ACFE76F376D795F4CC3B56A6B867642048CDF4C1B8E323430EA7C6C38E4031FB891158763CC5459A8704E1A9FBFBD53CE8AD23BF463 [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2 2 2 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=78ECC09D4832328976EF0F9C19699EE05D98E3837368D386AE39AD027543494AC620086BD2A7403DACFAA7B474B3DEBD313E0906F1EDE7FA2B584E16542A706A [] [] {} urn:Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=46AAB2CC5388BECD7B2180C89EEFA64B9A3BC197B614B57FD4BD9ADACE2475A89E16BA04291DE1674FAF2925483E23B8EDCAD4EE98759A9C08E2677CD88F4C43 [] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3 3 3 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=714C1B73945C298CAA03FE0D800053CDD1C571BBF375DC647B9F23FDA861CEB369832A3593BB1AA4B8A7245AD187ED24ADDF6FB147130827CDC17BA8370C4838 [] [] {} urn:Sector=2 urn:o-ran:smo:teiv:sha512:SECTOR_GROUPS_NRCELLDU=F892571703F0E20A37F3950818DEFA9991ACF35828EEEBD3E43404218F947E1F522258A1F31F4C82A53E7E60D9E1A7AC7AC4219A0D9DD0D8FD192BC73BBB5101 [] [] {} {"reliabilityIndicator":"OK","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"OK","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=91 91 91 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=91", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} \N \N [] [] {} \N \N [] [] {} {"reliabilityIndicator":"RESTORED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"RESTORED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=92 92 92 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=92", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=DDECCEFB8831FA4EB21B121BA35EAB07ED8D841B5A38580C5F3AD11E66FE73D2FC42E823C6C73288860C7562B610C3D07B6C39FD386171A3BE622096F4B3D006 [] [] {} \N \N [] [] {} {"reliabilityIndicator":"ADVISED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"ABC","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=93 93 93 789 456 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=93", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] ["test-app-module:Rural","test-app-module:Weekend"] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRCELLDU=7723E5D5B3332E0890EAA620C77A6A47065E15A2EA28AD83F3B3CFEA5A7E3BB5965AE78890F1BF000EAA89BF8DE209E506192BF5EA6871426603ED76CBFAF088 [] [] {} \N \N [] [] {} {"reliabilityIndicator":"RESTORED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} {"reliabilityIndicator":"RESTORED","foo":"bar","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."o-ran-smo-teiv-ran_NRSectorCarrier" ("id", "arfcnDL", "arfcnUL", "bSChannelBwDL", "frequencyDL", "frequencyUL", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_provided-by-oduFunction", "REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_FK_used-by-nrCellDu", "REL_ID_NRCELLDU_USES_NRSECTORCARRIER", "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER", "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER", "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER", "REL_FK_used-antennaCapability", "REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_metadata_NRCELLDU_USES_NRSECTORCARRIER", "REL_metadata_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "metadata") FROM stdin;
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=1 507000 507000 10000 2535000 2535000 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["ocucp-ocuup-model:Weekend"] {"ocucp-ocuup-model:metadata":"value1"} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRSECTORCARRIER=BE61426CAEA457C85D8B551A1A75BFA157BBCE6F143110661C4C9D406A7AAF22D8522515CE924CFB3A9E54E68588A45D3A51065BD24ADBA62CC0FDA761AEE2FC [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1 urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=7B9425BBD6977FEA6C180F6078CFBAEBE65400223B29E0EFA4F38424FAD66C690806778909177ECF1457CAC18E5BCF6FA4F24E3ECE524C89DE68108708D6D876 [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 urn:o-ran:smo:teiv:sha512:NRSECTORCARRIER_USES_ANTENNACAPABILITY=11EDFC31E2BE240D3CB15DB1A3FA3B78C828524BC8FCA3365A615129A61A627C21DA8EBF6DD788CDBDEC668344D1F79A371749083D6AE04DDDD57CB4FA8C3ECB [] [] {} {"reliabilityIndicator":"RESTORED"} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"RESTORED"} {"reliabilityIndicator":"ADVISED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=2 507000 507000 10000 2535000 2535000 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=2", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRSECTORCARRIER=C0E73797DB4599AB9ECACFC1FFE3543C92926070ECFBE77E7C15BA99DAFBB1D69352533D3DE5EB2D3D3CC84DAD51B242CB0FC594FF9E8B73C3B42106B0F9AF46 [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2 urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=2F87CE31F38D38B993786E3D75D253984DA2842F71504958AAF052D0728B309C73BB3132D6BEA011748BB0B94F489725DB5765AB5366702B812D5C76A772BD9C [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 urn:o-ran:smo:teiv:sha512:NRSECTORCARRIER_USES_ANTENNACAPABILITY=27DF07D016FE349EC565DE2FB09303EE7D8700346624046F79D8DAC176E7FA221E918E3030758B51931C430919E14FD7D16720460F6E1585000C72874A1641DA [] [] {} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"ADVISED"} {"reliabilityIndicator":"OK"} {"reliabilityIndicator":"RESTORED"}
-urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=3 507000 507000 10000 2535000 2535000 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=3", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRSECTORCARRIER=BD87BC547A6731B2905A989EBA493810C74258337C49BBB288F4F55734D28B4E40D9C719EC3564348253905BD93EC78EB7C88F2297FF20778911635E94800F74 [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3 urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=950ED4540349F9859CEA9E47884A28CD567BDD2505A3C5335C8851A7AADF2AF65542157BB42D607EE3847E4223D76DE88B90762D0590E48693822FD6DCAE60CD [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 urn:o-ran:smo:teiv:sha512:NRSECTORCARRIER_USES_ANTENNACAPABILITY=1B891FCC4F5479BC71127ED2EB43EA26AC3452F8C47792786373442C10BBC408FE5B779BF1CF732C81220803342F4FB969E348F9C5CEEDEC78F9764E186C633F [] [] {} {"reliabilityIndicator":"ADVISED","foo":"bar"} {"reliabilityIndicator":"ADVISED"} {"reliabilityIndicator":"OK","foo":"bar"} {"reliabilityIndicator":"RESTORED"}
+COPY teiv_data."o-ran-smo-teiv-ran_NRSectorCarrier" ("id", "arfcnDL", "arfcnUL", "bSChannelBwDL", "frequencyDL", "frequencyUL", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_provided-by-oduFunction", "REL_ID_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_CD_sourceIds_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_CD_classifiers_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_CD_decorators_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_FK_used-by-nrCellDu", "REL_ID_NRCELLDU_USES_NRSECTORCARRIER", "REL_CD_sourceIds_NRCELLDU_USES_NRSECTORCARRIER", "REL_CD_classifiers_NRCELLDU_USES_NRSECTORCARRIER", "REL_CD_decorators_NRCELLDU_USES_NRSECTORCARRIER", "REL_FK_used-antennaCapability", "REL_ID_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "REL_CD_sourceIds_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "REL_CD_classifiers_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "REL_CD_decorators_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "REL_metadata_ODUFUNCTION_PROVIDES_NRSECTORCARRIER", "REL_metadata_NRCELLDU_USES_NRSECTORCARRIER", "REL_metadata_NRSECTORCARRIER_USES_ANTENNACAPABILITY", "metadata") FROM stdin;
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=1 507000 507000 10000 2535000 2535000 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["ocucp-ocuup-model:Weekend"] {"ocucp-ocuup-model:metadata":"value1"} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRSECTORCARRIER=BE61426CAEA457C85D8B551A1A75BFA157BBCE6F143110661C4C9D406A7AAF22D8522515CE924CFB3A9E54E68588A45D3A51065BD24ADBA62CC0FDA761AEE2FC [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1 urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=7B9425BBD6977FEA6C180F6078CFBAEBE65400223B29E0EFA4F38424FAD66C690806778909177ECF1457CAC18E5BCF6FA4F24E3ECE524C89DE68108708D6D876 [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 urn:o-ran:smo:teiv:sha512:NRSECTORCARRIER_USES_ANTENNACAPABILITY=11EDFC31E2BE240D3CB15DB1A3FA3B78C828524BC8FCA3365A615129A61A627C21DA8EBF6DD788CDBDEC668344D1F79A371749083D6AE04DDDD57CB4FA8C3ECB [] [] {} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=2 507000 507000 10000 2535000 2535000 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=2", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRSECTORCARRIER=C0E73797DB4599AB9ECACFC1FFE3543C92926070ECFBE77E7C15BA99DAFBB1D69352533D3DE5EB2D3D3CC84DAD51B242CB0FC594FF9E8B73C3B42106B0F9AF46 [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2 urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=2F87CE31F38D38B993786E3D75D253984DA2842F71504958AAF052D0728B309C73BB3132D6BEA011748BB0B94F489725DB5765AB5366702B812D5C76A772BD9C [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 urn:o-ran:smo:teiv:sha512:NRSECTORCARRIER_USES_ANTENNACAPABILITY=27DF07D016FE349EC565DE2FB09303EE7D8700346624046F79D8DAC176E7FA221E918E3030758B51931C430919E14FD7D16720460F6E1585000C72874A1641DA [] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"}
+urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=3 507000 507000 10000 2535000 2535000 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRSectorCarrier=3", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9 urn:o-ran:smo:teiv:sha512:ODUFUNCTION_PROVIDES_NRSECTORCARRIER=BD87BC547A6731B2905A989EBA493810C74258337C49BBB288F4F55734D28B4E40D9C719EC3564348253905BD93EC78EB7C88F2297FF20778911635E94800F74 [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=3 urn:o-ran:smo:teiv:sha512:NRCELLDU_USES_NRSECTORCARRIER=950ED4540349F9859CEA9E47884A28CD567BDD2505A3C5335C8851A7AADF2AF65542157BB42D607EE3847E4223D76DE88B90762D0590E48693822FD6DCAE60CD [] [] {} urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 urn:o-ran:smo:teiv:sha512:NRSECTORCARRIER_USES_ANTENNACAPABILITY=1B891FCC4F5479BC71127ED2EB43EA26AC3452F8C47792786373442C10BBC408FE5B779BF1CF732C81220803342F4FB969E348F9C5CEEDEC78F9764E186C633F [] [] {} {"reliabilityIndicator":"ADVISED","foo":"bar","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"ADVISED","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"OK","foo":"bar","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"}
\.
-COPY ties_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ("id", "aSide_AntennaModule", "bSide_AntennaCapability", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
-urn:o-ran:smo:teiv:sha512:ANTENNAMODULE_SERVES_ANTENNACAPABILITY=ABD52B030DF1169F9F41C898913EF30F7BB5741F53352F482310B280C90AC569B7D31D52A2BB41F1F0099AE1EDD56CACF0B285D145A5584D376DD45DED1E2D65 urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["ocucp-ocuup-model:Weekend"] {"ocucp-ocuup-model:metadata":"value1"} {"reliabilityIndicator":"RESTORED"}
-urn:o-ran:smo:teiv:sha512:ANTENNAMODULE_SERVES_ANTENNACAPABILITY=8940999E2069725B463052BC35572FDB888C7B734459EE78A01B9F91E2607D87356425BC8EFF0B1C9057D852A4D3F9E1B09479D32FEE68C65EF2821B65F7BD80 urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7 urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} {"reliabilityIndicator":"OK"}
+COPY teiv_data."CFC235E0404703D1E4454647DF8AAE2C193DB402" ("id", "aSide_AntennaModule", "bSide_AntennaCapability", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
+urn:o-ran:smo:teiv:sha512:ANTENNAMODULE_SERVES_ANTENNACAPABILITY=ABD52B030DF1169F9F41C898913EF30F7BB5741F53352F482310B280C90AC569B7D31D52A2BB41F1F0099AE1EDD56CACF0B285D145A5584D376DD45DED1E2D65 urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["ocucp-ocuup-model:Weekend"] {"ocucp-ocuup-model:metadata":"value1"} {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"}
+urn:o-ran:smo:teiv:sha512:ANTENNAMODULE_SERVES_ANTENNACAPABILITY=8940999E2069725B463052BC35572FDB888C7B734459EE78A01B9F91E2607D87356425BC8EFF0B1C9057D852A4D3F9E1B09479D32FEE68C65EF2821B65F7BD80 urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7 urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-13T16:40:36.461565Z","lastModified":"2025-01-13T16:40:36.461565Z"}
\.
-COPY ties_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ("id", "aSide_AntennaModule", "bSide_NRCellDU", "CD_sourceIds", "CD_classifiers", "CD_decorators") FROM stdin;
+COPY teiv_data."o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULE_SERVES_NRCELLDU" ("id", "aSide_AntennaModule", "bSide_NRCellDU", "CD_sourceIds", "CD_classifiers", "CD_decorators") FROM stdin;
urn:o-ran:smo:teiv:sha512:ANTENNAMODULE_SERVES_NRCELLDU=ABD52B030DF1169F9F41C898913EF30F7BB5741F53352F482310B280C90AC569B7D31D52A2BB41F1F0099AE1EDD56CACF0B285D145A5584D376DD45DED1E2D65 urn:o-ran:smo:teiv:sha512:AntennaModule=308D6602D2FE1C923DF176A0F30688B1810DFA7BC4AD5B8050BF9E27361ECA86E86B47B8582DC28E8CE92EB81822DE248845E87094557A953FD9F15BA508B03A urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["gnbcucp-gnbcuup-model:Weekend"] {"gnbcucp-gnbcuup-model:metadata":"value1"}
urn:o-ran:smo:teiv:sha512:ANTENNAMODULE_SERVES_NRCELLDU=8940999E2069725B463052BC35572FDB888C7B734459EE78A01B9F91E2607D87356425BC8EFF0B1C9057D852A4D3F9E1B09479D32FEE68C65EF2821B65F7BD80 urn:o-ran:smo:teiv:sha512:AntennaModule=971FCD28D02B78DDD982611639A0957140339C5522EAAF3FBACA1B8308CF7B0A870CFA80AE04E259805B2A2CB95E263261309883B4D4BF50183FA17AFBA47EA7 urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=2 ["urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaUnit=1,AntennaSubunit=1", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,NodeSupport=1,SectorEquipmentFunction=1", "urn:cmHandle:03661FA2E41EF3D12CAAD5954CD985AC"] [] {}
\.
-COPY ties_data."o-ran-smo-teiv-ran_NRCellCU" ("id", "cellLocalId", "nCI", "nRTAC", "plmnId", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_provided-by-ocucpFunction", "REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU", "REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU", "REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU", "REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU") FROM stdin;
+COPY teiv_data."o-ran-smo-teiv-ran_NRCellCU" ("id", "cellLocalId", "nCI", "nRTAC", "plmnId", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_provided-by-ocucpFunction", "REL_ID_OCUCPFUNCTION_PROVIDES_NRCELLCU", "REL_CD_sourceIds_OCUCPFUNCTION_PROVIDES_NRCELLCU", "REL_CD_classifiers_OCUCPFUNCTION_PROVIDES_NRCELLCU", "REL_CD_decorators_OCUCPFUNCTION_PROVIDES_NRCELLCU", "metadata", "REL_metadata_OCUCPFUNCTION_PROVIDES_NRCELLCU") FROM stdin;
\.
-COPY ties_data."o-ran-smo-teiv-equipment_Site" ("id", "geo-location", "name", "CD_sourceIds", "CD_classifiers", "CD_decorators") FROM stdin;
+COPY teiv_data."o-ran-smo-teiv-equipment_Site" ("id", "geo-location", "name", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
\.
-- Test specific entries --
-CREATE TABLE IF NOT EXISTS ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (
+CREATE TABLE IF NOT EXISTS teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (
"id" TEXT,
"6446B2D4BE5E367FB0396383C4BDEF42D51CF74F" TEXT,
"F03B534AFF0872651FED60C54AB56BEDADAB94B5" BIGINT,
"REL_CD_92559ED73C761B860682582A040E745ECEC194D5" jsonb
);
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_92559ED73C761B860682582A040E745ECEC194D5" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ALTER COLUMN "REL_CD_92559ED73C761B860682582A040E745ECEC194D5" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD COLUMN IF NOT EXISTS "REL_metadata_F53C39EC1F710F3096BE0588F6783A03A378516A" jsonb;
+ALTER TABLE ONLY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD COLUMN IF NOT EXISTS "REL_metadata_F53C39EC1F710F3096BE0588F6783A03A378516A" jsonb;
-CREATE TABLE IF NOT EXISTS ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" (
+CREATE TABLE IF NOT EXISTS teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" (
"id" TEXT,
"aSide_EntityTypeA" TEXT,
"bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."FB1E124031A12CD85D3335194B39B193723A0490" (
+CREATE TABLE IF NOT EXISTS teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" (
"id" TEXT,
"aSide_C812C285BEFA4EC42026AB075D9C65200A00F815" TEXT,
"bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-CREATE TABLE IF NOT EXISTS ties_data."test-built-in-module_EntityTypeA" (
+CREATE TABLE IF NOT EXISTS teiv_data."test-built-in-module_EntityTypeA" (
"id" TEXT,
"CD_sourceIds" jsonb,
"CD_classifiers" jsonb,
"REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA" jsonb
);
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ALTER COLUMN "REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "REL_metadata_3B43F80D423BF8F96A2906643B7B4712604FC28B" jsonb;
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "REL_metadata_3B43F80D423BF8F96A2906643B7B4712604FC28B" jsonb;
-ALTER TABLE ONLY ties_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "REL_metadata_3H23F80D423BF8F96A2906643B7B4712604FC45F" jsonb;
+ALTER TABLE ONLY teiv_data."test-built-in-module_EntityTypeA" ADD COLUMN IF NOT EXISTS "REL_metadata_3H23F80D423BF8F96A2906643B7B4712604FC45F" jsonb;
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'10B9F515756871D3EF6558FAF1F112BAE207945D',
'PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB',
- 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "PK_7A421D526B36AA9EEF17964BC27011A12FF80DBB" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
'PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D',
- 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "PK_4C48AAFA2160D74F9D13364AA2BE4FDB8A60689D" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'FB1E124031A12CD85D3335194B39B193723A0490',
'PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD',
- 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "PK_020B03AED5787D1B43ABBD9F2C26B494ADDBC7CD" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'PK_test-built-in-module_EntityTypeA_id',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "PK_test-built-in-module_EntityTypeA_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "PK_test-built-in-module_EntityTypeA_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'10B9F515756871D3EF6558FAF1F112BAE207945D',
'FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228',
- 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228" FOREIGN KEY ("REL_FK_provided-by-entityTypeA") REFERENCES ties_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "FK_B0923C0CCED6CF47CFF759FFE1B810D6CA10D228" FOREIGN KEY ("REL_FK_provided-by-entityTypeA") REFERENCES teiv_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'10B9F515756871D3EF6558FAF1F112BAE207945D',
'UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14',
- 'ALTER TABLE ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14" UNIQUE ("REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0");'
+ 'ALTER TABLE teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ADD CONSTRAINT "UNIQUE_B1C2FC9A96300B2BE45785DE60E152D8E85FBE14" UNIQUE ("REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
'FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30',
- 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30" FOREIGN KEY ("aSide_EntityTypeA") REFERENCES ties_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30" FOREIGN KEY ("aSide_EntityTypeA") REFERENCES teiv_data."test-built-in-module_EntityTypeA" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'54110F8D085BBBA7BB6DE5CE71B511562090F7EE',
'FK_33B5669A341584011D9A73FB491FF2242A158057',
- 'ALTER TABLE ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_33B5669A341584011D9A73FB491FF2242A158057" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ADD CONSTRAINT "FK_33B5669A341584011D9A73FB491FF2242A158057" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'FB1E124031A12CD85D3335194B39B193723A0490',
'FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F',
- 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F" FOREIGN KEY ("aSide_C812C285BEFA4EC42026AB075D9C65200A00F815") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F" FOREIGN KEY ("aSide_C812C285BEFA4EC42026AB075D9C65200A00F815") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'FB1E124031A12CD85D3335194B39B193723A0490',
'FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5',
- 'ALTER TABLE ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ADD CONSTRAINT "FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5" FOREIGN KEY ("bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0" FOREIGN KEY ("REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_02592FFA6AFD7EAC7AFAD936E3CD50708E4533E0" FOREIGN KEY ("REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD" UNIQUE ("REL_ID_31A5B55158140557F09AE15589A8B8038416689B");'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_7715FF94E14F99CE4994ABBD8C2583CBA9EAE5BD" UNIQUE ("REL_ID_31A5B55158140557F09AE15589A8B8038416689B");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF" FOREIGN KEY ("REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA") REFERENCES ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "FK_5CD9BCFA08278DA0BF902BAFBCFCDFCE4FF25FEF" FOREIGN KEY ("REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA") REFERENCES teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'test-built-in-module_EntityTypeA',
'UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9',
- 'ALTER TABLE ties_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9" UNIQUE ("REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845");'
+ 'ALTER TABLE teiv_data."test-built-in-module_EntityTypeA" ADD CONSTRAINT "UNIQUE_67DB5E4BC34AB83BDC069A5CAF73B57967D5C2D9" UNIQUE ("REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845");'
);
-COPY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ("id", "6446B2D4BE5E367FB0396383C4BDEF42D51CF74F", "F03B534AFF0872651FED60C54AB56BEDADAB94B5", "333177AA699C0DE6399503171DCF48FB396322B0", "027B1A8019C6DEF04558B90D9D8B52253B82FEC6", "478D043D81678134EF1C8BFB073A70F882C4AF12", "8252D18D44F633831557076D827993C45278024D", "68C48305AB6C3A30DD927F5D38562379374A4B31", "CD_sourceIds", "CD_classifiers", "CD_decorators") FROM stdin;
-LongEntityType1 someStringValue 9223372036854775807 2147483647 -9223372036854775807 1.1 ["1000", "2000"] {"mcc":"01","mnc":"234"} ["LongEntityType1"] [] {}
+COPY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ("id", "6446B2D4BE5E367FB0396383C4BDEF42D51CF74F", "F03B534AFF0872651FED60C54AB56BEDADAB94B5", "333177AA699C0DE6399503171DCF48FB396322B0", "027B1A8019C6DEF04558B90D9D8B52253B82FEC6", "478D043D81678134EF1C8BFB073A70F882C4AF12", "8252D18D44F633831557076D827993C45278024D", "68C48305AB6C3A30DD927F5D38562379374A4B31", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
+urn:LongEntityType1 someStringValue 9223372036854775807 2147483647 -9223372036854775807 1.1 ["1000", "2000"] {"mcc":"01","mnc":"234"} ["urn:LongEntityType1"] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."test-built-in-module_EntityTypeA" ("id", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5", "REL_ID_31A5B55158140557F09AE15589A8B8038416689B", "REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C", "REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9", "REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54", "REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA", "REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845", "REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B", "REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A", "REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA") FROM stdin;
-EntityType1 [] [] {} \N \N [] [] {} LongEntityType1 RelId_OneToOne_EntityType1_LongEntityType1 ["EntityType1"] [] {}
-EntityType2 [] [] {} LongEntityType1 Rel_ManyToOne_EntityType2_LongEntityType1 [] [] {} \N \N ["EntityType2"] [] {}
+COPY teiv_data."test-built-in-module_EntityTypeA" ("id", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_B7E43411C5C5079D49856E74A9FA63BD20C522C5", "REL_ID_31A5B55158140557F09AE15589A8B8038416689B", "REL_CD_AB6BDADE3F6C750C9FDB6CAD6059C4CBCE67236C", "REL_CD_75B161E740A96ADBAE6F08D4F85684ECC29049B9", "REL_CD_6F7211CAF505AECF9A565BC7A4AF56E7032CCC54", "REL_FK_A86937FEBD025CFDF6EE5BC386B4C569EB2652DA", "REL_ID_A974AD6DD8C4CA281D45693D3A61AE98FEE82845", "REL_CD_3B43F80D423BF8F96A2906643B7B4712604FC28B", "REL_CD_74A44B167FDF37D6C8E79B5033FEF8BC384C881A", "REL_CD_F5B24D9A7273119D4D1519473D9EC88CB407E5CA", "metadata") FROM stdin;
+urn:EntityType1 [] [] {} \N \N [] [] {} urn:LongEntityType1 urn:RelId_OneToOne_EntityType1_LongEntityType1 ["urn:EntityType1"] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:EntityType2 [] [] {} urn:LongEntityType1 urn:Rel_ManyToOne_EntityType2_LongEntityType1 [] [] {} \N \N ["urn:EntityType2"] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ("id", "6446B2D4BE5E367FB0396383C4BDEF42D51CF74F", "F03B534AFF0872651FED60C54AB56BEDADAB94B5", "333177AA699C0DE6399503171DCF48FB396322B0", "027B1A8019C6DEF04558B90D9D8B52253B82FEC6", "478D043D81678134EF1C8BFB073A70F882C4AF12", "8252D18D44F633831557076D827993C45278024D", "68C48305AB6C3A30DD927F5D38562379374A4B31", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_provided-by-entityTypeA", "REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0", "REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A", "REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386", "REL_CD_92559ED73C761B860682582A040E745ECEC194D5") FROM stdin;
-LongEntityType2 \N \N \N \N \N \N \N [] [] {} EntityType2 Rel_OneToMany_EntityType2_LongEntityType2 ["LongEntityType2"] [] {}
-LongEntityType3 \N \N \N \N \N \N \N [] [] {} \N \N ["LongEntityType3"] [] {}
+COPY teiv_data."10B9F515756871D3EF6558FAF1F112BAE207945D" ("id", "6446B2D4BE5E367FB0396383C4BDEF42D51CF74F", "F03B534AFF0872651FED60C54AB56BEDADAB94B5", "333177AA699C0DE6399503171DCF48FB396322B0", "027B1A8019C6DEF04558B90D9D8B52253B82FEC6", "478D043D81678134EF1C8BFB073A70F882C4AF12", "8252D18D44F633831557076D827993C45278024D", "68C48305AB6C3A30DD927F5D38562379374A4B31", "CD_sourceIds", "CD_classifiers", "CD_decorators", "REL_FK_provided-by-entityTypeA", "REL_ID_F64052A4F8BB3CC533EC15BBFB5E224F600735B0", "REL_CD_F26C39EC1F710F3096BE0588F6783A03A378516A", "REL_CD_E2C3D598A06EA38133E23C1756ED58A66FE21386", "REL_CD_92559ED73C761B860682582A040E745ECEC194D5", "metadata") FROM stdin;
+urn:LongEntityType2 \N \N \N \N \N \N \N [] [] {} urn:EntityType2 urn:Rel_OneToMany_EntityType2_LongEntityType2 ["urn:LongEntityType2"] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:LongEntityType3 \N \N \N \N \N \N \N [] [] {} \N \N ["urn:LongEntityType3"] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ("id", "aSide_EntityTypeA", "bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515", "CD_sourceIds", "CD_classifiers", "CD_decorators") FROM stdin;
-Rel_ManyToMany_EntityType1_LongEntityType1 EntityType1 LongEntityType1 ["EntityType1", "LongEntityType1"] [] {}
+COPY teiv_data."54110F8D085BBBA7BB6DE5CE71B511562090F7EE" ("id", "aSide_EntityTypeA", "bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
+urn:Rel_ManyToMany_EntityType1_LongEntityType1 urn:EntityType1 urn:LongEntityType1 ["urn:EntityType1", "urn:LongEntityType1"] [] {} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
-COPY ties_data."FB1E124031A12CD85D3335194B39B193723A0490" ("id", "aSide_C812C285BEFA4EC42026AB075D9C65200A00F815", "bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515", "CD_sourceIds", "CD_classifiers", "CD_decorators") FROM stdin;
-Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2 LongEntityType1 LongEntityType2 ["LongEntityType1", "LongEntityType2", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["test-app-module:Weekday"] {"test-app-module:textdata":"ORAN","test-app-module:intdata":123}
-Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3 LongEntityType2 LongEntityType3 ["LongEntityType2", "LongEntityType3", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8617"] ["test-app-module:Weekend"] {"test-app-module:textdata":"ORAN","test-app-module:intdata":234}
+COPY teiv_data."FB1E124031A12CD85D3335194B39B193723A0490" ("id", "aSide_C812C285BEFA4EC42026AB075D9C65200A00F815", "bSide_A85CE100A012A71EF2ABA306BABE484AC2AAE515", "CD_sourceIds", "CD_classifiers", "CD_decorators", "metadata") FROM stdin;
+urn:Rel_OneToOne_SameEntity_LongEntityType1_LongEntityType2 urn:LongEntityType1 urn:LongEntityType2 ["urn:LongEntityType1", "urn:LongEntityType2", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616"] ["test-app-module:Weekday"] {"test-app-module:textdata":"ORAN","test-app-module:intdata":123} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
+urn:Rel_OneToOne_SameEntity_LongEntityType2_LongEntityType3 urn:LongEntityType2 urn:LongEntityType3 ["urn:LongEntityType2", "urn:LongEntityType3", "urn:cmHandle:C4388D6BB970EC663F88B46CC14F8617"] ["test-app-module:Weekend"] {"test-app-module:textdata":"ORAN","test-app-module:intdata":234} {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"}
\.
COMMIT;
BEGIN;
-COPY ties_groups."groups" ("id", "name", "type") FROM stdin;
+COPY teiv_groups."groups" ("id", "name", "type") FROM stdin;
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440050 test-dynamic-group-for-rename dynamic
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440051 test-static-group-for-rename static
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000 test-dynamic-group-for-delete dynamic
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440214 test-group-with-max-provided-members-in-static-group static
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440215 test-group-merge-all-provided-members-in-static-group static
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440216 test-group-almost-max-provided-members-in-static-group static
+urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440217 test-group-goodtarget-goodscope-members-in-dynamic-group dynamic
+urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440218 test-group-badtarget-goodscope-members-in-dynamic-group dynamic
+urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440219 test-group-goodtarget-badscope-members-in-dynamic-group dynamic
+urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440220 test-group-badtarget-badscope-members-in-dynamic-group dynamic
\.
-COPY ties_groups."dynamic_groups" ("id", "criteria") FROM stdin;
+COPY teiv_groups."dynamic_groups" ("id", "criteria") FROM stdin;
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440000 {"queryType": "getEntitiesByDomain", "domain": "OAM"}
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440050 {"queryType": "getEntitiesByDomain", "domain": "RAN"}
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440001 {"queryType": "getEntitiesByType", "domain": "RAN", "entityTypeName": "ODUFunction", "targetFilter": "/sourceIds"}
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440004 {"queryType": "getRelationshipsForEntityId", "domain": "RAN", "entityTypeName": "ODUFunction", "entityId": "urn:3gpp:dn:non-existing-odufunction"}
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440005 {"queryType": "getEntitiesByType", "domain": "RAN", "entityTypeName": "ODUFunction", "scopeFilter": "/attributes"}
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440100 {"criteria": {"queryType": "getEntitiesByType", "domain": "RAN", "entityTypeName": "ODUFunction", "targetFilter": "/sourceIds"}}
+urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440217 {"queryType": "getRelationshipsForEntityId", "domain": "TEIV", "entityTypeName": "NRCellDU", "entityId": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1", "targetFilter": "/sourceIds", "scopeFilter": "/sourceIds[@item = 'urn:cmHandle:C4388D6BB970EC663F88B46CC14F8616'];/sourceIds[@item = 'urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,Equipment=1,AntennaUnitGroup=1,AntennaNearUnit=1,RetSubUnit=1']"}
+urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440218 {"queryType": "getRelationshipsForEntityId", "domain": "TEIV", "entityTypeName": "NRCellDU", "entityId": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1", "scopeFilter": "/NRCellDU/attributes[@cellLocalId=2]"}
+urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440219 {"queryType": "getRelationshipsForEntityId", "domain": "TEIV", "entityTypeName": "NRCellDU", "entityId": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1", "targetFilter": "/NRCellDU/attributes(nCI)"}
+urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440220 {"queryType": "getRelationshipsForEntityId", "domain": "TEIV", "entityTypeName": "NRCellDU", "entityId": "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9,NRCellDU=1", "targetFilter": "/NRCellDU/attributes(nCI)", "scopeFilter": "/NRCellDU/attributes[@cellLocalId=2]"}
\.
-COPY ties_groups."static_groups" ("id", "topology_type", "provided_members_ids") FROM stdin;
+COPY teiv_groups."static_groups" ("id", "topology_type", "provided_members_ids") FROM stdin;
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440201 o-ran-smo-teiv-ran:NRCellDU {"urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=91", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=92", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=19,ODUFunction=19,NRCellDU=500"}
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440201 o-ran-smo-teiv-ran:ODUFunction {"urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=9,ODUFunction=9", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=10,ODUFunction=10"}
urn:o-ran:smo:teiv:group=550e8400-e29b-41d4-a716-446655440201 o-ran-smo-teiv-oam:ManagedElement {"urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=13", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=14", "urn:3gpp:dn:SubNetwork=Europe,SubNetwork=Hungary,MeContext=1,ManagedElement=500"}
BEGIN;
-CREATE TABLE IF NOT EXISTS ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" (
+COPY teiv_data."o-ran-smo-teiv-ran_NRCellDU" ("id", "metadata", "cellLocalId", "nCI", "nRPCI", "nRTAC") FROM stdin;
+myReliabilityCell_1 {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} 51 61 \N \N
+myReliabilityCell_2 {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} 51 61 701 \N
+myReliabilityCell_3 {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} 51 61 701 401
+myReliabilityCell_4 {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} 51 61 701 401
+myReliabilityCell_5 {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} 51 61 701 401
+myReliabilityCell_6 {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} \N \N \N \N
+myReliabilityCell_7 {"reliabilityIndicator":"OK","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} 51 61 701 401
+myReliabilityCell_8 {"reliabilityIndicator":"RESTORED","firstDiscovered":"2025-01-08T10:40:36.46156500Z","lastModified":"2025-01-08T10:40:36.46156500Z"} 51 61 701 401
+\.
+
+CREATE TABLE IF NOT EXISTS teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" (
"id" TEXT,
"aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C" TEXT,
"bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-
-ALTER TABLE ONLY ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ALTER COLUMN "metadata" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" (
+CREATE TABLE IF NOT EXISTS teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" (
"id" TEXT,
"CD_sourceIds" jsonb,
"CD_classifiers" jsonb,
"REL_CD_EF3979E9DAF31B7949C883654633E633B9D35B92" jsonb
);
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
-
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD COLUMN IF NOT EXISTS "REL_updated_time_580D8ABEAC14A0B2EC73FC4EB093C446F7CD3E7D" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD COLUMN IF NOT EXISTS "REL_metadata_780D8ABEAC14A0B2ET73FC4EB093C446F7CD3E56" jsonb;
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD COLUMN IF NOT EXISTS "REL_metadata_C9E09FBCCBA1F6A3252B71B869B269EF28AACDFB" jsonb;
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "metadata" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "metadata" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "REL_CD_1F61FA6DDAECE90540F9880F2A98037B1530A5A4" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "REL_CD_1F61FA6DDAECE90540F9880F2A98037B1530A5A4" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "REL_CD_E388983F3E6BFAD67CA100F0AFCF8CD3E9B89ADD" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "REL_CD_E388983F3E6BFAD67CA100F0AFCF8CD3E9B89ADD" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "REL_CD_EF3979E9DAF31B7949C883654633E633B9D35B92" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ALTER COLUMN "REL_CD_EF3979E9DAF31B7949C883654633E633B9D35B92" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" (
+CREATE TABLE IF NOT EXISTS teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" (
"id" TEXT,
"antennaBeamWidth" jsonb,
"antennaModelNumber" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
-ALTER TABLE ONLY ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" ALTER COLUMN "metadata" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" ALTER COLUMN "metadata" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."53089669D370B15C78B7E8376D434921D1C94240" (
+CREATE TABLE IF NOT EXISTS teiv_data."53089669D370B15C78B7E8376D434921D1C94240" (
"id" TEXT,
"aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C" TEXT,
"bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."53089669D370B15C78B7E8376D434921D1C94240" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."53089669D370B15C78B7E8376D434921D1C94240" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."53089669D370B15C78B7E8376D434921D1C94240" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."53089669D370B15C78B7E8376D434921D1C94240" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."53089669D370B15C78B7E8376D434921D1C94240" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."53089669D370B15C78B7E8376D434921D1C94240" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."53089669D370B15C78B7E8376D434921D1C94240" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."53089669D370B15C78B7E8376D434921D1C94240" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."53089669D370B15C78B7E8376D434921D1C94240" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-
-ALTER TABLE ONLY ties_data."53089669D370B15C78B7E8376D434921D1C94240" ALTER COLUMN "metadata" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."83C555BD948277E4A7C99698690BF800604C0603" (
+CREATE TABLE IF NOT EXISTS teiv_data."83C555BD948277E4A7C99698690BF800604C0603" (
"id" TEXT,
"eUtranFqBands" jsonb,
"geranFqBands" jsonb,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."83C555BD948277E4A7C99698690BF800604C0603" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-
-ALTER TABLE ONLY ties_data."83C555BD948277E4A7C99698690BF800604C0603" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."83C555BD948277E4A7C99698690BF800604C0603" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."83C555BD948277E4A7C99698690BF800604C0603" ALTER COLUMN "metadata" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."83C555BD948277E4A7C99698690BF800604C0603" ALTER COLUMN "metadata" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."83C555BD948277E4A7C99698690BF800604C0603" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."83C555BD948277E4A7C99698690BF800604C0603" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."83C555BD948277E4A7C99698690BF800604C0603" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."83C555BD948277E4A7C99698690BF800604C0603" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."83C555BD948277E4A7C99698690BF800604C0603" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."83C555BD948277E4A7C99698690BF800604C0603" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" (
+CREATE TABLE IF NOT EXISTS teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" (
"id" TEXT,
"020335B0F627C169E24167748C38FE756FB34AE2" INTEGER,
"nCI" BIGINT,
"REL_CD_0AC0D382E4274681870EC7319460192F4F603001" jsonb
);
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD COLUMN IF NOT EXISTS "REL_metadata_8B4FA813345B7F25ACF2E9635EAF6E6DE0FBBE8A" jsonb;
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD COLUMN IF NOT EXISTS "REL_updated_time_FF2D6C2A0F47782B339C603874498CC8572F9D76" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "metadata" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD COLUMN IF NOT EXISTS "REL_metadata_8B4FA813345B7F25ACF2E9635EAF6E6DE0FBBE8A" jsonb;
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "metadata" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "REL_CD_32FFD9EF85AB2342E652FA493C3BF34D9BAAF054" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "REL_CD_B614AAA814176BC7128CE9D72C0950C4D6DE8052" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "REL_CD_32FFD9EF85AB2342E652FA493C3BF34D9BAAF054" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "REL_CD_0AC0D382E4274681870EC7319460192F4F603001" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "REL_CD_B614AAA814176BC7128CE9D72C0950C4D6DE8052" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ALTER COLUMN "REL_CD_0AC0D382E4274681870EC7319460192F4F603001" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."9759D655D5978786B3284FE8057D912192AEB550" (
+CREATE TABLE IF NOT EXISTS teiv_data."9759D655D5978786B3284FE8057D912192AEB550" (
"id" TEXT,
"dUpLMNId" jsonb,
"gNBDUId" BIGINT,
"REL_CD_FFF7E036187A7605BFC714483D2E60FD2FF6560B" jsonb
);
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
-
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ADD COLUMN IF NOT EXISTS "REL_updated_time_00017207EE30C3EDDE97A3C4DA4DAC8E2D9FCA99" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ADD COLUMN IF NOT EXISTS "REL_metadata_7E9F11EFBF8974D7C7DAB02E181A0BE4148091DE" jsonb;
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ADD COLUMN IF NOT EXISTS "REL_metadata_7E9F11EFBF8974D7C7DAB02E181A0BE4148091DE" jsonb;
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "metadata" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "metadata" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "REL_CD_45E8E8693B1B8928376EAA8995D08AA7B1E483BD" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "REL_CD_45E8E8693B1B8928376EAA8995D08AA7B1E483BD" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "REL_CD_7E9F11EFBF8974D7C7DAB02E181A0BE4148091C6" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "REL_CD_7E9F11EFBF8974D7C7DAB02E181A0BE4148091C6" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "REL_CD_FFF7E036187A7605BFC714483D2E60FD2FF6560B" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ALTER COLUMN "REL_CD_FFF7E036187A7605BFC714483D2E60FD2FF6560B" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" (
+CREATE TABLE IF NOT EXISTS teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" (
"id" TEXT,
"sectorCarrierType" TEXT,
"CD_sourceIds" jsonb,
"REL_CD_A14923FFF9D13FEB18087CE2A9C0BD264C572CFC" jsonb
);
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD COLUMN IF NOT EXISTS "REL_metadata_F723867781098568079DD82E5D5E529374F97E98" jsonb;
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD COLUMN IF NOT EXISTS "REL_updated_time_F322F0914F5B3B97073AE60B2ACC62C66CCE9B09" TIMESTAMPTZ;
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "metadata" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD COLUMN IF NOT EXISTS "REL_metadata_F723867781098568079DD82E5D5E529374F97E98" jsonb;
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "metadata" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "REL_CD_8D8BBB53FB18E8E9A5D241B66DA18CB5DDE9C1A5" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "REL_CD_68C234330FD6388836D0DAF9DFD0A40DE66DD8C5" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "REL_CD_8D8BBB53FB18E8E9A5D241B66DA18CB5DDE9C1A5" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "REL_CD_A14923FFF9D13FEB18087CE2A9C0BD264C572CFC" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "REL_CD_68C234330FD6388836D0DAF9DFD0A40DE66DD8C5" SET DEFAULT '[]';
-
-ALTER TABLE ONLY ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ALTER COLUMN "REL_CD_A14923FFF9D13FEB18087CE2A9C0BD264C572CFC" SET DEFAULT '{}';
-
-CREATE TABLE IF NOT EXISTS ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" (
+CREATE TABLE IF NOT EXISTS teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" (
"id" TEXT,
"aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C" TEXT,
"bSide_E8A97B8133D74D3BE65119E868FAC0BE63C09FFC" TEXT,
"CD_decorators" jsonb
);
-ALTER TABLE ONLY ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
-
-ALTER TABLE ONLY ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ALTER COLUMN "metadata" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ALTER COLUMN "metadata" SET DEFAULT '{}';
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'235E984E81B76ADCCFA68BDE09D3BBE49A355919',
'PK_E38D71419D2D129A6834B4E3283938D44105C199',
- 'ALTER TABLE ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD CONSTRAINT "PK_E38D71419D2D129A6834B4E3283938D44105C199" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD CONSTRAINT "PK_E38D71419D2D129A6834B4E3283938D44105C199" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'28C9A375E800E82308EBE7DA2932EF2C0AF13C38',
'PK_F702AF3A5CAAC6B868FEBA4CE6464E2243E8FA62',
- 'ALTER TABLE ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD CONSTRAINT "PK_F702AF3A5CAAC6B868FEBA4CE6464E2243E8FA62" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD CONSTRAINT "PK_F702AF3A5CAAC6B868FEBA4CE6464E2243E8FA62" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'53017288F3FE983848689A3DD21D48D298CCD23E',
'PK_D70EE78F6AD699CEB48CB9531574C1979C2D8ADA',
- 'ALTER TABLE ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" ADD CONSTRAINT "PK_D70EE78F6AD699CEB48CB9531574C1979C2D8ADA" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" ADD CONSTRAINT "PK_D70EE78F6AD699CEB48CB9531574C1979C2D8ADA" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'53089669D370B15C78B7E8376D434921D1C94240',
'PK_054AA52D66B07A7CCFFE992ED59634B506322187',
- 'ALTER TABLE ties_data."53089669D370B15C78B7E8376D434921D1C94240" ADD CONSTRAINT "PK_054AA52D66B07A7CCFFE992ED59634B506322187" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."53089669D370B15C78B7E8376D434921D1C94240" ADD CONSTRAINT "PK_054AA52D66B07A7CCFFE992ED59634B506322187" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'83C555BD948277E4A7C99698690BF800604C0603',
'PK_8D02617AC88C132BFCBC9D632334DCA8D415BAAF',
- 'ALTER TABLE ties_data."83C555BD948277E4A7C99698690BF800604C0603" ADD CONSTRAINT "PK_8D02617AC88C132BFCBC9D632334DCA8D415BAAF" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."83C555BD948277E4A7C99698690BF800604C0603" ADD CONSTRAINT "PK_8D02617AC88C132BFCBC9D632334DCA8D415BAAF" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'84E676149362F50C55FE1E004B98D4891916BBF3',
'PK_444AE2C6A8809EBDD1B911623638A5F6558FC5B5',
- 'ALTER TABLE ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD CONSTRAINT "PK_444AE2C6A8809EBDD1B911623638A5F6558FC5B5" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD CONSTRAINT "PK_444AE2C6A8809EBDD1B911623638A5F6558FC5B5" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'9759D655D5978786B3284FE8057D912192AEB550',
'PK_DC5BAFEC8AD0A864ADD4A21F6AEDE50F25D28F65',
- 'ALTER TABLE ties_data."9759D655D5978786B3284FE8057D912192AEB550" ADD CONSTRAINT "PK_DC5BAFEC8AD0A864ADD4A21F6AEDE50F25D28F65" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ADD CONSTRAINT "PK_DC5BAFEC8AD0A864ADD4A21F6AEDE50F25D28F65" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'C278F34A021D7A9AD13BE860608751874F21C00C',
'PK_00966063B84AE30FE4B3DEF804C06532734473E9',
- 'ALTER TABLE ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD CONSTRAINT "PK_00966063B84AE30FE4B3DEF804C06532734473E9" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD CONSTRAINT "PK_00966063B84AE30FE4B3DEF804C06532734473E9" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CE18CE5B725879B4016F5C281D80D37A95EA7E28',
'PK_4307C17B59528C77107E7C39986C0D18277F61FD',
- 'ALTER TABLE ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD CONSTRAINT "PK_4307C17B59528C77107E7C39986C0D18277F61FD" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD CONSTRAINT "PK_4307C17B59528C77107E7C39986C0D18277F61FD" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'235E984E81B76ADCCFA68BDE09D3BBE49A355919',
'FK_2E4BCE7E3E19C851F14B87EF1BB00F7C918B5DCF',
- 'ALTER TABLE ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD CONSTRAINT "FK_2E4BCE7E3E19C851F14B87EF1BB00F7C918B5DCF" FOREIGN KEY ("aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C") REFERENCES ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD CONSTRAINT "FK_2E4BCE7E3E19C851F14B87EF1BB00F7C918B5DCF" FOREIGN KEY ("aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C") REFERENCES teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'235E984E81B76ADCCFA68BDE09D3BBE49A355919',
'FK_7762EA35111FA62ED7E064A70380C8E12F050F28',
- 'ALTER TABLE ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD CONSTRAINT "FK_7762EA35111FA62ED7E064A70380C8E12F050F28" FOREIGN KEY ("bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E") REFERENCES ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" ADD CONSTRAINT "FK_7762EA35111FA62ED7E064A70380C8E12F050F28" FOREIGN KEY ("bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E") REFERENCES teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'28C9A375E800E82308EBE7DA2932EF2C0AF13C38',
'FK_6CAC17243CDF76F4F070B2D097A169FBD41588AB',
- 'ALTER TABLE ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD CONSTRAINT "FK_6CAC17243CDF76F4F070B2D097A169FBD41588AB" FOREIGN KEY ("REL_FK_used-nrCellDu") REFERENCES ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD CONSTRAINT "FK_6CAC17243CDF76F4F070B2D097A169FBD41588AB" FOREIGN KEY ("REL_FK_used-nrCellDu") REFERENCES teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'28C9A375E800E82308EBE7DA2932EF2C0AF13C38',
'UNIQUE_734E3D6BB96CF74951FC24E93EDCC920A48F970C',
- 'ALTER TABLE ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD CONSTRAINT "UNIQUE_734E3D6BB96CF74951FC24E93EDCC920A48F970C" UNIQUE ("REL_ID_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU");'
+ 'ALTER TABLE teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" ADD CONSTRAINT "UNIQUE_734E3D6BB96CF74951FC24E93EDCC920A48F970C" UNIQUE ("REL_ID_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'53089669D370B15C78B7E8376D434921D1C94240',
'FK_EAB359DF1FC9806007FD44BF435DE5711915589A',
- 'ALTER TABLE ties_data."53089669D370B15C78B7E8376D434921D1C94240" ADD CONSTRAINT "FK_EAB359DF1FC9806007FD44BF435DE5711915589A" FOREIGN KEY ("aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C") REFERENCES ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."53089669D370B15C78B7E8376D434921D1C94240" ADD CONSTRAINT "FK_EAB359DF1FC9806007FD44BF435DE5711915589A" FOREIGN KEY ("aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C") REFERENCES teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'53089669D370B15C78B7E8376D434921D1C94240',
'FK_99559DB06CF1125A1EB4364780EB8B2A8A6C4BCA',
- 'ALTER TABLE ties_data."53089669D370B15C78B7E8376D434921D1C94240" ADD CONSTRAINT "FK_99559DB06CF1125A1EB4364780EB8B2A8A6C4BCA" FOREIGN KEY ("bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E") REFERENCES ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."53089669D370B15C78B7E8376D434921D1C94240" ADD CONSTRAINT "FK_99559DB06CF1125A1EB4364780EB8B2A8A6C4BCA" FOREIGN KEY ("bSide_EE6DD4A2CFD743779BBCBFC18FC296EF6D72EB1E") REFERENCES teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'84E676149362F50C55FE1E004B98D4891916BBF3',
'FK_3B5DED591A6C8D4A14706E7E9B712BB23E4B01CF',
- 'ALTER TABLE ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD CONSTRAINT "FK_3B5DED591A6C8D4A14706E7E9B712BB23E4B01CF" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES ties_data."9759D655D5978786B3284FE8057D912192AEB550" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD CONSTRAINT "FK_3B5DED591A6C8D4A14706E7E9B712BB23E4B01CF" FOREIGN KEY ("REL_FK_provided-by-oduFunction") REFERENCES teiv_data."9759D655D5978786B3284FE8057D912192AEB550" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'84E676149362F50C55FE1E004B98D4891916BBF3',
'UNIQUE_15A52B744DF4DBB44E6CA285D0A05203897B7BE3',
- 'ALTER TABLE ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD CONSTRAINT "UNIQUE_15A52B744DF4DBB44E6CA285D0A05203897B7BE3" UNIQUE ("REL_ID_7899092EC8FBC674398C53965ADEFF940D17481F");'
+ 'ALTER TABLE teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" ADD CONSTRAINT "UNIQUE_15A52B744DF4DBB44E6CA285D0A05203897B7BE3" UNIQUE ("REL_ID_7899092EC8FBC674398C53965ADEFF940D17481F");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'9759D655D5978786B3284FE8057D912192AEB550',
'FK_059D7C49C9FF74C65CE378DB6DA019FE030027EB',
- 'ALTER TABLE ties_data."9759D655D5978786B3284FE8057D912192AEB550" ADD CONSTRAINT "FK_059D7C49C9FF74C65CE378DB6DA019FE030027EB" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ADD CONSTRAINT "FK_059D7C49C9FF74C65CE378DB6DA019FE030027EB" FOREIGN KEY ("REL_FK_managed-by-managedElement") REFERENCES teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'9759D655D5978786B3284FE8057D912192AEB550',
'UNIQUE_A105D998A021EF05E41D7EFCA7EFCFE4DEA9049A',
- 'ALTER TABLE ties_data."9759D655D5978786B3284FE8057D912192AEB550" ADD CONSTRAINT "UNIQUE_A105D998A021EF05E41D7EFCA7EFCFE4DEA9049A" UNIQUE ("REL_ID_BDE0B6C74D14AC109D29A08D80E92D4D0DCAEB0B");'
+ 'ALTER TABLE teiv_data."9759D655D5978786B3284FE8057D912192AEB550" ADD CONSTRAINT "UNIQUE_A105D998A021EF05E41D7EFCA7EFCFE4DEA9049A" UNIQUE ("REL_ID_BDE0B6C74D14AC109D29A08D80E92D4D0DCAEB0B");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'C278F34A021D7A9AD13BE860608751874F21C00C',
'FK_6292B05AE4EFCFFAE3343B626AA0E854181DC8E0',
- 'ALTER TABLE ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD CONSTRAINT "FK_6292B05AE4EFCFFAE3343B626AA0E854181DC8E0" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES ties_data."83C555BD948277E4A7C99698690BF800604C0603" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD CONSTRAINT "FK_6292B05AE4EFCFFAE3343B626AA0E854181DC8E0" FOREIGN KEY ("REL_FK_used-antennaCapability") REFERENCES teiv_data."83C555BD948277E4A7C99698690BF800604C0603" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'C278F34A021D7A9AD13BE860608751874F21C00C',
'UNIQUE_8BA54615B1C74692F55B5335A230309881FF9BF8',
- 'ALTER TABLE ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD CONSTRAINT "UNIQUE_8BA54615B1C74692F55B5335A230309881FF9BF8" UNIQUE ("REL_ID_1C61FC18067350DB393AFDB5270E9DE1F5151C64");'
+ 'ALTER TABLE teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" ADD CONSTRAINT "UNIQUE_8BA54615B1C74692F55B5335A230309881FF9BF8" UNIQUE ("REL_ID_1C61FC18067350DB393AFDB5270E9DE1F5151C64");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CE18CE5B725879B4016F5C281D80D37A95EA7E28',
'FK_B44561B5980FFD16E1386AEA3192A2612C96D738',
- 'ALTER TABLE ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD CONSTRAINT "FK_B44561B5980FFD16E1386AEA3192A2612C96D738" FOREIGN KEY ("aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C") REFERENCES ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD CONSTRAINT "FK_B44561B5980FFD16E1386AEA3192A2612C96D738" FOREIGN KEY ("aSide_2A2D3374BF907674FA1905478E30ACB8882DC03C") REFERENCES teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'CE18CE5B725879B4016F5C281D80D37A95EA7E28',
'FK_5DD6B84381C61E614924591CA5F01C4169700280',
- 'ALTER TABLE ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD CONSTRAINT "FK_5DD6B84381C61E614924591CA5F01C4169700280" FOREIGN KEY ("bSide_E8A97B8133D74D3BE65119E868FAC0BE63C09FFC") REFERENCES ties_data."83C555BD948277E4A7C99698690BF800604C0603" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" ADD CONSTRAINT "FK_5DD6B84381C61E614924591CA5F01C4169700280" FOREIGN KEY ("bSide_E8A97B8133D74D3BE65119E868FAC0BE63C09FFC") REFERENCES teiv_data."83C555BD948277E4A7C99698690BF800604C0603" (id) ON DELETE CASCADE;'
);
-CREATE INDEX IF NOT EXISTS "IDX_A431A290E4A5C18874FE31117537BB03F86A4BE1" ON ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A431A290E4A5C18874FE31117537BB03F86A4BE1" ON teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_65CAD728629B6E4501E261A44FA4551A3C29FF7E" ON ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_65CAD728629B6E4501E261A44FA4551A3C29FF7E" ON teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B38A3DE6633390FD5D88720054D2659A52D9E5D9" ON ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_B38A3DE6633390FD5D88720054D2659A52D9E5D9" ON teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_DF65ACAC403E061AF151ECC6E1A0B5251A57663A" ON ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DF65ACAC403E061AF151ECC6E1A0B5251A57663A" ON teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_FC784BD0FA3BEBD9F5C8333C558B7A0BE874E9B4" ON ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FC784BD0FA3BEBD9F5C8333C558B7A0BE874E9B4" ON teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_9B2B02F454ADC81B20DF50A78854FDDAE1E07781" ON ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_9B2B02F454ADC81B20DF50A78854FDDAE1E07781" ON teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_A784A72DDC0B6161C3C40CC809908B28CBA3586C" ON ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN (("REL_CD_1F61FA6DDAECE90540F9880F2A98037B1530A5A4"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A784A72DDC0B6161C3C40CC809908B28CBA3586C" ON teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN (("REL_CD_1F61FA6DDAECE90540F9880F2A98037B1530A5A4"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_411D5CAD37663D02499EB24445A21693A234FFDE" ON ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN (("REL_CD_E388983F3E6BFAD67CA100F0AFCF8CD3E9B89ADD"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_411D5CAD37663D02499EB24445A21693A234FFDE" ON teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN (("REL_CD_E388983F3E6BFAD67CA100F0AFCF8CD3E9B89ADD"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_B0FFEC36366A5E403AADCA0B9DCEB13F511B226F" ON ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN ("REL_CD_EF3979E9DAF31B7949C883654633E633B9D35B92");
+CREATE INDEX IF NOT EXISTS "IDX_B0FFEC36366A5E403AADCA0B9DCEB13F511B226F" ON teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38" USING GIN ("REL_CD_EF3979E9DAF31B7949C883654633E633B9D35B92");
-CREATE INDEX IF NOT EXISTS "IDX_9375E42087BDE5DF649B8F30DA3DEE96D07C863C" ON ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_9375E42087BDE5DF649B8F30DA3DEE96D07C863C" ON teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" USING GIN (("antennaBeamWidth"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_822F9AB2F47067FDB88F9C322BC6A2B3B6C947B9" ON ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_822F9AB2F47067FDB88F9C322BC6A2B3B6C947B9" ON teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_FF1E0F629EA6972551FCE6D99834A31FE5A7FB10" ON ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FF1E0F629EA6972551FCE6D99834A31FE5A7FB10" ON teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_734E3F8FAD3A1B010D7E2095EA1357D4CEABD249" ON ties_data."53017288F3FE983848689A3DD21D48D298CCD23E" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_734E3F8FAD3A1B010D7E2095EA1357D4CEABD249" ON teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_629B2C2E73E2B5BF5BB31BB816EE0597484360CD" ON ties_data."53089669D370B15C78B7E8376D434921D1C94240" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_629B2C2E73E2B5BF5BB31BB816EE0597484360CD" ON teiv_data."53089669D370B15C78B7E8376D434921D1C94240" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2B2F5C1C9635A1AF418B85A486601087C420E8F9" ON ties_data."53089669D370B15C78B7E8376D434921D1C94240" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_2B2F5C1C9635A1AF418B85A486601087C420E8F9" ON teiv_data."53089669D370B15C78B7E8376D434921D1C94240" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_0A8C3B8A6C6FC1C4C60C47C3996F65D200F2CDAC" ON ties_data."53089669D370B15C78B7E8376D434921D1C94240" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_0A8C3B8A6C6FC1C4C60C47C3996F65D200F2CDAC" ON teiv_data."53089669D370B15C78B7E8376D434921D1C94240" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_7DACD641D4ED26579A7D8F94C74447B19D067ECD" ON ties_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_7DACD641D4ED26579A7D8F94C74447B19D067ECD" ON teiv_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("eUtranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_BC63EFD4857126FFC64E88F6136B85CA31E2A0EB" ON ties_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_BC63EFD4857126FFC64E88F6136B85CA31E2A0EB" ON teiv_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("geranFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_E754CEE6CB27BA7BE1ECB90F717B2C241381B00F" ON ties_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E754CEE6CB27BA7BE1ECB90F717B2C241381B00F" ON teiv_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("nRFqBands"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_337B9980AA0401C715A372CF8615E73F826B9DAE" ON ties_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_337B9980AA0401C715A372CF8615E73F826B9DAE" ON teiv_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DD78610CF631FE9F7AEB4068C0A4D8A40234DB31" ON ties_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_DD78610CF631FE9F7AEB4068C0A4D8A40234DB31" ON teiv_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_572A048D2B70E8CE7B919179CE285264951E6057" ON ties_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_572A048D2B70E8CE7B919179CE285264951E6057" ON teiv_data."83C555BD948277E4A7C99698690BF800604C0603" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_5AEF72C5C2C83452A1BC8535E3EFF6E2AC9F4E02" ON ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_5AEF72C5C2C83452A1BC8535E3EFF6E2AC9F4E02" ON teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_941E47F8B0E1F353F356F09A7D4EED3670560681" ON ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_941E47F8B0E1F353F356F09A7D4EED3670560681" ON teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_C6135512BCBC5F91EAD1D324759ADD1B88901FE9" ON ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_C6135512BCBC5F91EAD1D324759ADD1B88901FE9" ON teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_BF805D12F8B66196DC7513960E3872DCFCCCA31E" ON ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN (("REL_CD_32FFD9EF85AB2342E652FA493C3BF34D9BAAF054"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_BF805D12F8B66196DC7513960E3872DCFCCCA31E" ON teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN (("REL_CD_32FFD9EF85AB2342E652FA493C3BF34D9BAAF054"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_8A9B70E4E83E34700456A8395E18BE2F7E793F20" ON ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN (("REL_CD_B614AAA814176BC7128CE9D72C0950C4D6DE8052"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8A9B70E4E83E34700456A8395E18BE2F7E793F20" ON teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN (("REL_CD_B614AAA814176BC7128CE9D72C0950C4D6DE8052"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_6BEF4595F68DF48B662E68003C784CD6D944087B" ON ties_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN ("REL_CD_0AC0D382E4274681870EC7319460192F4F603001");
+CREATE INDEX IF NOT EXISTS "IDX_6BEF4595F68DF48B662E68003C784CD6D944087B" ON teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3" USING GIN ("REL_CD_0AC0D382E4274681870EC7319460192F4F603001");
-CREATE INDEX IF NOT EXISTS "IDX_E1ACC551BE0D4D70B82C930C793C0C3751006444" ON ties_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN ("dUpLMNId");
+CREATE INDEX IF NOT EXISTS "IDX_E1ACC551BE0D4D70B82C930C793C0C3751006444" ON teiv_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN ("dUpLMNId");
-CREATE INDEX IF NOT EXISTS "IDX_8F11B2E5857B19A3F9FB339F4DFB139751097100" ON ties_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_8F11B2E5857B19A3F9FB339F4DFB139751097100" ON teiv_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_AA040BB82CC5AD00E57E39F729D6AB3DF6CCA9F8" ON ties_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_AA040BB82CC5AD00E57E39F729D6AB3DF6CCA9F8" ON teiv_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_98DD6CE7BB866A4EA737CE96FF985936134D39C5" ON ties_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_98DD6CE7BB866A4EA737CE96FF985936134D39C5" ON teiv_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_0648B3E68F701DC7FDC41A87DE0D79FB167AFB78" ON ties_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN (("REL_CD_45E8E8693B1B8928376EAA8995D08AA7B1E483BD"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_0648B3E68F701DC7FDC41A87DE0D79FB167AFB78" ON teiv_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN (("REL_CD_45E8E8693B1B8928376EAA8995D08AA7B1E483BD"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_FF9E656D3D0CB257F97FDDCB728E7637783C889B" ON ties_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN (("REL_CD_7E9F11EFBF8974D7C7DAB02E181A0BE4148091C6"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_FF9E656D3D0CB257F97FDDCB728E7637783C889B" ON teiv_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN (("REL_CD_7E9F11EFBF8974D7C7DAB02E181A0BE4148091C6"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_DED8DFAF8F597276CAA4680444C6A069A0570510" ON ties_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN ("REL_CD_FFF7E036187A7605BFC714483D2E60FD2FF6560B");
+CREATE INDEX IF NOT EXISTS "IDX_DED8DFAF8F597276CAA4680444C6A069A0570510" ON teiv_data."9759D655D5978786B3284FE8057D912192AEB550" USING GIN ("REL_CD_FFF7E036187A7605BFC714483D2E60FD2FF6560B");
-CREATE INDEX IF NOT EXISTS "IDX_389F565ED970F5EB2FAC8A94766B2A60E5DEB022" ON ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_389F565ED970F5EB2FAC8A94766B2A60E5DEB022" ON teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_2888BA890DB44CD93287CAAF0695047CF39B736B" ON ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_2888BA890DB44CD93287CAAF0695047CF39B736B" ON teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_C65D145DDF1B1222AB4DFF08B0F504605F3E8468" ON ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_C65D145DDF1B1222AB4DFF08B0F504605F3E8468" ON teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN ("CD_decorators");
-CREATE INDEX IF NOT EXISTS "IDX_839D67DA1D3875780CA8C2EC7DFD39C4F0A7D666" ON ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN (("REL_CD_8D8BBB53FB18E8E9A5D241B66DA18CB5DDE9C1A5"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_839D67DA1D3875780CA8C2EC7DFD39C4F0A7D666" ON teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN (("REL_CD_8D8BBB53FB18E8E9A5D241B66DA18CB5DDE9C1A5"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A3CD76C492D00CAAE49571191E3270D53FA818EE" ON ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN (("REL_CD_68C234330FD6388836D0DAF9DFD0A40DE66DD8C5"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_A3CD76C492D00CAAE49571191E3270D53FA818EE" ON teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN (("REL_CD_68C234330FD6388836D0DAF9DFD0A40DE66DD8C5"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_8D9A8B3F7A4B33D0D985B1F13D210F71277AACBC" ON ties_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN ("REL_CD_A14923FFF9D13FEB18087CE2A9C0BD264C572CFC");
+CREATE INDEX IF NOT EXISTS "IDX_8D9A8B3F7A4B33D0D985B1F13D210F71277AACBC" ON teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C" USING GIN ("REL_CD_A14923FFF9D13FEB18087CE2A9C0BD264C572CFC");
-CREATE INDEX IF NOT EXISTS "IDX_E61FF1756D360B904A01B032904F380F9D4A8650" ON ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_E61FF1756D360B904A01B032904F380F9D4A8650" ON teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" USING GIN (("CD_sourceIds"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_AF0E12037BDEE1B45F3F902B29E0823D713DBB06" ON ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
+CREATE INDEX IF NOT EXISTS "IDX_AF0E12037BDEE1B45F3F902B29E0823D713DBB06" ON teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" USING GIN (("CD_classifiers"::TEXT) gin_trgm_ops);
-CREATE INDEX IF NOT EXISTS "IDX_A2E437FF2DD6096051A873525763FD9EF7709350" ON ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" USING GIN ("CD_decorators");
+CREATE INDEX IF NOT EXISTS "IDX_A2E437FF2DD6096051A873525763FD9EF7709350" ON teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28" USING GIN ("CD_decorators");
-ANALYZE ties_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28";
+ANALYZE teiv_data."CE18CE5B725879B4016F5C281D80D37A95EA7E28";
-ANALYZE ties_data."9759D655D5978786B3284FE8057D912192AEB550";
+ANALYZE teiv_data."9759D655D5978786B3284FE8057D912192AEB550";
-ANALYZE ties_data."53089669D370B15C78B7E8376D434921D1C94240";
+ANALYZE teiv_data."53089669D370B15C78B7E8376D434921D1C94240";
-ANALYZE ties_data."84E676149362F50C55FE1E004B98D4891916BBF3";
+ANALYZE teiv_data."84E676149362F50C55FE1E004B98D4891916BBF3";
-ANALYZE ties_data."C278F34A021D7A9AD13BE860608751874F21C00C";
+ANALYZE teiv_data."C278F34A021D7A9AD13BE860608751874F21C00C";
-ANALYZE ties_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38";
+ANALYZE teiv_data."28C9A375E800E82308EBE7DA2932EF2C0AF13C38";
-ANALYZE ties_data."83C555BD948277E4A7C99698690BF800604C0603";
+ANALYZE teiv_data."83C555BD948277E4A7C99698690BF800604C0603";
-ANALYZE ties_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919";
+ANALYZE teiv_data."235E984E81B76ADCCFA68BDE09D3BBE49A355919";
-ANALYZE ties_data."53017288F3FE983848689A3DD21D48D298CCD23E";
+ANALYZE teiv_data."53017288F3FE983848689A3DD21D48D298CCD23E";
COMMIT;
\ No newline at end of file
BEGIN;
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
FK_o-ran-smo-teiv-equipment_ANTENNAMODULEEEEEEEEEEEE_DEPLOYED_ON_ANTENNAMODULEEEEEEEEEEEEEEE_aSide_AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee FK_2E4BCE7E3E19C851F14B87EF1BB00F7C918B5DCF CONSTRAINT
FK_o-ran-smo-teiv-equipment_ANTENNAMODULEEEEEEEEEEEE_DEPLOYED_ON_ANTENNAMODULEEEEEEEEEEEEEEE_bSide_AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee FK_7762EA35111FA62ED7E064A70380C8E12F050F28 CONSTRAINT
FK_o-ran-smo-teiv-equipment_ANTENNAMODULEEEEEEEEEEEE_REALISED_BY_ANTENNAMODULEEEEEEEEEEEEEEE_aSide_AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee FK_EAB359DF1FC9806007FD44BF435DE5711915589A CONSTRAINT
REL_CD_classifiers_MANAGEDELEMENTTTTTTTTTTTTTTT_MANAGES_ODUFUNCTIONNNNNNNNNNNNNNN REL_CD_7E9F11EFBF8974D7C7DAB02E181A0BE4148091C6 COLUMN
REL_metadata_MANAGEDELEMENTTTTTTTTTTTTTTT_MANAGES_ODUFUNCTIONNNNNNNNNNNNNNN REL_metadata_7E9F11EFBF8974D7C7DAB02E181A0BE4148091DE COLUMN
REL_CD_classifiers_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU REL_CD_E388983F3E6BFAD67CA100F0AFCF8CD3E9B89ADD COLUMN
-REL_metadata_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU REL_metadata_780D8ABEAC14A0B2ET73FC4EB093C446F7CD3E56 COLUMN
+REL_metadata_ManagedElementttttttttttttttttt_USES_NRCellDUUUUUUUUUUUU REL_metadata_C9E09FBCCBA1F6A3252B71B869B269EF28AACDFB COLUMN
REL_CD_decorators_ODUFUNCTIONNNNNNNNNNNNNNNNN_PROVIDES_NRCELLDUUUUUUUUUUUUUUUUUU REL_CD_0AC0D382E4274681870EC7319460192F4F603001 COLUMN
REL_CD_decorators_LTESECTORCARRIERRRRRRRRRRRRRRRRRRRRR_USES_ANTENNACAPABILITYYYYYYYYYYYYYYY REL_CD_A14923FFF9D13FEB18087CE2A9C0BD264C572CFC COLUMN
REL_CD_decorators_MANAGEDELEMENTTTTTTTTTTTTTTT_MANAGES_ODUFUNCTIONNNNNNNNNNNNNNN REL_CD_FFF7E036187A7605BFC714483D2E60FD2FF6560B COLUMN
o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULEEEEEEEEEEEEEEEEEEEE_SERVES_ANTENNACAPABILITYYYYYYYYYYYYYYYYYY CE18CE5B725879B4016F5C281D80D37A95EA7E28 TABLE
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName") FROM stdin;
o-ran-smo-teiv-equipment_AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee o-ran-smo-teiv-equipment
o-ran-smo-teiv-oam_ManagedElementtttttttttttttttttttttttttttttttttttttttttttttttttt ManagedElementtttttttttttttttttttttttttttttttttttttttttttttttttt o-ran-smo-teiv-oam
o-ran-smo-teiv-ran_AntennaCapabilityyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy AntennaCapabilityyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy o-ran-smo-teiv-ran
o-ran-smo-teiv-ran_NRCellDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU NRCellDUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU o-ran-smo-teiv-ran
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
ANTENNAMODULEEEEEEEEEEEEEEEEEEEE_SERVES_ANTENNACAPABILITYYYYYYYYYYYYYYYYYY serviced-antennaCapability AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee o-ran-smo-teiv-equipment 0 9223372036854775807 serving-antennaModule AntennaCapabilityyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-rel-equipment-ran_ANTENNAMODULEEEEEEEEEEEEEEEEEEEE_SERVES_ANTENNACAPABILITYYYYYYYYYYYYYYYYYY o-ran-smo-teiv-rel-equipment-ran
ANTENNAMODULEEEEEEEEEEEE_DEPLOYED_ON_ANTENNAMODULEEEEEEEEEEEEEEE deployed-on-antennaModule AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee o-ran-smo-teiv-equipment 0 1 deployed-antennaModule AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee o-ran-smo-teiv-equipment 0 9223372036854775807 BI_DIRECTIONAL true RELATION o-ran-smo-teiv-equipment_ANTENNAMODULEEEEEEEEEEEE_DEPLOYED_ON_ANTENNAMODULEEEEEEEEEEEEEEE o-ran-smo-teiv-equipment
ANTENNAMODULEEEEEEEEEEEE_REALISED_BY_ANTENNAMODULEEEEEEEEEEEEEEE realised-by-antennaModule AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee o-ran-smo-teiv-equipment 0 1 realised-antennaModule AntennaModuleeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee o-ran-smo-teiv-equipment 0 1 BI_DIRECTIONAL true RELATION o-ran-smo-teiv-equipment_ANTENNAMODULEEEEEEEEEEEE_REALISED_BY_ANTENNAMODULEEEEEEEEEEEEEEE o-ran-smo-teiv-equipment
BEGIN;
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
FK_test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_aSide_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters FK_2A5C84A2226EE0FCAAA513CC5AF4CD78DDDAF49F CONSTRAINT
FK_test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_bSide_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters FK_FBFE10B6F165A8EC2086B8DEAFA238E0DD6643F5 CONSTRAINT
FK_test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_aSide_EntityTypeA FK_2839E6FFDF7F3DF2687DAC3E57082AD6B22E9B30 CONSTRAINT
test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters 10B9F515756871D3EF6558FAF1F112BAE207945D TABLE
\.
-COPY ties_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
+COPY teiv_model.module_reference("name", "namespace", "domain", "includedModules", "revision", "content") FROM stdin;
test-existing-rapp-module \N \N [] 2024-05-02 dGVzdA==
test-module-for-deletion \N \N [] 2024-05-02 dGVzdA==
test-module-in-deleting-state \N \N [] 2024-05-02 dGVzdA==
test-built-in-module test-built-in-namespace TEST [] 2024-05-24 bW9kdWxlIHRlc3QtYnVpbHQtaW4tbW9kdWxlIHsKICAgIHlhbmctdmVyc2lvbiAxLjE7CiAgICBuYW1lc3BhY2UgInRlc3QtYnVpbHQtaW4tbmFtZXNwYWNlIjsKCiAgICBpbXBvcnQgby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMgeyBwcmVmaXggb3ItdGVpdi10eXBlczsgfQoKICAgIGltcG9ydCBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy1leHRlbnNpb25zIHsgcHJlZml4IG9yLXRlaXYteWV4dDsgfQoKICAgIGltcG9ydCBfM2dwcC1jb21tb24teWFuZy10eXBlcyB7IHByZWZpeCB0eXBlczNncHA7IH0KCiAgICBpbXBvcnQgaWV0Zi1nZW8tbG9jYXRpb24gewogICAgICAgIHByZWZpeCBnZW87CiAgICAgICAgcmVmZXJlbmNlICJSRkMgOTE3OTogQSBZQU5HIEdyb3VwaW5nIGZvciBHZW9ncmFwaGljIExvY2F0aW9ucyI7CiAgICB9CgogICAgb3JnYW5pemF0aW9uICJFcmljc3NvbiBBQiI7CiAgICBjb250YWN0ICJFcmljc3NvbiBmaXJzdCBsaW5lIHN1cHBvcnQgdmlhIGVtYWlsIjsKICAgIGRlc2NyaXB0aW9uCiAgICAiVGVzdCB0b3BvbG9neSBtb2RlbC4iOwoKICAgIHJldmlzaW9uICIyMDI0LTA4LTIwIiB7CiAgICAgICAgZGVzY3JpcHRpb24gIkluaXRpYWwgcmV2aXNpb24uIjsKICAgICAgICBvci10ZWl2LXlleHQ6bGFiZWwgMC40LjA7CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmRvbWFpbiBURVNUOwoKICAgIGxpc3QgRW50aXR5VHlwZUEgewoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICB9CgogICAgbGlzdCBFbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBjb250YWluZXIgYXR0cmlidXRlcyB7CiAgICAgICAgICAgIGxlYWYgYXR0cmlidXRlQTFXaXRoQXR0cmlidXRlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgICAgICB0eXBlIHN0cmluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhdHRyaWJ1dGVBMldpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHR5cGUgdWludDMyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsZWFmIGF0dHJpYnV0ZUEzV2l0aEF0dHJpYnV0ZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICAgICAgdHlwZSBpbnQzMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZiBhdHRyaWJ1dGVBNFdpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHR5cGUgaW50NjQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxlYWYgYXR0cmlidXRlQTVXaXRoQXR0cmlidXRlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgICAgICB0eXBlIGRlY2ltYWw2NHsKICAgICAgICAgICAgICAgICAgICBmcmFjdGlvbi1kaWdpdHMgNjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuaXRzICJkZWdyZWVzIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbGVhZi1saXN0IGF0dHJpYnV0ZUE2V2l0aEF0dHJpYnV0ZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICAgICAgdHlwZSBzdHJpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGNvbnRhaW5lciBhdHRyaWJ1dGVBN1dpdGhBdHRyaWJ1dGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgICAgIHVzZXMgdHlwZXMzZ3BwOlBMTU5JZDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcy1vci10ZWl2LXR5cGVzIHsKICAgICAgICAgICAgdHlwZSBsZWFmcmVmIHsKICAgICAgICAgICAgICAgIHBhdGggIi9vci10ZWl2LXR5cGVzOnNvdXJjZUlkcyI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIkEgbGVhZi1saXN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgc291cmNlSWRzIGZyb20gby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMiOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX1VTRVNfRU5USVRZVFlQRUFXSVRIRU5USVRZVFlQRU5BTUVMRU5HVEhMT05HRVJUSEFOU0lYVFlUSFJFRUNIQVJBQ1RFUlMgeyAvLyAwLi4xIHRvIDAuLjEKCiAgICAgICAgdXNlcyBvci10ZWl2LXR5cGVzOlRvcF9HcnBfVHlwZTsKICAgICAgICBrZXkgaWQ7CgogICAgICAgIGxlYWYgdXNlZC1lbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFbnRpdHlUeXBlQTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQoKICAgICAgICBsZWFmIHVzZWQtYnktZW50aXR5VHlwZUEgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcy1vci10ZWl2LXR5cGVzIHsKICAgICAgICAgICAgdHlwZSBsZWFmcmVmIHsKICAgICAgICAgICAgICAgIHBhdGggIi9vci10ZWl2LXR5cGVzOnNvdXJjZUlkcyI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIkEgbGVhZi1saXN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgc291cmNlSWRzIGZyb20gby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMiOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX1BST1ZJREVTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4uMSB0byAwLi5uCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmLWxpc3QgcHJvdmlkZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUE7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZiBwcm92aWRlZC1ieS1lbnRpdHlUeXBlQSB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDpiU2lkZSBFbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVyczsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQoKICAgICAgICBsZWFmLWxpc3Qgc291cmNlSWRzLW9yLXRlaXYtdHlwZXMgewogICAgICAgICAgICB0eXBlIGxlYWZyZWYgewogICAgICAgICAgICAgICAgcGF0aCAiL29yLXRlaXYtdHlwZXM6c291cmNlSWRzIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXNjcmlwdGlvbiAiQSBsZWFmLWxpc3QgdGhhdCByZWZlcmVuY2VzIHRoZSBzb3VyY2VJZHMgZnJvbSBvLXJhbi1zbW8tdGVpdi1jb21tb24teWFuZy10eXBlcyI7CiAgICAgICAgfQogICAgfQoKICAgIG9yLXRlaXYteWV4dDpiaURpcmVjdGlvbmFsVG9wb2xvZ3lSZWxhdGlvbnNoaXAgRU5USVRZVFlQRUFfR1JPVVBTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4ubiB0byAwLi4xCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIGdyb3VwZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUE7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IGdyb3VwZWQtYnktZW50aXR5VHlwZUEgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YlNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZi1saXN0IHNvdXJjZUlkcy1vci10ZWl2LXR5cGVzIHsKICAgICAgICAgICAgdHlwZSBsZWFmcmVmIHsKICAgICAgICAgICAgICAgIHBhdGggIi9vci10ZWl2LXR5cGVzOnNvdXJjZUlkcyI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGVzY3JpcHRpb24gIkEgbGVhZi1saXN0IHRoYXQgcmVmZXJlbmNlcyB0aGUgc291cmNlSWRzIGZyb20gby1yYW4tc21vLXRlaXYtY29tbW9uLXlhbmctdHlwZXMiOwogICAgICAgIH0KICAgIH0KCiAgICBvci10ZWl2LXlleHQ6YmlEaXJlY3Rpb25hbFRvcG9sb2d5UmVsYXRpb25zaGlwIEVOVElUWVRZUEVBX0lOU1RBTExFRF9BVF9FTlRJVFlUWVBFQVdJVEhFTlRJVFlUWVBFTkFNRUxFTkdUSExPTkdFUlRIQU5TSVhUWVRIUkVFQ0hBUkFDVEVSUyB7IC8vIDAuLm4gdG8gMC4ubQoKICAgICAgICB1c2VzIG9yLXRlaXYtdHlwZXM6VG9wX0dycF9UeXBlOwogICAgICAgIGtleSBpZDsKCiAgICAgICAgbGVhZi1saXN0IGluc3RhbGxlZC1hdC1lbnRpdHlUeXBlQVdpdGhFbnRpdHlUeXBlTmFtZUxlbmd0aExvbmdlclRoYW5TaXh0eVRocmVlQ2hhcmFjdGVycyB7CiAgICAgICAgICAgIG9yLXRlaXYteWV4dDphU2lkZSBFbnRpdHlUeXBlQTsKICAgICAgICAgICAgdHlwZSBpbnN0YW5jZS1pZGVudGlmaWVyOwogICAgICAgfQoKICAgICAgICBsZWFmLWxpc3QgaW5zdGFsbGVkLWVudGl0eVR5cGVBIHsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzb3VyY2VJZHMtb3ItdGVpdi10eXBlcyB7CiAgICAgICAgICAgIHR5cGUgbGVhZnJlZiB7CiAgICAgICAgICAgICAgICBwYXRoICIvb3ItdGVpdi10eXBlczpzb3VyY2VJZHMiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBIGxlYWYtbGlzdCB0aGF0IHJlZmVyZW5jZXMgdGhlIHNvdXJjZUlkcyBmcm9tIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIjsKICAgICAgICB9CiAgICB9CgogICAgb3ItdGVpdi15ZXh0OmJpRGlyZWN0aW9uYWxUb3BvbG9neVJlbGF0aW9uc2hpcCBFTlRJVFlUWVBFQVdJVEhFTlRJVFlUWVBFTkFNRUxFTkdUSExPTkdFUlRIQU5TSVhUWVRIUkVFQ0hBUkFDVEVSU19VU0VTX0VOVElUWVRZUEVBV0lUSEVOVElUWVRZUEVOQU1FTEVOR1RITE9OR0VSVEhBTlNJWFRZVEhSRUVDSEFSQUNURVJTIHsgLy8gMC4uMSB0byAwLi4xCgogICAgICAgIHVzZXMgb3ItdGVpdi10eXBlczpUb3BfR3JwX1R5cGU7CiAgICAgICAga2V5IGlkOwoKICAgICAgICBsZWFmIHVzZWQtZW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnMgewogICAgICAgICAgICBvci10ZWl2LXlleHQ6YVNpZGUgRW50aXR5VHlwZUFXaXRoRW50aXR5VHlwZU5hbWVMZW5ndGhMb25nZXJUaGFuU2l4dHlUaHJlZUNoYXJhY3RlcnM7CiAgICAgICAgICAgIHR5cGUgaW5zdGFuY2UtaWRlbnRpZmllcjsKICAgICAgIH0KCiAgICAgICAgbGVhZiB1c2VkLWJ5LWVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzIHsKICAgICAgICAgICAgb3ItdGVpdi15ZXh0OmJTaWRlIEVudGl0eVR5cGVBV2l0aEVudGl0eVR5cGVOYW1lTGVuZ3RoTG9uZ2VyVGhhblNpeHR5VGhyZWVDaGFyYWN0ZXJzOwogICAgICAgICAgICB0eXBlIGluc3RhbmNlLWlkZW50aWZpZXI7CiAgICAgICB9CgogICAgICAgIGxlYWYtbGlzdCBzb3VyY2VJZHMtb3ItdGVpdi10eXBlcyB7CiAgICAgICAgICAgIHR5cGUgbGVhZnJlZiB7CiAgICAgICAgICAgICAgICBwYXRoICIvb3ItdGVpdi10eXBlczpzb3VyY2VJZHMiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlc2NyaXB0aW9uICJBIGxlYWYtbGlzdCB0aGF0IHJlZmVyZW5jZXMgdGhlIHNvdXJjZUlkcyBmcm9tIG8tcmFuLXNtby10ZWl2LWNvbW1vbi15YW5nLXR5cGVzIjsKICAgICAgICB9CiAgICB9Cn0=
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName", "attributeNames") FROM stdin;
test-built-in-module_EntityTypeA EntityTypeA test-built-in-module []
test-built-in-module_EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters test-built-in-module ["attributeA1WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA2WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA3WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA4WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA5WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA6WithAttributeNameLengthLongerThanSixtyThreeCharacters", "attributeA7WithAttributeNameLengthLongerThanSixtyThreeCharacters"]
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS used-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters test-built-in-module 0 1 used-by-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters test-built-in-module 0 1 BI_DIRECTIONAL true RELATION test-built-in-module_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS_USES_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS test-built-in-module
ENTITYTYPEA_GROUPS_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS grouped-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters EntityTypeA test-built-in-module 0 9223372036854775807 grouped-by-entityTypeA EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters test-built-in-module 0 1 BI_DIRECTIONAL false A_SIDE test-built-in-module_EntityTypeA test-built-in-module
ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS installed-at-entityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters EntityTypeA test-built-in-module 0 9223372036854775807 installed-entityTypeA EntityTypeAWithEntityTypeNameLengthLongerThanSixtyThreeCharacters test-built-in-module 0 9223372036854775807 BI_DIRECTIONAL false RELATION test-built-in-module_ENTITYTYPEA_INSTALLED_AT_ENTITYTYPEAWITHENTITYTYPENAMELENGTHLONGERTHANSIXTYTHREECHARACTERS test-built-in-module
BEGIN;
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" (
"id" VARCHAR(511),
"aSide_TestEntityA" VARCHAR(511),
"bSide_TestEntityB" VARCHAR(511),
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" (
"id" VARCHAR(511),
"aSide_TestEntityA" VARCHAR(511),
"bSide_TestEntityB" VARCHAR(511),
"metadata" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_TestEntityA" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_TestEntityA" (
"id" VARCHAR(511),
"CD_sourceIds" jsonb,
"CD_classifiers" jsonb,
"attribute1" TEXT
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityA" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityA" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityA" ALTER COLUMN "metadata" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityA" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityA" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityA" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityA" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityA" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityA" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityA" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-CREATE TABLE IF NOT EXISTS ties_data."o-ran-smo-teiv-ran_TestEntityB" (
+CREATE TABLE IF NOT EXISTS teiv_data."o-ran-smo-teiv-ran_TestEntityB" (
"id" VARCHAR(511),
"CD_sourceIds" jsonb,
"CD_classifiers" jsonb,
"REL_metadata_TESTENTITYA_USES_TESTENTITYB" jsonb
);
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ADD COLUMN IF NOT EXISTS "updated_time" TIMESTAMPTZ;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ADD COLUMN IF NOT EXISTS "REL_updated_time_TESTENTITYA_USES_TESTENTITYB" TIMESTAMPTZ;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "metadata" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ADD COLUMN IF NOT EXISTS "REL_metadata_TESTENTITYA_USES_TESTENTITYB" jsonb;
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "REL_CD_sourceIds_TESTENTITYA_USES_TESTENTITYB" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "REL_CD_classifiers_TESTENTITYA_USES_TESTENTITYB" SET DEFAULT '[]';
-ALTER TABLE ONLY ties_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "REL_CD_decorators_TESTENTITYA_USES_TESTENTITYB" SET DEFAULT '{}';
-
-SELECT ties_data.create_constraint_if_not_exists(
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityB" ADD COLUMN IF NOT EXISTS "metadata" jsonb;
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityB" ADD COLUMN IF NOT EXISTS "REL_metadata_TESTENTITYA_USES_TESTENTITYB" jsonb;
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "CD_sourceIds" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "CD_classifiers" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "CD_decorators" SET DEFAULT '{}';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "REL_CD_sourceIds_TESTENTITYA_USES_TESTENTITYB" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "REL_CD_classifiers_TESTENTITYA_USES_TESTENTITYB" SET DEFAULT '[]';
+ALTER TABLE ONLY teiv_data."o-ran-smo-teiv-ran_TestEntityB" ALTER COLUMN "REL_CD_decorators_TESTENTITYA_USES_TESTENTITYB" SET DEFAULT '{}';
+
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB',
'PK_TESTENTITYA_GROUPS_TESTENTITYB_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD CONSTRAINT "PK_TESTENTITYA_GROUPS_TESTENTITYB_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD CONSTRAINT "PK_TESTENTITYA_GROUPS_TESTENTITYB_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB',
'PK_TESTENTITYA_PROVIDES_TESTENTITYB_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD CONSTRAINT "PK_TESTENTITYA_PROVIDES_TESTENTITYB_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD CONSTRAINT "PK_TESTENTITYA_PROVIDES_TESTENTITYB_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TestEntityA',
'PK_TestEntityA_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TestEntityA" ADD CONSTRAINT "PK_TestEntityA_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TestEntityA" ADD CONSTRAINT "PK_TestEntityA_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TestEntityB',
'PK_TestEntityB_id',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TestEntityB" ADD CONSTRAINT "PK_TestEntityB_id" PRIMARY KEY ("id");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TestEntityB" ADD CONSTRAINT "PK_TestEntityB_id" PRIMARY KEY ("id");'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB',
'FK_TESTENTITYA_GROUPS_TESTENTITYB_aSide_TestEntityA',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD CONSTRAINT "FK_TESTENTITYA_GROUPS_TESTENTITYB_aSide_TestEntityA" FOREIGN KEY ("aSide_TestEntityA") REFERENCES ties_data."o-ran-smo-teiv-ran_TestEntityA" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD CONSTRAINT "FK_TESTENTITYA_GROUPS_TESTENTITYB_aSide_TestEntityA" FOREIGN KEY ("aSide_TestEntityA") REFERENCES teiv_data."o-ran-smo-teiv-ran_TestEntityA" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB',
'FK_TESTENTITYA_GROUPS_TESTENTITYB_bSide_TestEntityB',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD CONSTRAINT "FK_TESTENTITYA_GROUPS_TESTENTITYB_bSide_TestEntityB" FOREIGN KEY ("bSide_TestEntityB") REFERENCES ties_data."o-ran-smo-teiv-ran_TestEntityB" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB" ADD CONSTRAINT "FK_TESTENTITYA_GROUPS_TESTENTITYB_bSide_TestEntityB" FOREIGN KEY ("bSide_TestEntityB") REFERENCES teiv_data."o-ran-smo-teiv-ran_TestEntityB" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB',
'FK_TESTENTITYA_PROVIDES_TESTENTITYB_aSide_TestEntityA',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD CONSTRAINT "FK_TESTENTITYA_PROVIDES_TESTENTITYB_aSide_TestEntityA" FOREIGN KEY ("aSide_TestEntityA") REFERENCES ties_data."o-ran-smo-teiv-ran_TestEntityA" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD CONSTRAINT "FK_TESTENTITYA_PROVIDES_TESTENTITYB_aSide_TestEntityA" FOREIGN KEY ("aSide_TestEntityA") REFERENCES teiv_data."o-ran-smo-teiv-ran_TestEntityA" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB',
'FK_TESTENTITYA_PROVIDES_TESTENTITYB_bSide_TestEntityB',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD CONSTRAINT "FK_TESTENTITYA_PROVIDES_TESTENTITYB_bSide_TestEntityB" FOREIGN KEY ("bSide_TestEntityB") REFERENCES ties_data."o-ran-smo-teiv-ran_TestEntityB" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB" ADD CONSTRAINT "FK_TESTENTITYA_PROVIDES_TESTENTITYB_bSide_TestEntityB" FOREIGN KEY ("bSide_TestEntityB") REFERENCES teiv_data."o-ran-smo-teiv-ran_TestEntityB" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TestEntityB',
'FK_TestEntityB_REL_FK_used-by-testEntityA',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TestEntityB" ADD CONSTRAINT "FK_TestEntityB_REL_FK_used-by-testEntityA" FOREIGN KEY ("REL_FK_used-by-testEntityA") REFERENCES ties_data."o-ran-smo-teiv-ran_TestEntityA" (id) ON DELETE CASCADE;'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TestEntityB" ADD CONSTRAINT "FK_TestEntityB_REL_FK_used-by-testEntityA" FOREIGN KEY ("REL_FK_used-by-testEntityA") REFERENCES teiv_data."o-ran-smo-teiv-ran_TestEntityA" (id) ON DELETE CASCADE;'
);
-SELECT ties_data.create_constraint_if_not_exists(
+SELECT teiv_data.create_constraint_if_not_exists(
'o-ran-smo-teiv-ran_TestEntityB',
'UNIQUE_TestEntityB_REL_ID_TESTENTITYA_USES_TESTENTITYB',
- 'ALTER TABLE ties_data."o-ran-smo-teiv-ran_TestEntityB" ADD CONSTRAINT "UNIQUE_TestEntityB_REL_ID_TESTENTITYA_USES_TESTENTITYB" UNIQUE ("REL_ID_TESTENTITYA_USES_TESTENTITYB");'
+ 'ALTER TABLE teiv_data."o-ran-smo-teiv-ran_TestEntityB" ADD CONSTRAINT "UNIQUE_TestEntityB_REL_ID_TESTENTITYA_USES_TESTENTITYB" UNIQUE ("REL_ID_TESTENTITYA_USES_TESTENTITYB");'
);
COMMIT;
\ No newline at end of file
BEGIN;
-COPY ties_model.hash_info("name", "hashedValue", "type") FROM stdin;
+COPY teiv_model.hash_info("name", "hashedValue", "type") FROM stdin;
FK_TestEntityB_REL_FK_used-by-testEntityA FK_TestEntityB_REL_FK_used-by-testEntityA CONSTRAINT
UNIQUE_TestEntityB_REL_ID_TESTENTITYA_USES_TESTENTITYB UNIQUE_TestEntityB_REL_ID_TESTENTITYA_USES_TESTENTITYB CONSTRAINT
PK_TESTENTITYA_PROVIDES_TESTENTITYB_id PK_TESTENTITYA_PROVIDES_TESTENTITYB_id CONSTRAINT
REL_CD_decorators_TESTENTITYA_USES_TESTENTITYB REL_CD_decorators_TESTENTITYA_USES_TESTENTITYB COLUMN
\.
-COPY ties_model.entity_info("storedAt", "name", "moduleReferenceName") FROM stdin;
+COPY teiv_model.entity_info("storedAt", "name", "moduleReferenceName") FROM stdin;
o-ran-smo-teiv-ran_TestEntityB TestEntityB o-ran-smo-teiv-ran
o-ran-smo-teiv-ran_TestEntityA TestEntityA o-ran-smo-teiv-ran
\.
-COPY ties_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
+COPY teiv_model.relationship_info("name", "aSideAssociationName", "aSideMOType", "aSideModule", "aSideMinCardinality", "aSideMaxCardinality", "bSideAssociationName", "bSideMOType", "bSideModule", "bSideMinCardinality", "bSideMaxCardinality", "associationKind", "connectSameEntity", "relationshipDataLocation", "storedAt", "moduleReferenceName") FROM stdin;
TESTENTITYA_PROVIDES_TESTENTITYB provided-testEntityB TestEntityA o-ran-smo-teiv-ran 0 2 provided-by-testEntityA TestEntityB o-ran-smo-teiv-ran 0 3 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-ran_TESTENTITYA_PROVIDES_TESTENTITYB o-ran-smo-teiv-ran
TESTENTITYA_USES_TESTENTITYB used-TestEntityB TestEntityA o-ran-smo-teiv-ran 0 1 used-by-testEntityA TestEntityB o-ran-smo-teiv-ran 0 2 BI_DIRECTIONAL false B_SIDE o-ran-smo-teiv-ran_TestEntityB o-ran-smo-teiv-ran
TESTENTITYA_GROUPS_TESTENTITYB grouped-testEntityB TestEntityA o-ran-smo-teiv-ran 0 2 grouped-by-testEntityA TestEntityB o-ran-smo-teiv-ran 0 9223372036854775807 BI_DIRECTIONAL false RELATION o-ran-smo-teiv-ran_TESTENTITYA_GROUPS_TESTENTITYB o-ran-smo-teiv-ran
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
</execution>
</executions>
</plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <version>0.15</version>
+ <executions>
+ <execution>
+ <goals>
+ <goal>check</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
public class OranSmoTeivExtensionsTest extends YangTestCommon {
- protected static final String SMO_TIES_COMMON_YANG_EXT = "src/test/resources/_orig-modules/o-ran-smo-teiv-common-yang-extensions@2023-12-12.yang";
- protected static final String SMO_TIES_COMMON_YANG_TYPES = "src/test/resources/_orig-modules/o-ran-smo-teiv-common-yang-types@2023-12-12.yang";
+ protected static final String SMO_TEIV_COMMON_YANG_EXT = "src/test/resources/_orig-modules/o-ran-smo-teiv-common-yang-extensions@2023-12-12.yang";
+ protected static final String SMO_TEIV_COMMON_YANG_TYPES = "src/test/resources/_orig-modules/o-ran-smo-teiv-common-yang-types@2023-12-12.yang";
@Test
public void test_oran_extensions() {
parseAbsoluteImplementsYangModels(Arrays.asList(
- "src/test/resources/model-statements-oran/oran-smo-teiv-extension-test.yang", SMO_TIES_COMMON_YANG_EXT,
- SMO_TIES_COMMON_YANG_TYPES));
+ "src/test/resources/model-statements-oran/oran-smo-teiv-extension-test.yang", SMO_TEIV_COMMON_YANG_EXT,
+ SMO_TEIV_COMMON_YANG_TYPES));
final YModule module = getModule("oran-smo-teiv-extension-test");
assertTrue(module != null);
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2024 Ericsson
- * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
+ * Modifications Copyright (C) 2024-2025 OpenInfra Foundation Europe
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
}
}
- container ties-consumer-data {
- description "This container defines the TIES consumer-data. Consumer-data may be attached to Topology Entity or
+ container teiv-consumer-data {
+ description "This container defines the TEIV consumer-data. Consumer-data may be attached to Topology Entity or
Topology Relation instance, outside of the declared Topology Entity or Topology Relationship's attributes.
This container cannot be instantiated, and it MUST NOT be augmented or deviated in any way, unless stated
otherwise.";
leaf-list classifiers {
description "Consumer defined tags to topology entities and relationships. The ability to apply classifier is
- supported through TIES REST API";
+ supported through TEIV REST API";
type identityref { base classifier; }
}