merge from ecomp a88f0072 - Modern UI

Issue-ID: VID-378
Change-Id: Ibcb23dd27f550cf32ce2fe0239f0f496ae014ff6
Signed-off-by: Ittay Stern <ittay.stern@att.com>
diff --git a/vid-webpack-master/src/app/shared/api.service.ts b/vid-webpack-master/src/app/shared/api.service.ts
deleted file mode 100644
index a69d91e..0000000
--- a/vid-webpack-master/src/app/shared/api.service.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { Injectable } from '@angular/core';
-
-@Injectable()
-export class ApiService {
-  title = 'Angular 2';
-}
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html
new file mode 100644
index 0000000..1dad323
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.html
@@ -0,0 +1,92 @@
+<div class="modal fade" bsModal #auditInfoModal="bs-modal" [config]="{backdrop: 'static'}"
+     tabindex="-1" role="dialog" aria-labelledby="dialog-static-name">
+  <div id="audit-info-modal" class="">
+    <div class="modal-content">
+      <div class="modal-header">
+        <button type="button" class="close" (click)="onCancelClick()">&times;</button>
+        <span [attr.data-tests-id]="'audit-info-title'" class="modal-title">{{title}}</span>
+      </div>
+      <div class="modal-body row">
+        <div class="col-md-4 left-panel">
+          <div id="service-model-name" class="row">{{type | uppercase}} MODEL: <span>{{serviceModelName}}</span></div>
+          <div class="row service-model">
+            <model-information [modelInformationItems]="modelInfoItems"></model-information>
+          </div>
+        </div>
+        <div class="col-md-8 right-panel">
+            <div class="row" *ngIf="showVidStatus"><span class="table-title">VID status</span></div>
+            <div class="row" *ngIf="showVidStatus">
+              <table id="service-instantiation-audit-info-vid"  class="table table-bordered">
+                <thead class="thead-dark">
+                <tr class="row">
+                  <th class="col-md-4" scope="col">Status</th>
+                  <th class="col-md-4" scope="col">Status time</th>
+                  <th class="col-md-4" scope="col">Final</th>
+                </tr>
+                </thead>
+                <tbody>
+                <tr class="row" *ngFor="let data of vidInfoData">
+                  <td class="col-md-4" id="vidJobStatus" [attr.data-tests-id]="'vidJobStatus'">
+                    <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat"></custom-ellipsis>
+                  </td>
+                  <td class="col-md-4" id="vidStatusTime">
+                    <custom-ellipsis [id]="data?.vidCreated"
+                                     [value]="data?.createdDate | date:'MMM dd, yyyy HH:mm'"></custom-ellipsis>
+                  </td>
+                  <td class="col-md-4" id="vidFinalStatus">
+                    <custom-ellipsis [id]="data?.final"
+                                     [value]="data?.final ? 'Yes' : 'No'"></custom-ellipsis>
+                  </td>
+                </tr>
+                </tbody>
+              </table>
+              <div class="no-result" *ngIf="!isLoading && vidInfoData?.length == 0">There is no data.</div>
+            </div>
+
+            <div class="row">
+              <div class="col-md-6 leftColumn"><span class="table-title">MSO status</span></div>
+              <div class="col-md-6 rightColumn"><span><a id="glossary_link" target="_blank" href="#" (click)="onNavigate()">Building Block (BB) glossary</a></span></div>
+            </div>
+            <table id="service-instantiation-audit-info-mso" class="table table-bordered">
+              <thead class="thead-dark row">
+              <tr class="row">
+                <th scope="col" class="request-id">Request ID</th>
+                <th *ngIf="isAlaCarte&&isALaCarteFlagOn" id="instanceName" class="col-md-2" scope="col">Instance Name</th>
+                <th class="col-md-2" scope="col">Status</th>
+                <th class="col-md-2" scope="col">Status time</th>
+                <th class="col-md-2" scope="col">Additional info</th>
+              </tr>
+              </thead>
+              <tbody>
+              <tr class="row" *ngFor="let data of msoInfoData">
+                <td id="msoRequestId" class="request-id">
+                  <custom-ellipsis [id]="data?.requestId" [value]="data?.requestId"></custom-ellipsis>
+                </td>
+                <td *ngIf="isAlaCarte && isALaCarteFlagOn" class="msoInstanceName col-md-2">
+                  <custom-ellipsis [id]="data?.instanceName" [value]="data?.instanceType + ': ' + data?.instanceName"></custom-ellipsis>
+                </td>
+                <td class="col-md-2" id="msoJobStatus">
+                  <custom-ellipsis [id]="data?.jobStatus" [value]="data?.jobStatus | capitalizeAndFormat"></custom-ellipsis>
+                </td>
+                <td class="col-md-2" id="msoStatusTime">
+                  <custom-ellipsis [id]="data?.vidCreated"
+                                   [value]="data?.createdDate  | date:'MMM dd, yyyy HH:mm'"></custom-ellipsis>
+                </td>
+                <td class="col-md-2" id="msoAdditionalInfo">
+                  <custom-ellipsis [id]="data?.additionalInfo" [value]="data?.additionalInfo"></custom-ellipsis>
+                </td>
+              </tr>
+              </tbody>
+            </table>
+          <div class="no-result" *ngIf="!isLoading && msoInfoData?.length == 0">There is no data.</div>
+          </div>
+
+      </div>
+      <div class="modal-footer row">
+        <button style= "font-size: 12px" id="cancelButton" type="button" class="btn btn-default cancel" (click)="onCancelClick()">
+          Close
+        </button>
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss
new file mode 100644
index 0000000..f36b8b4
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.scss
@@ -0,0 +1,175 @@
+.templatebody.modal-open{
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000;
+  opacity: 0.5;
+}
+.modal{
+
+  #audit-info-modal {
+    .leftColumn {
+      padding-left: 0;
+    }
+
+    .rightColumn {
+      padding-right: 0;
+      text-align: right;
+    }
+    .modal-content{
+      border-radius: 0px;
+      border: none;
+      .modal-header{
+        background: #009FDB;
+        font-size: 24px;
+        color: #ffffff;
+        .close{
+          font-size: 32px;
+          font-weight: 200;
+          color: #ffffff;
+          text-shadow: none;
+          filter: none;
+          opacity: 1;
+          &:hover{
+            color: #d2d2d2;
+          }
+        }
+        .modal-title{
+
+        }
+      }
+      .modal-body{
+        padding: 0px;
+        margin: 0px;
+        display: flex;
+        .left-panel{
+          background: #f2f2f2;
+          border-right: 1px solid #D2D2D2;
+          padding-right: 0px;
+          .row:first-child{
+            border-bottom: 1px solid #D2D2D2;
+            height: 50px;
+            font-size: 12px;
+            line-height: 50px;
+            padding-left: 30px;
+            font-weight: 700;
+            margin-right: 0px;
+          }
+          .service-model{
+            padding-left: 30px;
+            padding-top: 15px;
+          }
+        }
+        .right-panel{
+          padding: 30px 30px 15px 30px;
+          .row{
+            margin: 0px;
+          }
+          .table-title{
+            font-size: 12px;
+            text-transform: uppercase;
+            font-weight: bold;
+          }
+          .no-result{
+            margin-bottom: 20px;
+            text-align: center;
+            border: 1px solid #d2d2d2;
+            padding: 20px;
+            margin-top: -23px;
+          }
+
+          .table-bordered{
+            width: 100%;
+            margin-top: 10px;
+            font-family: OpenSans-Semibold;
+            font-size: 12px;
+            overflow-x: auto;
+            display: block;
+            color: #5A5A5A;
+            .request-id {
+              width: 85px;
+            }
+            thead {
+              position: sticky;
+              top: 0;
+              z-index: 100;
+              display: block;
+              background: rgb(242, 242, 242);
+              border-bottom: 1px solid #d2d2d2;
+              tr {
+                display: flex;
+                th {
+                  flex-grow: 1;
+                  border-right: 1px solid #d2d2d2;
+                  &:last-child{
+                    border-right: none;
+                  }
+                  &.request-id {
+                    flex-grow: 0;
+                  }
+                }
+              }
+            }
+
+            tbody {
+              border: none !important;
+              max-height: 152px;
+              display: block;
+
+              tr {
+                display: flex;
+                border-bottom: 1px solid #d2d2d2;
+                &:last-child{
+                  border-bottom: none;
+                }
+                td {
+                  border: none;
+                  border-right: 1px solid #d2d2d2;
+                  flex-grow: 1;
+                  &:last-child{
+                    border-right: none;
+                  }
+                  &.request-id {
+                    flex-grow: 0;
+                  }
+                }
+              }
+            }
+
+            th {
+              background: #f2f2f2;
+              font-family: OpenSans-Semibold;
+              color: #000000;
+              font-weight: bold;
+              border: none;
+            }
+
+            tr.odd {
+              background-color: rgb(242, 242, 242);
+            }
+
+            tr:hover {
+              background: #e1e1e1;
+            }
+          }
+        }
+      }
+      .modal-footer{
+        margin: 0px;
+        .cancel{
+          width: 120px;
+          height: 36px;
+          background: #009fdb;
+          border-radius: 2px;
+          font-family: OpenSans-Regular;
+          font-size: 14px;
+          color: #ffffff;
+          line-height: 16px;
+        }
+      }
+    }
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.spec.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.spec.ts
new file mode 100644
index 0000000..35b5fbf
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.spec.ts
@@ -0,0 +1,274 @@
+
+import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing";
+import {getTestBed, TestBed} from "@angular/core/testing";
+import {NgRedux} from "@angular-redux/store";
+import {AuditInfoModalComponentService} from "./auditInfoModal.component.service";
+import {ModelInformationItem} from "../model-information/model-information.component";
+
+class MockAppStore<T> {
+  getState() {
+    return {
+      "service": {
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "instanceParams": [],
+            "bulkSize": 1,
+            "action": "None",
+            "instanceName": "PQijmEmzhVma4zujr",
+            "instanceId": "service-instance-id",
+            "orchStatus": "GARBAGE DATA",
+            "productFamilyId": null,
+            "lcpCloudRegionId": null,
+            "tenantId": null,
+            "modelInfo": {
+              "modelInvariantId": "d27e42cf-087e-4d31-88ac-6c4b7585f800",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "vf_vEPDG",
+              "modelType": "service",
+              "modelVersion": "5.0"
+            },
+            "globalSubscriberId": "global-customer-id",
+            "subscriptionServiceType": "service-instance-type",
+            "owningEntityId": null,
+            "owningEntityName": null,
+            "tenantName": null,
+            "aicZoneId": null,
+            "aicZoneName": null,
+            "projectName": null,
+            "rollbackOnFailure": null,
+            "isALaCarte": false
+          }
+        },
+        "subscribers": [
+          {
+            "id": "CAR_2020_ER",
+            "name": "CAR_2020_ER",
+            "isPermitted": true
+          },
+          {
+            "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+            "name": "JULIO ERICKSON",
+            "isPermitted": false
+          },
+          {
+            "id": "global-customer-id",
+            "name": "DALE BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-1",
+            "name": "LLOYD BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example",
+            "name": "JimmyExampleCust-20161102",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example2",
+            "name": "JimmyExampleCust-20161103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-102",
+            "name": "ERICA5779-TestSub-PWT-102",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-101",
+            "name": "ERICA5779-TestSub-PWT-101",
+            "isPermitted": false
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-4",
+            "name": "ERICA5779-Subscriber-5",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-103",
+            "name": "ERICA5779-TestSub-PWT-103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-2",
+            "name": "ERICA5779-Subscriber-2",
+            "isPermitted": false
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "SILVIA ROBBINS",
+            "isPermitted": true
+          },
+          {
+            "id": "ERICA5779-Subscriber-3",
+            "name": "ERICA5779-Subscriber-3",
+            "isPermitted": false
+          },
+          {
+            "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+            "name": "CRAIG/ROBERTS",
+            "isPermitted": false
+          }
+        ]
+      }
+    }
+  }
+}
+
+describe("Audit info modal component service", () => {
+  let injector;
+  let httpMock: HttpTestingController;
+  let auditInfoModalComponentService: AuditInfoModalComponentService;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [
+        AuditInfoModalComponentService,
+        {provide: NgRedux, useClass: MockAppStore}
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    httpMock = injector.get(HttpTestingController);
+    auditInfoModalComponentService = injector.get(AuditInfoModalComponentService);
+
+  })().then(done).catch(done.fail));
+
+
+  test('auditInfoModalComponentService service should be defined', () => {
+    expect(auditInfoModalComponentService).toBeDefined();
+  });
+
+  test('getModelInfo: VNF information from existing instance with model', () => {
+    const model = getVNFModel();
+    const instance = getVNFInstance();
+    const results: ModelInformationItem[] = auditInfoModalComponentService.getModelInfo(model, instance, "6e59c5de-f052-46fa-aa7e-2fca9d674c44");
+    expect(results.find((item) => item.label === 'Model customization ID').values[0]).toEqual("91415b44-753d-494c-926a-456a9172bbb9");
+    expect(results.find((item) => item.label === 'Model version').values[0]).toEqual("2.0");
+    expect(results.find((item) => item.label === 'Model name').values[0]).toEqual("VF_vMee");
+    expect(results.find((item) => item.label === 'Instance name').values[0]).toEqual("4O61SmpFAdCm1oVEs");
+    expect(results.find((item) => item.label === 'Instance ID').values[0]).toEqual("66cbb3b5-c823-470c-9520-4e0b85112250");
+    expect(results.find((item) => item.label === 'Subscriber name').values[0]).toEqual("DALE BRIDGES"); // TODO should call subscriber
+    expect(results.find((item) => item.label === 'Service type').values[0]).toEqual("service-instance-type");
+  });
+
+  test('getModelInfo: Network information from existing instance without model', () => {
+    const model = getNetworkModel();
+    const instance = getNetworkInstance();
+    const results: ModelInformationItem[] = auditInfoModalComponentService.getModelInfo(model, instance, "6e59c5de-f052-46fa-aa7e-2fca9d674c44");
+    expect(results.find((item) => item.label === 'Instance name').values[0]).toEqual("KADmyK6e3sVWNfGbA");
+    expect(results.find((item) => item.label === 'Instance ID').values[0]).toEqual("712cad2d-fc1c-40c7-aaff-d2d6e17ac2b6");
+    expect(results.find((item) => item.label === 'Subscriber name').values[0]).toEqual("DALE BRIDGES"); // TODO should call subscriber
+    expect(results.find((item) => item.label === 'Service type').values[0]).toEqual("service-instance-type");
+  });
+
+  test('getModelInfo: VFModule information from existing instance with model', () => {
+    const model = getVFModule();
+    const instance = getVFModuleInstance();
+    const results: ModelInformationItem[] = auditInfoModalComponentService.getModelInfo(model, instance, "6e59c5de-f052-46fa-aa7e-2fca9d674c44");
+    expect(results.find((item) => item.label === 'Model customization ID').values[0]).toEqual("55b1be94-671a-403e-a26c-667e9c47d091");
+    expect(results.find((item) => item.label === 'Model version').values[0]).toEqual("2");
+    expect(results.find((item) => item.label === 'Model name').values[0]).toEqual("VfVmee..vmme_vlc..module-1");
+    expect(results.find((item) => item.label === 'Instance name').values[0]).toEqual("ss820f_0918_db");
+    expect(results.find((item) => item.label === 'Instance ID').values[0]).toEqual("2c1ca484-cbc2-408b-ab86-25a2c15ce280");
+    expect(results.find((item) => item.label === 'Subscriber name').values[0]).toEqual("DALE BRIDGES"); // TODO should call subscriber
+    expect(results.find((item) => item.label === 'Service type').values[0]).toEqual("service-instance-type");
+  });
+
+  test('getModelInfo: VNFGroup information from existing instance with model', () => {
+    const model = getVNFGroupModel();
+    const instance = getVNFGroupInstance();
+    const results: ModelInformationItem[] = auditInfoModalComponentService.getModelInfo(model, instance, "6e59c5de-f052-46fa-aa7e-2fca9d674c44");
+    expect(results.find((item) => item.label === 'Model version').values[0]).toEqual("1");
+    expect(results.find((item) => item.label === 'Model name').values[0]).toEqual("groupingservicefortest..ResourceInstanceGroup..0");
+    expect(results.find((item) => item.label === 'Instance name').values[0]).toEqual("VNF_GROUP1_INSTANCE_NAME");
+    expect(results.find((item) => item.label === 'Instance ID').values[0]).toEqual("VNF_GROUP1_INSTANCE_ID");
+    expect(results.find((item) => item.label === 'Subscriber name').values[0]).toEqual("DALE BRIDGES"); // TODO should call subscriber
+    expect(results.find((item) => item.label === 'Service type').values[0]).toEqual("service-instance-type");
+  });
+
+
+  test('setModalTitlesType:  should return modal title', () => {
+    expect(AuditInfoModalComponentService.setModalTitle('VNF')).toEqual('VNF Instantiation Information');
+    expect(AuditInfoModalComponentService.setModalTitle('VFMODULE')).toEqual('VfModule Instantiation Information');
+    expect(AuditInfoModalComponentService.setModalTitle('NETWORK')).toEqual('Network Instantiation Information');
+    expect(AuditInfoModalComponentService.setModalTitle('VNFGROUP')).toEqual('Vnf Group Instantiation Information');
+  });
+
+  test('setModalTitlesType:  should return modal title type', () => {
+    expect(AuditInfoModalComponentService.setModalTitlesType('VNF')).toEqual('VNF');
+    expect(AuditInfoModalComponentService.setModalTitlesType('VFMODULE')).toEqual('VfModule');
+    expect(AuditInfoModalComponentService.setModalTitlesType('NETWORK')).toEqual('Network');
+    expect(AuditInfoModalComponentService.setModalTitlesType('VNFGROUP')).toEqual('Vnf Group');
+  });
+
+  test('getInstanceModelName:  should return model name if exist', () => {
+    expect(AuditInfoModalComponentService.getInstanceModelName({name : 'some name'})).toEqual('some name');
+    expect(AuditInfoModalComponentService.getInstanceModelName(null)).toEqual('');
+  });
+
+  test('createModelInformationItemsJob:  should return job information', () => {
+    let service = {
+      "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+      "invariantUuid": "cfef8302-d90f-475f-87cc-3f49a62ef14c",
+      "name": "ComplexService",
+      "version": "1.0",
+      "toscaModelURL": null,
+      "category": "Emanuel",
+      "serviceType": "",
+      "serviceRole": "",
+      "description": "ComplexService",
+      "serviceEcompNaming": "true",
+      "instantiationType": "Macro",
+      "inputs": {},
+      "vidNotions": {
+        "instantiationUI": "legacy",
+        "modelCategory": "other",
+        "viewEditUI": "legacy"
+      }
+    };
+    const results = AuditInfoModalComponentService.createModelInformationItemsJob(<any>service);
+  });
+
+
+  function getVNFModel(){
+    return {"name":"VF_vMee","version":"2.0","description":"VSP_vMee","uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","max":1,"min":0,"customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","isEcompGeneratedNaming":true,"type":"VF","modelCustomizationName":"VF_vMee 0","vfcInstanceGroups":{},"properties":{"gpb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-ipv6-egress_rule_application":"any","sctp-b-ipv6-egress_src_start_port":"0","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","ncb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress_rule_protocol":"icmp","sctp-b-ingress_action":"pass","sctp-a-egress_rule_application":"any","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-egress_src_addresses":"local","fsb_volume_size_0":"320.0","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-egress_src_addresses":"local","sctp-b-egress-src_start_port":"0.0","sctp-a-ingress_rule_protocol":"icmp","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-a-ingress_ethertype":"IPv4","sctp-a-egress-src_start_port":"0.0","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","sctp-b-egress_dst_subnet_prefix_len":"0.0","gpb1_Internal1_mac":"00:11:22:EF:AC:DF","Internal2_net_cidr":"10.0.0.10","sctp-a-ingress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-egress-dst_start_port":"0.0","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-egress_action":"pass","sctp-b-ipv6-egress_rule_application":"any","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress-src_start_port":"0.0","fsb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"10.0.0.10","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-a-ipv6-ingress_rule_application":"any","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","ecomp_generated_naming":"true","sctp-a-IPv6_ethertype":"IPv6","vlc_st_virtualization_type":"virtual-machine","vlc2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress-dst_end_port":"65535.0","sctp-b-ingress-dst_start_port":"0.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","vlc_flavor_name":"nd.c16r64d1","int2_sec_group_name":"int2-sec-group","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress-dst_start_port":"0","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_shared":"false","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","fsb2_Internal2_mac":"00:11:22:EF:AC:DF","Internal2_forwarding_mode":"l2","sctp-a-ipv6-egress_dst_end_port":"65535","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-a-ingress_dst_addresses":"local","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_sctp_a":"left","vlc_st_version":"2","sctp-a-src_subnet_prefix_v6":"::","vlc_st_interface_type_sctp_b":"right","sctp-a-ingress_rule_application":"any","sctp-b-egress_ethertype":"IPv4","sctp-a-ipv6-egress_src_start_port":"0","instance_ip_family_v6":"v6","gpb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-ingress-src_start_port":"0.0","fsb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress_dst_addresses":"local","vlc_st_interface_type_oam":"management","multi_stage_design":"false","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"10.0.0.10","sctp-a-ipv6-ingress-dst_end_port":"65535","Internal1_net_gateway":"10.0.0.10","sctp-b-ipv6-egress-dst_start_port":"0","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-b-ipv6-egress_action":"pass","sctp-a-egress_rule_protocol":"icmp","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-b-egress_rule_protocol":"icmp","sctp-a-ingress_action":"pass","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","vlc2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-ingress-dst_start_port":"0","vlc_st_availability_zone":"true","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","gpb_flavor_name":"nv.c20r64d1","Internal1_allow_transit":"true","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-ingress_ethertype":"IPv4","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","vlc1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-ingress-src_end_port":"65535.0","sctp-b-egress_rule_application":"any","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"}};
+  }
+
+  function getVNFInstance(){
+    return {"action":"None","instanceName":"4O61SmpFAdCm1oVEs","instanceId":"66cbb3b5-c823-470c-9520-4e0b85112250","orchStatus":null,"productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelCustomizationName":"VF_vMee 0","modelInvariantId":"vnf-instance-model-invariant-id","modelVersionId":"d6557200-ecf2-4641-8094-5393ae3aae60","modelType":"vnf"},"instanceType":"7538ifdSoTccmbEkr","provStatus":null,"inMaint":true,"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","originalName":"VF_vMee 0","legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"VF_vMee 0:004","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"vf_vmee0..VfVmee..vmme_vlc..module-1:008":{"action":"None","instanceName":"ss820f_0918_db","instanceId":"2c1ca484-cbc2-408b-ab86-25a2c15ce280","orchStatus":"deleted","productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelCustomizationName":"VfVmee..vmme_vlc..module-1","modelCustomizationId":"b200727a-1bf9-4e7c-bd06-b5f4c9d920b9","modelInvariantId":"09edc9ef-85d0-4b26-80de-1f569d49e750","modelVersionId":"522159d5-d6e0-4c2a-aa44-5a542a12a830","modelType":"vfModule"},"instanceType":null,"provStatus":null,"inMaint":true,"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","originalName":"VfVmee..vmme_vlc..module-1","legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"vf_vmee0..VfVmee..vmme_vlc..module-1:008","isBase":false,"volumeGroupName":null}},"dc229cd8-c132-4455-8517-5c1787c18b14":{"dc229cd8-c132-4455-8517-5c1787c18b14:009":{"action":"None","instanceName":"ss820f_0918_base","instanceId":"3ef042c4-259f-45e0-9aba-0989bd8d1cc5","orchStatus":"Assigned","productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelCustomizationId":"8ad8670b-0541-4499-8101-275bbd0e8b6a","modelInvariantId":"1e463c9c-404d-4056-ba56-28fd102608de","modelVersionId":"dc229cd8-c132-4455-8517-5c1787c18b14","modelType":"vfModule"},"instanceType":null,"provStatus":null,"inMaint":false,"uuid":"dc229cd8-c132-4455-8517-5c1787c18b14","originalName":null,"legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"dc229cd8-c132-4455-8517-5c1787c18b14:009","isBase":true,"volumeGroupName":null}}},"networks":{}};
+  }
+
+  function getVFModule(){
+    return {"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc","baseModule":false},"inputs":{},"volumeGroupAllowed":false};
+  }
+
+  function getVFModuleInstance() {
+    return{"action":"None","instanceName":"ss820f_0918_db","instanceId":"2c1ca484-cbc2-408b-ab86-25a2c15ce280","orchStatus":"deleted","productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelCustomizationName":"VfVmee..vmme_vlc..module-1","modelCustomizationId":"b200727a-1bf9-4e7c-bd06-b5f4c9d920b9","modelInvariantId":"09edc9ef-85d0-4b26-80de-1f569d49e750","modelVersionId":"522159d5-d6e0-4c2a-aa44-5a542a12a830","modelType":"vfModule"},"instanceType":null,"provStatus":null,"inMaint":true,"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","originalName":"VfVmee..vmme_vlc..module-1","legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"vf_vmee0..VfVmee..vmme_vlc..module-1:008","isBase":false,"volumeGroupName":null};
+  }
+
+  function getNetworkModel(){
+    return null;
+  }
+
+  function getNetworkInstance(){
+      return {"action":"None","instanceName":"KADmyK6e3sVWNfGbA","instanceId":"712cad2d-fc1c-40c7-aaff-d2d6e17ac2b6","orchStatus":"Assigned","productFamilyId":null,"lcpCloudRegionId":null,"tenantId":null,"modelInfo":{"modelInvariantId":"network-instance-model-invariant-id","modelVersionId":"ddc3f20c-08b5-40fd-af72-c6d14636b986","modelType":"network"},"instanceType":"CONTRAIL30_BASIC","provStatus":"nvtprov","inMaint":false,"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","originalName":null,"legacyRegion":null,"lineOfBusiness":null,"platformName":null,"trackById":"ddc3f20c-08b5-40fd-af72-c6d14636b986:001"};
+  }
+
+  function getVNFGroupModel(){
+    return {"name":"groupingservicefortest..ResourceInstanceGroup..0","version":"1","uuid":"daeb6568-cef8-417f-9075-ed259ce59f48","invariantUuid":"4bb2e27e-ddab-4790-9c6d-1f731bc14a45","max":1,"min":0,"isEcompGeneratedNaming":true,"type":"VnfGroup","modelCustomizationName":"groupingservicefortest..ResourceInstanceGroup..0","properties":{"contained_resource_type":"VF","role":"SERVICE-ACCESS","function":"DATA","description":"DDD0","type":"LOAD-GROUP","ecomp_generated_naming":"true"},"members":{"vdbe_svc_vprs_proxy 0":{"uuid":"65fadfa8-a0d9-443f-95ad-836cd044e26c","invariantUuid":"f4baae0c-b3a5-4ca1-a777-afbffe7010bc","description":"A Proxy for Service vDBE_Svc_vPRS","name":"vDBE_Svc_vPRS Service Proxy","version":"1.0","customizationUuid":"bdb63d23-e132-4ce7-af2c-a493b4cafac9","inputs":{},"commands":{},"properties":{"ecomp_generated_naming":"false"},"type":"Service Proxy","sourceModelUuid":"da7827a2-366d-4be6-8c68-a69153c61274","sourceModelInvariant":"24632e6b-584b-4f45-80d4-fefd75fd9f14","sourceModelName":"vDBE_Svc_vPRS"}}};
+  }
+
+  function getVNFGroupInstance(){
+    return {"originalName":"groupingservicefortest..ResourceInstanceGroup..0","trackById":"groupingservicefortest..ResourceInstanceGroup..0:001","instanceName":"VNF_GROUP1_INSTANCE_NAME","action":"None","instanceId":"VNF_GROUP1_INSTANCE_ID","instanceType":"VNF_GROUP1_INSTANCE_TYPE","orchStatus":"Active","provStatus":null,"inMaint":false,"modelInfo":{"modelType":"instanceGroup","modelCustomizationName":"groupingservicefortest..ResourceInstanceGroup..0","modelInvariantId":"4bb2e27e-ddab-4790-9c6d-1f731bc14a45","modelVersionId":"daeb6568-cef8-417f-9075-ed259ce59f48"},"uuid":"daeb6568-cef8-417f-9075-ed259ce59f48","vnfs":{}};
+  }
+});
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.ts
new file mode 100644
index 0000000..cd36ece
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.service.ts
@@ -0,0 +1,79 @@
+import {Injectable} from "@angular/core";
+import {ModelInformationItem} from "../model-information/model-information.component";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {Subscriber} from "../../models/subscriber";
+import {ServiceInfoModel} from "../../server/serviceInfo/serviceInfo.model";
+import * as _ from 'lodash';
+
+@Injectable()
+export class AuditInfoModalComponentService {
+  constructor(private _store: NgRedux<AppState>){}
+
+  getModelInfo(model, instance, serviceModelId: string): ModelInformationItem[] {
+    const serviceInstance = this._store.getState().service.serviceInstance[serviceModelId];
+    const modelInformation = !_.isNil(model) ? [
+      new ModelInformationItem('Model name', 'model_name', [model.name]),
+      new ModelInformationItem('Model version', 'model_version', [model.version]),
+      new ModelInformationItem('Model customization ID', 'model_customization_ID', [model.customizationUuid]),
+      new ModelInformationItem('Base module', 'base_module', [!_.isNil(model.properties) ? model.properties.baseModule : null])
+    ] : [];
+
+    const instanceInfo = !_.isNil(instance) ? [
+      new ModelInformationItem('Instance name', 'instance_name', [instance.instanceName]),
+      new ModelInformationItem('Instance ID', 'instance_ID', [instance.instanceId])
+    ] : [];
+
+    const serviceInfo = !_.isNil(serviceInstance) ? [
+      new ModelInformationItem("Subscriber name", "subscriberName", [this.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId, this._store)]),
+      new ModelInformationItem('Service type', 'service_type', [serviceInstance.subscriptionServiceType])
+    ] : [];
+
+    const result = [modelInformation, instanceInfo, serviceInfo];
+    return _.uniq(_.flatten(result));
+  }
+
+  static createModelInformationItemsJob(serviceModel: ServiceInfoModel): ModelInformationItem[] {
+    return [
+      new ModelInformationItem('Subscriber name', 'subscriberName', [serviceModel.subscriberName]),
+      new ModelInformationItem('Service type', 'serviceType', [serviceModel.serviceType]),
+      new ModelInformationItem('Service model version', 'serviceModelVersion', [serviceModel.serviceModelVersion]),
+      new ModelInformationItem('Service instance name', 'serviceInstanceName', [serviceModel.serviceInstanceName || 'Automatically generated'], '', true),
+      new ModelInformationItem('Service instance ID', 'serviceInstanceId', [serviceModel.serviceInstanceId]),
+      new ModelInformationItem('Requestor User ID', 'userId', [serviceModel.userId]),
+    ];
+  }
+
+  static getInstanceModelName(model) : string {
+    return !_.isNil(model) && model.name ? model.name : '';
+  }
+
+  static setModalTitlesType(type : string) : string {
+    return !_.isNil(type) ? AuditInfoModalComponentService.getTypeMap()[type] : 'Service' ;
+  }
+
+  static getTypeMap(){
+    return {
+      SERVICE : 'Service',
+      VNFGROUP : 'Vnf Group',
+      NETWORK : 'Network',
+      VFMODULE : 'VfModule',
+      VNF : 'VNF'
+    };
+  }
+
+  static setModalTitle(type : string) : string {
+    return !_.isNil(type) ? (AuditInfoModalComponentService.getTypeMap()[type] + " Instantiation Information") : 'Service Instantiation Information';
+  }
+
+  extractSubscriberNameBySubscriberId(subscriberId: string, store: NgRedux<AppState>) {
+    let result: string = null;
+    let filteredArray: any = _.filter(store.getState().service.subscribers, function (o: Subscriber) {
+      return o.id === subscriberId
+    });
+    if (filteredArray.length > 0) {
+      result = filteredArray[0].name;
+    }
+    return result;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts
new file mode 100644
index 0000000..ecce68d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.spec.ts
@@ -0,0 +1,203 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {ContextMenuModule, ContextMenuService} from 'ngx-contextmenu';
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';
+import {AuditInfoModalComponent} from "./auditInfoModal.component";
+import {NgRedux} from "@angular-redux/store";
+import {FeatureFlagsService} from "../../services/featureFlag/feature-flags.service";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {HttpClientTestingModule} from "@angular/common/http/testing";
+import {ScrollToModule} from "@nicky-lenaers/ngx-scroll-to";
+import {RouterTestingModule} from "@angular/router/testing";
+import {ModalModule} from "ngx-bootstrap";
+import {CapitalizeAndFormatPipe} from "../../pipes/capitalize/capitalize-and-format.pipe";
+import {ServiceInfoService} from "../../server/serviceInfo/serviceInfo.service";
+import {IframeService} from "../../utils/iframe.service";
+import {AuditInfoModalComponentService} from "./auditInfoModal.component.service";
+import {ServiceInfoModel} from "../../server/serviceInfo/serviceInfo.model";
+import {HttpClient} from '@angular/common/http';
+import {getTestBed} from "@angular/core/testing";
+import {of} from 'rxjs';
+
+class MockAppStore<T> {
+  getState() {
+    return {
+      global: {
+        flags: {
+          'FLAG_1902_NEW_VIEW_EDIT': true
+        }
+      },
+      service: {
+        serviceInstance: {}
+      }
+    }
+  }
+
+  dispatch() {
+
+  }
+}
+
+
+describe('Audit Info Modal Component_serviceInfoService', () => {
+  let component: AuditInfoModalComponent;
+  let fixture: ComponentFixture<AuditInfoModalComponent>;
+  let _serviceInfoService: ServiceInfoService;
+  let injector;
+  beforeAll(done => (async () => {
+
+    TestBed.configureTestingModule({
+      imports: [
+        HttpClientTestingModule,
+        ContextMenuModule,
+        ScrollToModule.forRoot(),
+        RouterTestingModule,
+        ModalModule.forRoot()
+      ],
+      providers: [
+        ServiceInfoService,
+        AaiService,
+        IframeService,
+        AuditInfoModalComponentService,
+        ContextMenuService,
+        FeatureFlagsService,
+        {provide: NgRedux, useClass: MockAppStore}
+      ],
+      declarations: [AuditInfoModalComponent, CapitalizeAndFormatPipe],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    _serviceInfoService = injector.get(ServiceInfoService);
+    fixture = TestBed.createComponent(AuditInfoModalComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  })().then(done).catch(done.fail));
+
+
+  test('component should be defined', () => {
+    expect(component).toBeDefined();
+  });
+
+  test('setModalTitles should set modal title according to type', () => {
+    component.setModalTitles('VNF');
+    expect(component.type).toEqual('VNF');
+    expect(component.title).toEqual('VNF Instantiation Information');
+  });
+
+  test('initializeProperties should init some component properties', () => {
+    component.initializeProperties();
+    expect(component.modelInfoItems).toBeNull();
+    expect(component.vidInfoData).toEqual([]);
+    expect(component.msoInfoData).toEqual([]);
+    expect(component.isLoading).toEqual(true);
+  });
+
+  test('openAuditInfoModal', () => {
+    const jobData: ServiceInfoModel = new ServiceInfoModel();
+    spyOn(AuditInfoModalComponentService, 'createModelInformationItemsJob');
+    spyOn(component, 'initAuditInfoData');
+    spyOn(component.auditInfoModal, 'show');
+    component.openAuditInfoModal(jobData);
+
+    expect(AuditInfoModalComponentService.createModelInformationItemsJob).toHaveBeenCalledWith(jobData);
+    expect(component.initAuditInfoData).toHaveBeenCalledWith(jobData);
+    expect(component.auditInfoModal.show).toHaveBeenCalled();
+  });
+
+  test('onCancelClick', () => {
+    spyOn(component, 'initializeProperties');
+    spyOn(component.auditInfoModal, 'hide');
+    component.onCancelClick();
+
+    expect(component.initializeProperties).toHaveBeenCalledWith();
+    expect(component.auditInfoModal.hide).toHaveBeenCalled();
+  });
+
+  test('openInstanceAuditInfoModal calls to getAuditStatusForRetry function', () => {
+    spyOn(component.auditInfoModalComponentService, 'getModelInfo').and.returnValue([]);
+    spyOn(component, 'initializeProperties');
+    spyOn(component, 'setModalTitles');
+    spyOn(component.auditInfoModal, 'show');
+    spyOn(_serviceInfoService, 'getAuditStatusForRetry');
+    jest.spyOn(_serviceInfoService, 'getAuditStatusForRetry').mockReturnValue(of([]))
+
+    spyOn(AuditInfoModalComponentService, 'getInstanceModelName');
+    const instanceId: string = "instanceID";
+    const type: string = 'VNF';
+    const model = {};
+    const instance = {};
+    const isInstanceFailed: boolean = true;
+    const trackById = "trackById";
+
+    AuditInfoModalComponent.openInstanceAuditInfoModal.next({
+      instanceId: instanceId,
+      type: type,
+      model: model,
+      instance: instance,
+      isInstanceFailed: isInstanceFailed,
+      trackById: trackById
+    });
+
+    expect(component.showVidStatus).toEqual(false);
+    expect(component.initializeProperties).toHaveBeenCalled();
+    expect(component.setModalTitles).toHaveBeenCalled();
+    expect(_serviceInfoService.getAuditStatusForRetry).toHaveBeenCalledWith(trackById);
+    expect(component.auditInfoModal.show).toHaveBeenCalled();
+    expect(AuditInfoModalComponentService.getInstanceModelName).toHaveBeenCalledWith(model);
+  });
+
+  test('openInstanceAuditInfoModal calls to getInstanceAuditStatus function', () => {
+    spyOn(component.auditInfoModalComponentService, 'getModelInfo').and.returnValue([]);
+    spyOn(component, 'initializeProperties');
+    spyOn(component, 'setModalTitles');
+    spyOn(component.auditInfoModal, 'show');
+    spyOn(_serviceInfoService, 'getAuditStatusForRetry');
+    jest.spyOn(_serviceInfoService, 'getInstanceAuditStatus').mockReturnValue(of([]))
+
+    spyOn(AuditInfoModalComponentService, 'getInstanceModelName');
+    const instanceId: string = "instanceID";
+    const type: string = 'VNF';
+    const model = {};
+    const instance = {};
+    const isInstanceFailed: boolean = false;
+    const trackById = "trackById";
+
+    AuditInfoModalComponent.openInstanceAuditInfoModal.next({
+      instanceId: instanceId,
+      type: type,
+      model: model,
+      instance: instance,
+      isInstanceFailed: isInstanceFailed,
+      trackById: trackById
+    });
+
+    expect(component.showVidStatus).toEqual(false);
+    expect(component.initializeProperties).toHaveBeenCalled();
+    expect(component.setModalTitles).toHaveBeenCalled();
+    expect(_serviceInfoService.getInstanceAuditStatus).toHaveBeenCalledWith(instanceId, type);
+    expect(component.auditInfoModal.show).toHaveBeenCalled();
+    expect(AuditInfoModalComponentService.getInstanceModelName).toHaveBeenCalledWith(model);
+  });
+
+  test('openInstanceAuditInfoModal : openModal : with job data', () => {
+    spyOn(component.auditInfoModalComponentService, 'getModelInfo').and.returnValue([]);
+    spyOn(component, 'initializeProperties');
+    spyOn(component.auditInfoModal, 'show');
+    spyOn(AuditInfoModalComponentService, 'getInstanceModelName');
+    const jobData: ServiceInfoModel = new ServiceInfoModel();
+    jobData.aLaCarte = true;
+    AuditInfoModalComponent.openModal.next(jobData);
+
+    expect(component.showVidStatus).toEqual(true);
+    expect(component.initializeProperties).toHaveBeenCalled();
+    expect(component.auditInfoModal.show).toHaveBeenCalled();
+  });
+
+  test('openInstanceAuditInfoModal : openModal : without job data', () => {
+    spyOn(component.auditInfoModal, 'hide');
+    const jobData: ServiceInfoModel = null;
+    AuditInfoModalComponent.openModal.next(jobData);
+    expect(component.auditInfoModal.hide).toHaveBeenCalled();
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts
new file mode 100644
index 0000000..cf385d7
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/auditInfoModal/auditInfoModal.component.ts
@@ -0,0 +1,122 @@
+import {Component, ViewChild} from '@angular/core';
+import {Subject} from 'rxjs/Subject';
+import {ModalDirective} from 'ngx-bootstrap'
+import {ModelInformationItem} from '../model-information/model-information.component';
+import {ServiceModel} from '../../models/serviceModel';
+import {ServiceInfoService} from '../../server/serviceInfo/serviceInfo.service';
+import {ServiceInfoModel} from '../../server/serviceInfo/serviceInfo.model';
+import {AuditStatus} from '../../server/serviceInfo/AuditStatus.model';
+import {IframeService} from "../../utils/iframe.service";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {AuditInfoModalComponentService} from "./auditInfoModal.component.service";
+
+@Component({
+  selector: 'audit-info-modal',
+  templateUrl: './auditInfoModal.component.html',
+  styleUrls: ['./auditInfoModal.component.scss']
+})
+export class AuditInfoModalComponent {
+  static openModal: Subject<ServiceInfoModel> = new Subject<ServiceInfoModel>();
+  static openInstanceAuditInfoModal: Subject<{instanceId , type, model, instance, isInstanceFailed?, trackById?}> = new Subject<{instanceId , type, model, instance, isInstanceFailed, trackById}>();
+  @ViewChild('auditInfoModal') public auditInfoModal: ModalDirective;
+  title: string = 'Service Instantiation Information';
+  modelInfoItems: ModelInformationItem[] = [];
+  serviceModel: ServiceModel;
+  serviceModelName: string;
+  vidInfoData: AuditStatus[] = [];
+  msoInfoData: AuditStatus[] = [];
+  isAlaCarte: boolean;
+  parentElementClassName = 'content';
+  isLoading = true;
+  model: any;
+  instanceId: string;
+  isALaCarteFlagOn: boolean;
+  type : string = "Service";
+  showVidStatus : boolean = true;
+  auditInfoModalComponentService : AuditInfoModalComponentService;
+  constructor(private _serviceInfoService: ServiceInfoService, private _iframeService : IframeService,
+              private _auditInfoModalComponentService : AuditInfoModalComponentService,
+              private store: NgRedux<AppState>) {
+    this.auditInfoModalComponentService = this._auditInfoModalComponentService;
+    AuditInfoModalComponent.openModal.subscribe((jobData: ServiceInfoModel) => {
+      this.isALaCarteFlagOn = this.store.getState().global.flags['FLAG_A_LA_CARTE_AUDIT_INFO'];
+      this.initializeProperties();
+      this.showVidStatus = true;
+      if (jobData) {
+        this.isAlaCarte = jobData.aLaCarte;
+        this.openAuditInfoModal(jobData);
+        _iframeService.addClassOpenModal(this.parentElementClassName);
+        this.serviceModelName = jobData.serviceModelName ? jobData.serviceModelName : '';
+        this.auditInfoModal.show();
+      } else {
+        _iframeService.removeClassCloseModal(this.parentElementClassName);
+        this.auditInfoModal.hide();
+      }
+    });
+
+    AuditInfoModalComponent.openInstanceAuditInfoModal.subscribe(({instanceId  , type ,  model, instance, isInstanceFailed, trackById}) => {
+      this.showVidStatus = false;
+      this.initializeProperties();
+      this.setModalTitles(type);
+      this.serviceModelName = AuditInfoModalComponentService.getInstanceModelName(model);
+
+      if (isInstanceFailed) {
+        this._serviceInfoService.getAuditStatusForRetry(trackById).subscribe((res: AuditStatus) => {
+          this.msoInfoData = [res];
+        });
+      }else{
+        this._serviceInfoService.getInstanceAuditStatus(instanceId, type).subscribe((res : AuditStatus[]) =>{
+          this.msoInfoData = res;
+       });
+      }
+      this.modelInfoItems = this.auditInfoModalComponentService.getModelInfo(model, instance, instanceId);
+      _iframeService.addClassOpenModal(this.parentElementClassName);
+      this.auditInfoModal.show();
+    });
+  }
+
+
+  setModalTitles(type : string) : void{
+    this.type = AuditInfoModalComponentService.setModalTitlesType(type) ;
+    this.title = AuditInfoModalComponentService.setModalTitle(type);
+  }
+
+  initializeProperties() : void {
+    this.modelInfoItems = null;
+    this.vidInfoData = [];
+    this.msoInfoData = [];
+    this.isLoading = true;
+  }
+
+  openAuditInfoModal(jobData: ServiceInfoModel): void {
+    this.modelInfoItems = AuditInfoModalComponentService.createModelInformationItemsJob(jobData);
+    this.initAuditInfoData(jobData);
+    this.auditInfoModal.onHide.subscribe(()=>{
+      this._iframeService.removeClassCloseModal(this.parentElementClassName);
+      this.initializeProperties();
+    });
+    this.auditInfoModal.show();
+  }
+
+  initAuditInfoData(jobData: ServiceInfoModel) {
+    this._serviceInfoService.getJobAuditStatus(jobData)
+      .subscribe((res: AuditStatus[][]) => {
+        this.vidInfoData = res[0];
+        this.msoInfoData = res[1];
+        this.isLoading = false;
+      });
+  }
+
+  onCancelClick() {
+    this._iframeService.removeClassCloseModal(this.parentElementClassName);
+    this.initializeProperties();
+    this.auditInfoModal.hide();
+  }
+
+
+  onNavigate(){
+    window.open("https://wiki.onap.org/display/DW/SO+Building+blocks", "_blank");
+  }
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.spec.ts b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.spec.ts
new file mode 100644
index 0000000..6194aad
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.spec.ts
@@ -0,0 +1,157 @@
+import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing";
+import {DynamicInputsComponent} from "./dynamic-inputs.component";
+import {async, ComponentFixture, getTestBed, TestBed} from "@angular/core/testing";
+import {CUSTOM_ELEMENTS_SCHEMA} from "@angular/core";
+import {FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, ValidatorFn} from "@angular/forms";
+import {BrowserModule} from "@angular/platform-browser";
+import {CommonModule} from "@angular/common";
+import {RouterTestingModule} from "@angular/router/testing";
+import {DynamicInputLabelPipe} from "../../pipes/dynamicInputLabel/dynamic-input-label.pipe";
+import {DynamicNumber} from "../../models/dynamicInput";
+
+
+describe('DynamicInputs Component', () => {
+  let component: DynamicInputsComponent;
+  let fixture: ComponentFixture<DynamicInputsComponent>;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [BrowserModule, CommonModule, FormsModule, HttpClientTestingModule, RouterTestingModule, ReactiveFormsModule],
+      declarations: [DynamicInputsComponent, DynamicInputLabelPipe],
+      providers : [FormBuilder],
+      schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
+    });
+    await TestBed.compileComponents();
+
+    fixture = TestBed.createComponent(DynamicInputsComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  })().then(done).catch(done.fail));
+
+  test('should be defined', () => {
+    expect(component).toBeDefined();
+  });
+
+  test('isDynamicNumber should return item', () => {
+    let options = {
+      minLength : 10,
+      maxLength : 10
+    };
+
+    let dynamicNumber : DynamicNumber = new DynamicNumber(<any>options);
+    expect(component.isDynamicNumber(dynamicNumber)).toBeDefined();
+  });
+
+  test('buildValidators should return validator', () => {
+    let options = {
+      minLength : 10,
+      maxLength : 10,
+      max : 10,
+      min : 1
+    };
+
+    let dynamicNumber : DynamicNumber = new DynamicNumber(<any>options);
+    let validator : ValidatorFn = component.buildValidators(dynamicNumber);
+    expect(validator).toBeDefined();
+  });
+
+
+  test('ngOnInit', ()=>{
+    component.group = new FormGroup({
+
+    });
+      component.list = [
+        {
+          type : 'select',
+          value : 'optionName',
+          name : 'multiSelectControl',
+          optionList : [{
+            isDataLoading : true,
+            name : 'optionName',
+            id : 'id'
+          }]
+        },
+        {
+          type : 'select',
+          value : 'optionName',
+          name : 'multiSelectControl',
+          optionList : [{
+            isDataLoading : true,
+            name : 'optionName',
+            id : 'id'
+          }]
+        },
+        {
+          type : 'multi_select',
+          value : 'optionName',
+          name : 'selectControl',
+          optionList : [{
+            isDataLoading : true,
+            name : 'optionName',
+            id : 'id'
+          }]
+        },
+        {
+          type : 'multi_select',
+          value : 'optionName',
+          name : 'selectControl',
+          optionList : [{
+            isDataLoading : true,
+            name : 'optionName'
+          }]
+        },
+        {
+          type : 'boolean',
+          value : true,
+          name : 'booleanControl'
+        },
+        {
+          type : 'boolean',
+          name : 'booleanControl2'
+        },
+        {
+          type : 'number',
+          value : 100,
+          name : 'numberControl'
+        },
+        {
+          type : 'file',
+          value : 'someValue',
+          name : 'fileControl'
+        },
+        {
+          type : 'checkbox',
+          value : true,
+          name : 'checkboxControl'
+        },
+        {
+          type : 'map',
+          value : true,
+          name : 'mapControl'
+        },
+        {
+          type : 'list',
+          value : true,
+          name : 'listControl'
+        },
+        {
+          type : 'default',
+          value : true,
+          name : 'defaultControl'
+        }
+      ];
+
+      component.ngOnInit();
+      expect(component.group.controls['multiSelectControl'].value).toEqual('id');
+      expect(component.group.controls['selectControl'].value).toEqual('optionName');
+      expect(component.group.controls['booleanControl'].value).toEqual(true);
+      expect(component.group.controls['booleanControl2'].value).toEqual(false);
+      expect(component.group.controls['numberControl'].value).toEqual(100);
+      expect(component.group.controls['fileControl'].value).toEqual('someValue');
+      expect(component.group.controls['checkboxControl'].value).toEqual(true);
+      expect(component.group.controls['mapControl'].value).toEqual(true);
+      expect(component.group.controls['listControl'].value).toEqual(true);
+      expect(component.group.controls['defaultControl'].value).toEqual(true);
+  })
+
+});
diff --git a/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.ts b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.ts
new file mode 100644
index 0000000..096a51e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.component.ts
@@ -0,0 +1,80 @@
+import {Component, Input, OnInit} from '@angular/core';
+import {FormControl, FormGroup, Validators} from "@angular/forms";
+import {DynamicInput, DynamicMultiSelect, DynamicNumber, DynamicSelect} from "../../models/dynamicInput";
+
+@Component({
+  selector: 'dynamic-inputs',
+  templateUrl: './dynamic-inputs.html',
+  styleUrls: ['./dynamic-inputs.scss']
+})
+
+export class DynamicInputsComponent implements OnInit{
+  @Input() public list:any[] = [];
+  @Input() public group: FormGroup;
+
+  private dynamicList:DynamicInput<any>[] = [];
+
+  isDynamicNumber(item: any): item is DynamicNumber {
+    return item;
+  }
+
+  buildValidators(item: DynamicInput<any>) {
+    let validatorArr = [];
+    item.maxLength && validatorArr.push(Validators.maxLength(item.maxLength));
+    item.minLength && validatorArr.push(Validators.minLength(item.minLength));
+    if(this.isDynamicNumber(item)) {
+      item.max && validatorArr.push(Validators.max(item.max));
+      item.min && validatorArr.push(Validators.min(item.min));
+    }
+    return Validators.compose(validatorArr);
+  }
+
+  ngOnInit(): void {
+    this.list.forEach((item)=> {
+      let dynamicItem: DynamicInput<any>;
+      switch (item.type) {
+        case 'multi_select':
+          item.optionList.forEach(function(option) { option.id = option.id||option.name;
+          option.itemName = option.name;});
+          item.settings = {
+            disabled: !item.isEnabled,
+            text: item.prompt,
+          };
+          dynamicItem = new DynamicMultiSelect(item);
+          break;
+        case 'select':
+          let defaultValue:any = item.optionList.find((option) => option.isDataLoading && option.name);
+          item.value = defaultValue && defaultValue.id;
+          dynamicItem = new DynamicSelect(item);
+          break;
+        case 'boolean':
+          item.value = item.value || false;
+          item.optionList = [{name: true, isPermitted: true, isDataLoading: item.value}, {name: false, isPermitted: true, isDataLoading: !item.value}];
+
+          dynamicItem = new DynamicSelect(item);
+          break;
+        case 'number':
+          dynamicItem = new DynamicNumber(item);
+          break;
+        case 'file':
+          dynamicItem = new DynamicInput<any>(item);
+          break;
+        case 'checkbox':
+          dynamicItem = new DynamicInput<boolean>(item);
+          break;
+        case 'map':
+          item.prompt = "{<key1>: <value1>,\.\.\.,<keyN>: <valueN>}";
+          dynamicItem = new DynamicInput<string>(item);
+          break;
+        case 'list':
+          item.prompt = "[<value1>,...,<valueN>]";
+          dynamicItem = new DynamicInput<string>(item);
+          break;
+        default: dynamicItem = new DynamicInput<string>(item);
+      }
+      this.dynamicList.push(dynamicItem);
+      this.group.addControl(dynamicItem.name, new FormControl({value: dynamicItem.value, disabled: !dynamicItem.isEnabled}, this.buildValidators(dynamicItem)));
+    })
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.html b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.html
new file mode 100644
index 0000000..740b798
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.html
@@ -0,0 +1,22 @@
+<div *ngFor="let item of dynamicList">
+  <div id="{{item.id}}" class="details-item" [ngSwitch]="item.type" [formGroup]="group" [hidden]="!item.isVisible">
+    <label  [ngClass]="{'required' : item.isRequired && item.isVisible}">{{item.name | dynamicInputLabel }}</label>
+    <select *ngSwitchCase="item.type === 'select'|| item.type === 'boolean'? item.type: ''" name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" title="{{item.description}}" [required]="item.isRequired && item.isVisible"  maxlength="{{item.maxLength}}" minlength="{{item.minLength}}">
+      <option value="null" [selected]="item.value == null || item.value == undefined" hidden disabled>{{item.prompt}}</option>
+      <option *ngFor="let option of item.optionList" [ngValue]="option.id || option.name" [disabled]="!option.isPermitted" [selected]="option.isDataLoading">{{option.name}}</option>
+    </select>
+    <angular2-multiselect *ngSwitchCase="'multi_select'" [formControlName]="item.name" [(ngModel)]="item.selectedItems" [data]="item.optionList" [settings]="item.settings" title="{{item.description}}" [required]="item.isRequired && item.isVisible"></angular2-multiselect>
+    <input *ngSwitchCase="'number'"  name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" type="number" placeholder="{{item.prompt}}" title="{{item.description}}" min="{{item.min}}" max="{{item.max}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible">
+    <div *ngSwitchCase="'file'">
+
+      <label class="dynamicFileName" for="dynamicFileInput-{{item.name}}">
+        <input id="dynamicFileInput-{{item.name}}"  name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" type="file" placeholder="{{item.prompt}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible">
+        <label for="dynamicFileInput-{{item.name}}" class="labelForImage">
+          <span class="icon-browse"></span>
+        </label>
+      </label>
+    </div>
+    <input *ngSwitchCase="'checkbox'"  name="{{item.name}}" [formControlName]="item.name" type="checkbox"  data-toggle="toggle" title="{{item.description}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible">
+    <input *ngSwitchDefault name="{{item.name}}" class="form-control input-text" [formControlName]="item.name" placeholder="{{item.prompt}}" title="{{item.description}}" maxlength="{{item.maxLength}}" minlength="{{item.minLength}}" [readonly]="item.isReadOnly" [required]="item.isRequired && item.isVisible"/>
+  </div>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.scss b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.scss
new file mode 100644
index 0000000..11a1414
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/dynamic-inputs/dynamic-inputs.scss
@@ -0,0 +1,58 @@
+input[type=file] {
+  opacity: 0;
+  position: relative;
+  z-index: 1;
+  width: 0.5px;
+  height: 0.5px;
+  display: inline-block;
+  input {
+    display: none;
+  }
+}
+
+.dynamicFileName {
+  width: 100%;
+  height: 34px;
+  background: #FFFFFF;
+  border: 1px solid #D2D2D2;
+  border-radius: 2px;
+  display: inline-block;
+  line-height: 34px;
+  font-weight: normal !important;
+  padding-left: 3px;
+  border-bottom-right-radius: 0;
+  border-top-right-radius: 0;
+}
+
+.labelForImage {
+  background: #F2F2F2;
+  border-left: 1px solid #D2D2D2;
+  float: right;
+  height: 32px;
+}
+
+.icon-browse:before {
+  content: "\e90d";
+  color: #5A5A5A;
+  font-size: 15px;
+  cursor: pointer;
+  width: 34px;
+  height: 100%;
+  line-height: 34px;
+  text-align: center;
+  display: inline-block;
+  vertical-align: super;
+  border-radius: 2px;
+  border-bottom-left-radius: 0;
+  border-top-left-radius: 0;
+}
+
+.icon-browse:hover::before {
+  background-color: #E6F6FB;
+  color: #009FDB;
+}
+
+.icon-browse:active::before {
+  background-color: #E6F6FB;
+  color: #009FDB;
+}
diff --git a/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts b/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts
index fd58b65..bce0695 100644
--- a/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts
+++ b/vid-webpack-master/src/app/shared/components/ellipsis/ellipsis.component.ts
@@ -1,12 +1,17 @@
-import { Component, Input } from '@angular/core';
+import {Component, Input, OnChanges, SimpleChanges} from '@angular/core';
+import {HighlightPipe} from "../../pipes/highlight/highlight-filter.pipe";
+import * as _ from 'lodash';
 
 @Component({
   selector : 'custom-ellipsis',
   template: `
-    <span 
+    <span
+          sdc-tooltip
           class="ellipsis"
           id="{{id}}"
-          tooltip="{{value}}">{{value}}</span>`,
+          [innerHtml]="displayValue | safe : 'html'"
+          [tooltip-text]="value">
+      </span>`,
   styles : [
     `
       .ellipsis {
@@ -18,10 +23,23 @@
         text-align: left;
       }
     `
-  ]
+  ],
+  providers : [HighlightPipe]
 })
-export class EllipsisComponent {
+export class EllipsisComponent implements OnChanges{
   @Input() value : string;
   @Input() id : string;
+  @Input() hightlight : string;
 
+  displayValue : string;
+  constructor(private _highlightPipe : HighlightPipe){
+    this.displayValue = this.value;
+  }
+
+  ngOnChanges(changes: SimpleChanges): void {
+    this.displayValue = this.value;
+    if(!_.isNil(this.hightlight)){
+      this.displayValue = this._highlightPipe.transform(this.value ,this.hightlight ? this.hightlight : '');
+    }
+  }
 }
diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.html b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.html
new file mode 100644
index 0000000..6fb46c2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.html
@@ -0,0 +1,5 @@
+<div [attr.data-tests-id]="'error-msg-wrapper'" class="error-msg-wrapper" *ngIf="errorMsgService?.errorMsgObject">
+  <div class="title" [attr.data-tests-id]="'error-msg-title'">{{errorMsgService?.errorMsgObject?.title}}</div>
+  <div class="sub-title" [attr.data-tests-id]="'error-msg-sub-title'">{{errorMsgService?.errorMsgObject?.subtitle}}</div>
+  <div *ngIf="errorMsgService?.errorMsgObject?.description" class="description" [attr.data-tests-id]="'error-msg-description'">{{errorMsgService?.errorMsgObject?.description}}</div>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.scss b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.scss
new file mode 100644
index 0000000..98c7e84
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.scss
@@ -0,0 +1,22 @@
+.error-msg-wrapper{
+  display: block;
+  border-top: 6px solid #CF2A2A;
+  border-bottom: 1px solid #D2D2D2;
+  padding: 20px 45px;
+  font-family: OpenSans-Regular;
+  font-size: 14px;
+  .title{
+    color: #CF2A2A;
+    margin-bottom: 10px;
+    font-family: OpenSans-SemiBold;
+    font-size: 16px;
+  }
+  .sub-title{
+    color: #CF2A2A;
+    margin-bottom: 5px;
+  }
+  .description{
+    color: #191919;
+  }
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.spec.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.spec.ts
new file mode 100644
index 0000000..2ca72c5
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.spec.ts
@@ -0,0 +1,48 @@
+import { async, ComponentFixture, TestBed } from '@angular/core/testing';
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import { ErrorMsgComponent } from './error-msg.component';
+import {ErrorMsgService} from "./error-msg.service";
+import {ErrorMsgObject} from "./error-msg.model";
+
+describe('ErrorMsgComponent', () => {
+
+  let component: ErrorMsgComponent;
+  let fixture: ComponentFixture<ErrorMsgComponent>;
+
+  beforeEach(async(() => {
+    TestBed.configureTestingModule({
+      declarations: [ErrorMsgComponent],
+      providers: [ErrorMsgService]
+    }).compileComponents();
+  }));
+
+  beforeEach(() => {
+    fixture = TestBed.createComponent(ErrorMsgComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  test('should create', () => {
+    expect(component).toBeTruthy();
+  });
+
+  test('should triggerShowError fill error msg object', () => {
+    let errorMsgObj:ErrorMsgObject = new ErrorMsgObject("Title", "SubTitle", "Description")
+    component.errorMsgService.triggerShowError.next(errorMsgObj);
+    let errorMsg = component.errorMsgService.errorMsgObject;
+    expect(errorMsg).toBeDefined();
+    expect(errorMsg.title).toBe('Title');
+    expect(errorMsg.subtitle).toBe('SubTitle');
+    expect(errorMsg.description).toBe('Description');
+  });
+
+  test('should triggerClearError delete error msg object', () => {
+    let errorMsgObj:ErrorMsgObject = new ErrorMsgObject("Title", "SubTitle", "Description")
+    component.errorMsgService.triggerShowError.next(errorMsgObj);
+    let errorMsg = component.errorMsgService.errorMsgObject;
+    expect(errorMsg).toBeDefined();
+    component.errorMsgService.triggerClearError.next();
+    expect(component.errorMsgService.errorMsgObject).toBeNull();
+
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.ts
new file mode 100644
index 0000000..e47a06c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.component.ts
@@ -0,0 +1,28 @@
+import {Component, OnChanges, SimpleChanges} from '@angular/core';
+import {ErrorMsgService} from "./error-msg.service";
+import {ErrorMsgObject} from "./error-msg.model";
+
+@Component({
+  selector: 'error-msg',
+  templateUrl: './error-msg.component.html',
+  styleUrls: ['./error-msg.component.scss']
+})
+
+export class ErrorMsgComponent implements OnChanges {
+
+  errorMsgService: ErrorMsgService;
+  constructor(private _errorMsgService: ErrorMsgService) {
+    this.errorMsgService = _errorMsgService;
+    this._errorMsgService.triggerShowError.subscribe((error: ErrorMsgObject) => {
+      this.errorMsgService.errorMsgObject = error;
+    });
+
+    this._errorMsgService.triggerClearError.subscribe(() => {
+      this.errorMsgService.errorMsgObject = null;
+    });
+  }
+
+  ngOnChanges(changes: SimpleChanges): void {
+  }
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.model.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.model.ts
new file mode 100644
index 0000000..0cdb742
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.model.ts
@@ -0,0 +1,11 @@
+export class ErrorMsgObject {
+  title: string;
+  subtitle: string;
+  description: string;
+
+  constructor(title: string, subtitle: string, description: string) {
+    this.title = title;
+    this.subtitle = subtitle;
+    this.description = description;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.spec.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.spec.ts
new file mode 100644
index 0000000..faaef8d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.spec.ts
@@ -0,0 +1,38 @@
+import {TestBed, getTestBed } from '@angular/core/testing';
+import {ErrorMsgService} from "./error-msg.service";
+
+describe('Error msg Service', () => {
+  let injector;
+  let service: ErrorMsgService;
+
+  beforeAll(done => (async () => {
+
+    TestBed.configureTestingModule(
+      {
+        providers: [
+          ErrorMsgService
+        ]
+      });
+    await TestBed.compileComponents();
+    injector = getTestBed();
+    service = injector.get(ErrorMsgService);
+  })().then(done).catch(done.fail));
+
+  test('should return error msg object when call to getScalingErrorObject', () => {
+    let errorMsgObject = service.getScalingErrorObject();
+    expect(errorMsgObject).toBeDefined();
+    expect(errorMsgObject.title).toBe('Error : Too many members');
+    expect(errorMsgObject.subtitle).toBe('One or more VNF groups, marked below, exceeds the maximum allowed number of members to associate');
+    expect(errorMsgObject.description).toBe('Please make sure the total amount of VNF instances is less than that amount.');
+  });
+
+  test('should return error msg object when call to getRetryErrorObject', () => {
+    let errorMsgObject = service.getRetryErrorObject(1);
+    expect(errorMsgObject).toBeDefined();
+    expect(errorMsgObject.title).toBe('ERROR!');
+    expect(errorMsgObject.subtitle).toBe(`Attention: You are currently viewing instances from the MSO. \n 1 of the instances failed, please try again.`);
+    expect(errorMsgObject.description).toBe(null);
+  });
+
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.ts b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.ts
new file mode 100644
index 0000000..e1bcd42
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/error-msg/error-msg.service.ts
@@ -0,0 +1,22 @@
+import {Injectable} from '@angular/core';
+import {Subject} from 'rxjs/Subject';
+import {ErrorMsgObject} from "./error-msg.model";
+
+@Injectable()
+export class ErrorMsgService {
+  triggerShowError: Subject<ErrorMsgObject> = new Subject<ErrorMsgObject>();
+  triggerClearError: Subject<boolean> = new Subject<boolean>();
+  errorMsgObject: ErrorMsgObject = null;
+
+  getScalingErrorObject(): ErrorMsgObject {
+    return new ErrorMsgObject("Error : Too many members",
+      "One or more VNF groups, marked below, exceeds the maximum allowed number of members to associate",
+      "Please make sure the total amount of VNF instances is less than that amount.");
+  }
+
+  getRetryErrorObject(numberOfFailed: number): ErrorMsgObject {
+    return new ErrorMsgObject("ERROR!",
+      `Attention: You are currently viewing instances from the MSO. \n ${numberOfFailed} of the instances failed, please try again.`,
+      null);
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/error/error.component.service.ts b/vid-webpack-master/src/app/shared/components/error/error.component.service.ts
index 35b83f0..c573d16 100644
--- a/vid-webpack-master/src/app/shared/components/error/error.component.service.ts
+++ b/vid-webpack-master/src/app/shared/components/error/error.component.service.ts
@@ -1,18 +1,16 @@
 import {Injectable} from "@angular/core";
-import {Subject} from "rxjs/Subject";
-import { MessageBoxService } from '../messageBox/messageBox.service';
-import { MessageBoxData, ModalSize, ModalType } from '../messageBox/messageBox.data';
-
+import {MessageBoxService } from '../messageBox/messageBox.service';
+import {MessageBoxData} from '../messageBox/messageBox.data';
+import { SdcUiCommon} from "onap-ui-angular";
 @Injectable()
 export class ErrorService {
   static showErrorWithMessage(error : ErrorMessage) : void {
     setTimeout(()=>{
         let messageBoxData : MessageBoxData = new MessageBoxData(
-          error.title,  // modal title
+          error.title,
           error.text,
-
-          ModalType.error,
-          ModalSize.medium,
+          SdcUiCommon.ModalType.error,
+          SdcUiCommon.ModalSize.medium,
           [
             {text:"Close", size:"large", closeModal:true}
           ]);
@@ -33,3 +31,4 @@
     this.errorNumber = errorNumber;
   }
 }
+
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.html
new file mode 100644
index 0000000..26362eb
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.html
@@ -0,0 +1,11 @@
+<div class="details-item">
+  <input type="checkbox"
+         id="{{data?.dataTestId}}"
+         [attr.data-tests-id]="data?.dataTestId"
+         [checked]="data?.value"
+         name="{{data?.controlName}}"
+         [formControl]="form?.controls[data?.controlName]"
+         data-toggle="toggle">
+  <label class="checkbox-label"
+         for="{{data?.dataTestId}}">{{data?.displayName}}</label>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.ts
new file mode 100644
index 0000000..f9ba483
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/checkbox/checkbox.formControl.component.ts
@@ -0,0 +1,13 @@
+import {Component, Input} from "@angular/core";
+import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
+import {FormGroup} from "@angular/forms";
+
+@Component({
+  selector: 'checkbox-form-control',
+  templateUrl: './checkbox.formControl.component.html'
+})
+export class CheckboxFormControlComponent{
+  @Input() data: FormControlModel;
+  @Input() form: FormGroup;
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.html
new file mode 100644
index 0000000..6d13e52
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.html
@@ -0,0 +1,21 @@
+<div class="details-item" *ngIf="data != null && form != null">
+  <label [ngClass]="{'required': data.isRequired()}"
+         for="{{data?.dataTestId}}-select">{{data?.displayName}}:</label>
+  <select class="form-control input-text"
+          id="{{data?.dataTestId}}-select"
+          [attr.data-tests-id]="data?.dataTestId"
+          name="{{data?.name}}"
+          [formControl]="form.controls[data.controlName]"
+          [ngClass]="{'error-style' : (form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors) || data?.hasEmptyOptions ,
+                      'grayColor': form?.controls[data?.controlName]?.value == null || form?.controls[data?.controlName]?.value == undefined,
+                      'blackColor' : form?.controls[data?.controlName]?.value != null}"
+          (blur)="data.onBlur()">
+
+    <option [value]="null" hidden>{{data?.placeHolder}}</option>
+    <option *ngFor="let option of data?.options$ | orderBy : {property : 'name', direction : 1} ; let i = index" class="{{option?.id}} {{data?.dataTestId}}Option"
+            [value]="option[data.ngValue]" [disabled]="!option?.isPermitted && option?.isPermitted != undefined">{{option.name}}
+    </option>
+  </select>
+  <form-control-error *ngIf="data?.hasEmptyOptions" [message]="'No results for this request. Please change criteria.'"></form-control-error>
+</div>
+
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.scss b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.scss
new file mode 100644
index 0000000..9826332
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.scss
@@ -0,0 +1,7 @@
+.grayColor {
+  color: gray !important;
+}
+
+.blackColor {
+  color: black !important;
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.ts
new file mode 100644
index 0000000..550feca
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/dropdown/dropdown.formControl.component.ts
@@ -0,0 +1,27 @@
+import {Component, Input, OnChanges, SimpleChanges} from "@angular/core";
+import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model";
+import {FormGroup} from "@angular/forms";
+
+@Component({
+  selector: 'dropdown-form-control',
+  templateUrl: './dropdown.formControl.component.html',
+  styleUrls : ['./dropdown.formControl.component.scss']
+})
+export class DropdownFormControlComponent implements OnChanges{
+  @Input() data: DropdownFormControl = null;
+  @Input() form: FormGroup = null;
+
+  ngOnChanges(changes: SimpleChanges): void {
+    if (changes["data"] !== undefined && changes["data"].currentValue !== changes["data"].previousValue && changes["data"].firstChange) {
+      if(this.data.onInit){
+        this.data.onInit(this.data, this.form);
+      }
+    }
+
+    if (changes["data"] !== undefined) {
+      this.form.controls[this.data.controlName].valueChanges.subscribe((value)=>{
+        this.data.onChange(value, this.form);
+      })
+    }
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.html
new file mode 100644
index 0000000..bcbe91e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.html
@@ -0,0 +1,22 @@
+<div class="details-item file-form-control">
+  <label [ngClass]="{'required': data.isRequired()}" for="{{data?.controlName}}">{{data?.displayName}}:</label>
+  <label for="{{data?.controlName}}" class="file-input-wrapper" [ngClass]="{'file-uploaded': fileUploader.files && fileUploader.files[0] || data.selectedFile != data.placeHolder}">
+    <span data-tests-id="file-name" class="file-name">
+      {{ fileUploader.files && fileUploader.files[0] ? fileUploader.files[0].name : data.selectedFile}}
+    </span>
+     <input id="{{data?.controlName}}"
+           name="{{data?.controlName}}"
+           class="form-control input-text"
+           [formControl]="form?.controls[data?.controlName]"
+           [ngClass]="{'error-style' : form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors}"
+           type="file"
+           #fileUploader
+           accept="{{data?.acceptedExtentions}}"
+           (change)="data?.onChange($event.target.files, form)">
+    <input *ngFor="let hiddenFile of data?.hiddenFile" type="hidden" id="{{hiddenFile.controlName}}" name="{{hiddenFile.controlName}}"
+           [formControl]="form?.controls[hiddenFile.controlName]"/>
+    <span class="delete" data-tests-id="remove-uploaded-file" (click)="onDelete($event, data, form)">X</span>
+    <span class="icon-browse"></span>
+  </label>
+</div>
+
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.scss b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.scss
new file mode 100644
index 0000000..98fae02
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.scss
@@ -0,0 +1,87 @@
+.file-form-control{
+  label{
+    color: #191919;
+  }
+  input[type=file] {
+    opacity: 0;
+    flex: 0;
+  }
+  .file-input-wrapper{
+    display: flex;
+    background: #FFFFFF;
+    border: 1px solid #D2D2D2;
+    border-radius: 2px;
+    height: 38px;
+    &:hover{
+      cursor: pointer;
+      border: 1px solid #009FDB;
+        .icon-browse{
+          background: #E6F6FB;
+          border-left: 1px solid #009FDB;
+          &:before{
+            color: #009FDB;
+          }
+      }
+    }
+    &:active{
+      .icon-browse{
+        background: #1EB9F3;
+        border-left: 1px solid #009FDB;
+        &:before{
+          color: #ffffff;
+        }
+      }
+    }
+    .file-name {
+      font-family: OpenSans-Italic;
+      font-weight: normal;
+      font-size: 14px;
+      color: #959595;
+      margin: 9px;
+      width: 100%;
+    }
+    .icon-browse{
+      z-index: 1;
+      margin-left: auto;
+      margin-bottom: 0;
+      cursor: pointer;
+      content: "\e90d";
+      color: #5A5A5A;
+      font-size: 30px;
+      display: block;
+      text-align: center;
+      padding-top: 4px;
+      background: #F2F2F2;
+      border-left: 1px solid #D2D2D2;
+      width: 36px;
+      height:100%;
+      &:before{
+        content: "\e90d";
+        color: #5A5A5A;
+      }
+    }
+    .delete{
+      visibility: hidden;
+      cursor: pointer;
+      font-size: 14px;
+      margin-right: 10px;
+      margin-top: 9px;
+      color: #5a5a5a;
+      margin-left: 10px;
+      z-index: 1;
+      &:hover{
+        color: #000000;
+      }
+    }
+    &.file-uploaded{
+      .file-name{
+        font-family: OpenSans-Regular;
+        font-size: 14px;
+        color: #000000;
+      }
+      .delete{
+        visibility: visible;
+      }
+    }
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.spec.ts b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.spec.ts
new file mode 100644
index 0000000..e27f511
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.spec.ts
@@ -0,0 +1,62 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'
+import {FileFormControlComponent} from "./file.formControl.component";
+import {CommonModule} from "@angular/common";
+import {FormBuilder, FormControl, ReactiveFormsModule, Validators} from "@angular/forms";
+import {ValidatorModel, ValidatorOptions} from "../../../../models/formControlModels/formControl.model";
+import {FormControlMessageErrorComponent} from "../../errorMessage/formControlMessageError.component";
+import {BrowserModule} from "@angular/platform-browser";
+import {TooltipModule} from "ngx-tooltip";
+import {FileFormControl} from "../../../../models/formControlModels/fileFormControl.model";
+
+describe('File Form Control Component', () => {
+  let component: FileFormControlComponent;
+  let fixture: ComponentFixture<FileFormControlComponent>;
+  let fb: FormBuilder;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [CommonModule, BrowserModule, ReactiveFormsModule, TooltipModule],
+      providers: [FormBuilder],
+      declarations: [FileFormControlComponent, FormControlMessageErrorComponent],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA]
+    });
+    await TestBed.compileComponents();
+
+    fixture = TestBed.createComponent(FileFormControlComponent);
+    component = fixture.componentInstance;
+    fb = TestBed.get(FormBuilder);
+
+  })().then(done).catch(done.fail));
+
+  test('file component should initialize basic parameters', () => {
+    component.data = new FileFormControl({
+      displayName: "display Name",
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      dataTestId: "data-test-id",
+      placeHolder: "place holder",
+      controlName: 'testFile',
+      acceptedExtentions: "json"
+    });
+
+    component.form = fb.group({
+      'testFile': new FormControl({
+          value: component.data.selectedFile,
+          disabled: false
+        },
+        Validators.compose(component.data.validations.map(item => item.validator))
+      ),
+    });
+
+    component.data.onDelete = function () {
+      component.form.controls['testFile'].setValue('onDelete');
+    };
+
+    expect(component.form.controls['testFile'].value).toEqual("place holder");
+    let event = new Event("onDelete", null);
+    component.data.onDelete(event, component.data, component.form);
+    expect(component.form.controls['testFile'].value).toEqual('onDelete');
+  })
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.ts
new file mode 100644
index 0000000..2c21720
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/file.formControl.component.ts
@@ -0,0 +1,27 @@
+import {Component, ElementRef, Input, ViewChild} from "@angular/core";
+import {FormGroup} from "@angular/forms";
+import {FileFormControl} from "../../../../models/formControlModels/fileFormControl.model";
+
+@Component({
+  selector : 'file-form-control',
+  templateUrl : './file.formControl.component.html',
+  styleUrls : ['./file.formControl.component.scss']
+})
+
+export class FileFormControlComponent {
+  @Input() data: FileFormControl = null;
+  @Input() form: FormGroup;
+  @ViewChild('fileUploader')
+  fileUploader:ElementRef ;
+
+  onDelete(event, data, form) {
+    event.stopPropagation();
+    event.preventDefault();
+    form.value[data.controlName] = this.fileUploader.nativeElement.value = "";
+    data.selectedFile = data.placeHolder;
+    if (data.onDelete){
+      data.onDelete(form);
+    }
+
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/file/fileUnit.enum.ts b/vid-webpack-master/src/app/shared/components/formControls/component/file/fileUnit.enum.ts
new file mode 100644
index 0000000..d875e48
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/file/fileUnit.enum.ts
@@ -0,0 +1,7 @@
+export enum FileUnit {
+  b,
+  B,
+  KB,
+  MB,
+  GB
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.html
new file mode 100644
index 0000000..90ac7c6
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.html
@@ -0,0 +1,25 @@
+<div class="details-item" *ngIf="data?.isVisible">
+  <label
+    [tooltip]="data?.tooltip ? data.tooltip : null"
+    id="{{data?.dataTestId}}-label"
+    [ngClass]="{'required' : data?.isRequired()}">
+    {{data?.displayName}}: </label>
+  <input
+    #customInput
+
+    [disabled]="data?.isDisabled ? data.isDisabled : false"
+    [type]="data?.inputType ? data?.inputType : 'text'"
+    [attr.data-tests-id]="data?.dataTestId"
+    class="form-control input-text"
+    id="{{data?.dataTestId}}"
+    [placeholder]="data?.placeHolder ? data?.placeHolder : ''"
+    [formControl]="form?.controls[data?.controlName]"
+    [ngClass]="{'error-style' : form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors}"
+    minlength="{{data?.minLength}}"
+    maxlength="{{data?.maxLength}}"
+    (blur)="data.onBlur($event, form)"
+    (keypress)="data?.onKeypress($event)">
+</div>
+
+
+
diff --git a/vid-webpack-master/src/app/shared/directives/svg/svg.directive.html b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.scss
similarity index 100%
rename from vid-webpack-master/src/app/shared/directives/svg/svg.directive.html
rename to vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.scss
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.spec.ts b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.spec.ts
new file mode 100644
index 0000000..84d379d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.spec.ts
@@ -0,0 +1,68 @@
+import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'
+import {InputFormControlComponent} from "./input.formControl.component";
+import {CommonModule} from "@angular/common";
+import {FormBuilder, FormControl, ReactiveFormsModule, Validators} from "@angular/forms";
+import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
+import {ValidatorModel, ValidatorOptions} from "../../../../models/formControlModels/formControl.model";
+import {FormControlMessageErrorComponent} from "../../errorMessage/formControlMessageError.component";
+import {BrowserModule} from "@angular/platform-browser";
+import {TooltipModule} from "ngx-tooltip";
+
+describe('Input Form Control Component', () => {
+  let component: InputFormControlComponent;
+  let fixture: ComponentFixture<InputFormControlComponent>;
+  let fb: FormBuilder;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [CommonModule, BrowserModule, ReactiveFormsModule, TooltipModule],
+      providers: [FormBuilder],
+      declarations: [InputFormControlComponent, FormControlMessageErrorComponent],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA]
+    });
+    await TestBed.compileComponents();
+
+    fixture = TestBed.createComponent(InputFormControlComponent);
+    component = fixture.componentInstance;
+    fb = TestBed.get(FormBuilder);
+
+  })().then(done).catch(done.fail));
+
+  test('component should initialize basic parameters', () => {
+      component.data = new InputFormControl({
+        value: "value",
+        displayName: "display Name",
+        validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+        dataTestId: "data-test-id",
+        placeHolder: "place holder",
+        controlName: 'testInstanceName'
+      });
+
+      component.data.hasErrors = function () {
+        return this.formGroup.controls[this.controlName].touched && this.formGroup.controls[this.controlName].errors ? ['error-style'] : [];
+      };
+
+      component.data.onBlur = function () {
+        component.form.controls['testInstanceName'].setValue('onBlur');
+      };
+
+      component.form = fb.group({
+        'testInstanceName': new FormControl({
+          value: component.data.value,
+          disabled: false
+        }, Validators.compose(component.data.validations.map(item => item.validator)))
+      });
+
+
+      component.form.controls['testInstanceName'].setValue('newValue');
+      expect(component.form.controls['testInstanceName'].errors).toBeFalsy();
+      component.form.controls['testInstanceName'].setValue('');
+      expect(component.form.controls['testInstanceName'].errors.required).toBeTruthy();
+      component.data.onBlur();
+      expect(component.form.controls['testInstanceName'].value).toEqual('onBlur');
+      expect(component.form.controls['testInstanceName'].errors).toBeFalsy();
+    }
+  )
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.ts
new file mode 100644
index 0000000..1e8c281
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/input/input.formControl.component.ts
@@ -0,0 +1,18 @@
+import {Component, ElementRef, Input, ViewChild} from "@angular/core";
+import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
+import {FormGroup} from "@angular/forms";
+
+@Component({
+  selector : 'form-control-input',
+  templateUrl : './input.formControl.component.html',
+  styleUrls : ['./input.formControl.component.scss']
+})
+
+export class InputFormControlComponent{
+  @ViewChild('customInput') element:ElementRef;
+  @Input() data: InputFormControl = null;
+  @Input() form: FormGroup;
+
+
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.html
new file mode 100644
index 0000000..f7c4894
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.html
@@ -0,0 +1,16 @@
+<div>
+  <div class="details-item" *ngIf="data != null && form != null">
+    <label [ngClass]="{'required': data.isRequired()}"
+           for="{{data?.dataTestId}}">{{data?.displayName}}:</label>
+    <angular2-multiselect id="{{data?.dataTestId}}"
+                          [attr.data-tests-id]="data?.dataTestId"
+                          [formControl]="form.controls[data.controlName]"
+                          [(ngModel)]="data.selectedItems"
+                          [data]="data?.options$"
+                          [settings]="data?.settings"
+                          title="{{data.tooltip}}"
+                          [ngClass]="{'error-style' : form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors}">
+    </angular2-multiselect>
+  </div>
+</div>
+
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.spec.ts b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.spec.ts
new file mode 100644
index 0000000..81c8d46
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.spec.ts
@@ -0,0 +1,74 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {CUSTOM_ELEMENTS_SCHEMA} from '@angular/core'
+import {CommonModule} from "@angular/common";
+import {FormBuilder, FormControl, ReactiveFormsModule, Validators} from "@angular/forms";
+import {
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {FormControlMessageErrorComponent} from "../../errorMessage/formControlMessageError.component";
+import {BrowserModule} from "@angular/platform-browser";
+import {MultiselectFormControlComponent} from "./multiselect.formControl.component";
+import {MultiselectFormControl} from "../../../../models/formControlModels/multiselectFormControl.model";
+import { of } from "rxjs";
+describe('Dropdown Form Control Component', () => {
+  let component: MultiselectFormControlComponent;
+  let fixture: ComponentFixture<MultiselectFormControlComponent>;
+  let fb: FormBuilder;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [CommonModule, BrowserModule, ReactiveFormsModule],
+      providers: [FormBuilder],
+      declarations: [MultiselectFormControlComponent, FormControlMessageErrorComponent],
+      schemas: [CUSTOM_ELEMENTS_SCHEMA]
+    });
+    await TestBed.compileComponents();
+
+    fixture = TestBed.createComponent(MultiselectFormControlComponent);
+    component = fixture.componentInstance;
+    fb = TestBed.get(FormBuilder);
+
+  })().then(done).catch(done.fail));
+
+  test('component should initialize basic parameters', () => {
+      component.data = new MultiselectFormControl({
+        displayName: "display Name",
+        validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+        dataTestId: "data-test-id",
+        placeHolder: "place holder",
+        controlName: 'testDropdown',
+        options: of([
+          'option1',
+          'option2',
+          'option3',
+          'onBlur'
+        ])
+      });
+
+      component.data.hasErrors = function () {
+        return this.formGroup.controls[this.controlName].touched && this.formGroup.controls[this.controlName].errors ? ['error-style'] : [];
+      };
+
+      component.data.onBlur = function () {
+        component.form.controls['testDropdown'].setValue('onBlur');
+      };
+
+      component.form = fb.group({
+        'testDropdown': new FormControl({
+          value: component.data.value,
+          disabled: false
+        }, Validators.compose(component.data.validations.map(item => item.validator)))
+      });
+
+      component.form.controls['testDropdown'].setValue('');
+      expect(component.form.controls['testDropdown'].errors.required).toBeTruthy();
+      component.form.controls['testDropdown'].setValue('option2');
+      expect(component.form.controls['testDropdown'].errors).toBeFalsy();
+      component.data.onBlur();
+      expect(component.form.controls['testDropdown'].value).toEqual('onBlur');
+      expect(component.form.controls['testDropdown'].errors).toBeFalsy();
+    }
+  )
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.ts
new file mode 100644
index 0000000..4b98c7e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/multiselect/multiselect.formControl.component.ts
@@ -0,0 +1,20 @@
+import {Component, Input, OnChanges, SimpleChanges} from "@angular/core";
+import {FormGroup} from "@angular/forms";
+import {MultiselectFormControl} from "../../../../models/formControlModels/multiselectFormControl.model";
+
+@Component({
+  selector: 'multiselect-form-control',
+  templateUrl: './multiselect.formControl.component.html'
+})
+export class MultiselectFormControlComponent implements OnChanges{
+  @Input() data: MultiselectFormControl = null;
+  @Input() form: FormGroup = null;
+
+  ngOnChanges(changes: SimpleChanges): void {
+    if (changes["data"] !== undefined && changes["data"].currentValue !== changes["data"].previousValue && changes["data"].firstChange) {
+      if(this.data.onInit){
+        this.data.onInit(this.data, this.form);
+      }
+    }
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.html b/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.html
new file mode 100644
index 0000000..3763764
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.html
@@ -0,0 +1,13 @@
+<div>
+  <div class="details-item" *ngIf="data != null && form != null">
+    <label [ngClass]="{'required': data.isRequired()}"
+           for="{{data?.dataTestId}}">{{data?.displayName}}:</label>
+    <input id="{{data?.dataTestId}}" [attr.data-tests-id]="data?.dataTestId"
+           name="{{data?.controlName}}" class="form-control input-text"
+           [formControl]="form.controls[data.controlName]" type="number"
+           placeholder="{{data?.placeHolder}}" title="{{data?.tooltip}}"
+           [ngClass]="{'error-style' : form?.controls[data?.controlName]?.touched && form?.controls[data?.controlName]?.errors}"
+           min="{{data?.min}}" max="{{data?.max}}">
+  </div>
+</div>
+
diff --git a/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.ts b/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.ts
new file mode 100644
index 0000000..bd25ded
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/component/number/number.formControl.component.ts
@@ -0,0 +1,12 @@
+import {Component, Input} from "@angular/core";
+import {FormGroup} from "@angular/forms";
+import {NumberFormControl} from "../../../../models/formControlModels/numberFormControl.model";
+
+@Component({
+  selector: 'number-form-control',
+  templateUrl: './number.formControl.component.html'
+})
+export class NumberFormControlComponent {
+  @Input() data: NumberFormControl = null;
+  @Input() form: FormGroup = null;
+}
diff --git a/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.html b/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.html
new file mode 100644
index 0000000..4d89854
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.html
@@ -0,0 +1,5 @@
+<div  *ngIf="form != null && formControl != null && form.controls[formControl.controlName]?.errors">
+  <div *ngFor="let validatorModel of formControl?.validations">
+    <form-control-error *ngIf="form.controls[formControl?.controlName]?.errors[validatorModel?.validatorName]" [message]="validatorModel?.errorMsg"></form-control-error>
+  </div>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.ts b/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.ts
new file mode 100644
index 0000000..02ec57e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formControls/errorMessage/formControlMessageError.component.ts
@@ -0,0 +1,15 @@
+import {Component, Input, OnChanges, SimpleChanges} from "@angular/core";
+import {FormGroup} from "@angular/forms";
+import {FormControlModel} from "../../../models/formControlModels/formControl.model";
+
+@Component({
+  selector : 'form-control-message-error',
+  templateUrl : './formControlMessageError.component.html'
+})
+export class FormControlMessageErrorComponent implements OnChanges{
+  @Input() formControl: FormControlModel = null;
+  @Input() form: FormGroup = null;
+
+  ngOnChanges(changes: SimpleChanges): void {
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss
index 5271cad..988d12c 100644
--- a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss
+++ b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.component.scss
@@ -32,6 +32,7 @@
 
 .parentbox {
   padding-right: 0;
+  line-height: 67px;
 }
 
 .parentbox:before {
diff --git a/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.service.ts b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.service.ts
new file mode 100644
index 0000000..1550e08
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/formGeneralErrors/formGeneralErrors.service.ts
@@ -0,0 +1,7 @@
+import {Injectable} from "@angular/core";
+import {Subject} from "rxjs";
+
+@Injectable()
+export class FormGeneralErrorsService {
+  static checkForErrorTrigger : Subject<boolean> = new Subject<boolean>();
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.spec.ts
new file mode 100644
index 0000000..4189fba
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.spec.ts
@@ -0,0 +1,48 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {AaiService} from "../../../services/aaiService/aai.service";
+import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../../models/formControlModels/formControl.model";
+import {FeatureFlagsService} from "../../../services/featureFlag/feature-flags.service";
+import {BasicControlGenerator} from "./basic.control.generator";
+import {NgRedux} from '@angular-redux/store';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+
+class MockAppStore<T> {}
+
+class MockFeatureFlagsService {}
+
+describe('Basic Control Generator', () => {
+  let injector;
+  let service: BasicControlGenerator;
+  let httpMock: HttpTestingController;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [BasicControlGenerator,
+        AaiService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockAppStore}]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(BasicControlGenerator);
+    httpMock = injector.get(HttpTestingController);
+
+  })().then(done).catch(done.fail));
+
+
+  test('getlegacyRegion with JANET25 - isVisible true', () => {
+    const instance = {lcpCloudRegionId : 'JANET25'};
+    const legacyRegionControl: FormControlModel = service.getLegacyRegion(instance);
+    expect(legacyRegionControl.isVisible).toBeTruthy();
+  });
+
+  test('getlegacyRegion without JANET25 - isVisible false', () => {
+    const instance = {lcpCloudRegionId : 'olson3'};
+    const legacyRegionControl: FormControlModel = service.getLegacyRegion(instance);
+    expect(legacyRegionControl.isVisible).toBeFalsy();
+  });
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.ts
new file mode 100644
index 0000000..cbbff3c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/basic.control.generator.ts
@@ -0,0 +1,240 @@
+import {Injectable} from "@angular/core";
+import {DropdownFormControl} from "../../../models/formControlModels/dropdownFormControl.model";
+import {FormGroup} from "@angular/forms";
+import {
+  CustomValidatorOptions,
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../models/formControlModels/formControl.model";
+import {InputFormControl} from "../../../models/formControlModels/inputFormControl.model";
+import {AppState} from "../../../store/reducers";
+import {NgRedux} from "@angular-redux/store";
+import {NumberFormControl} from "../../../models/formControlModels/numberFormControl.model";
+import {FormControlType} from "../../../models/formControlModels/formControlTypes.enum";
+import {FileFormControl} from "../../../models/formControlModels/fileFormControl.model";
+import {SelectOption} from "../../../models/selectOption";
+import * as _ from 'lodash';
+import {DynamicInputLabelPipe} from "../../../pipes/dynamicInputLabel/dynamic-input-label.pipe";
+import {AaiService} from "../../../services/aaiService/aai.service";
+import {FormGeneralErrorsService} from "../../formGeneralErrors/formGeneralErrors.service";
+import {Observable, of} from "rxjs";
+import {NodeModel} from "../../../models/nodeModel";
+import {Constants} from "../../../utils/constants";
+
+
+@Injectable()
+export class BasicControlGenerator {
+
+  public static readonly INSTANCE_NAME_REG_EX:RegExp = /^[a-zA-Z0-9._-]*$/;
+  public static readonly GENERATED_NAME_REG_EX:RegExp = /[^a-zA-Z0-9._-]/g;
+
+  constructor(private _store : NgRedux<AppState>,
+              private _aaiService : AaiService){}
+  getSubscribeResult(subscribeFunction : Function, control : DropdownFormControl) : Observable<any>{
+    return subscribeFunction(this).subscribe((res) => {
+      control.options$ = res;
+      control.hasEmptyOptions = res.length === 0;
+      FormGeneralErrorsService.checkForErrorTrigger.next();
+      return of(res);
+    });
+  }
+
+  getSubscribeInitResult(subscribeFunction : Function, control : DropdownFormControl, form : FormGroup) : Observable<any>{
+    return subscribeFunction(this).subscribe((res) => {
+      if(!_.isNil(control['onInitSelectedField'])){
+        let result = res;
+        for(let key of control['onInitSelectedField']){
+          result = !_.isNil(result[key]) ? result[key] : [];
+        }
+        control.options$ = result;
+        control.hasEmptyOptions = _.isNil(result) || result.length === 0;
+      } else{
+        control.options$ = !_.isNil(res) ? res : [];
+        control.hasEmptyOptions = _.isNil(res) || res.length === 0;
+      }
+
+      FormGeneralErrorsService.checkForErrorTrigger.next();
+      return of(res);
+    });
+  }
+
+  getInstanceNameController(instance: any, serviceId: string, isEcompGeneratedNaming: boolean, model: NodeModel): FormControlModel {
+    let validations: ValidatorModel[] = this.createValidationsForInstanceName(instance, serviceId, isEcompGeneratedNaming);
+    return new InputFormControl({
+      controlName: 'instanceName',
+      displayName: 'Instance name',
+      dataTestId: 'instanceName',
+      placeHolder: (!isEcompGeneratedNaming) ? 'Instance name' : 'Automatically generated when not provided',
+      validations: validations,
+      isVisible : true,
+      value : (!isEcompGeneratedNaming || (!_.isNil(instance) && !_.isNil(instance.instanceName)))
+        ? this.getDefaultInstanceName(instance, model) : null,
+      onKeypress : (event) => {
+        const pattern:RegExp = BasicControlGenerator.INSTANCE_NAME_REG_EX;
+        if(pattern){
+          if(!pattern.test(event['key'])){
+            event.preventDefault();
+          }
+        }
+        return event;
+      }
+    });
+  }
+
+  getInstanceName(instance : any, serviceId : string, isEcompGeneratedNaming: boolean): FormControlModel {
+    let formControlModel:FormControlModel = this.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, new NodeModel());
+    formControlModel.value = instance ? instance.instanceName : null;
+    return formControlModel;
+  }
+
+  isLegacyRegionShouldBeVisible(instance : any) : boolean {
+    if(!_.isNil(instance) && !_.isNil(instance.lcpCloudRegionId))  {
+      return Constants.LegacyRegion.MEGA_REGION.indexOf(instance.lcpCloudRegionId) !== -1;
+    }
+    return false;
+  }
+
+  getLegacyRegion(instance: any): FormControlModel {
+    return new InputFormControl({
+      controlName: 'legacyRegion',
+      displayName: 'Legacy Region',
+      dataTestId: 'lcpRegionText',
+      placeHolder: 'Type Legacy Region',
+      validations: [],
+      isVisible: this.isLegacyRegionShouldBeVisible(instance),
+      isDisabled : _.isNil(instance) ? true : Constants.LegacyRegion.MEGA_REGION.indexOf(instance.lcpCloudRegionId),
+      value: instance ? instance.legacyRegion : null
+    });
+  }
+
+  private createValidationsForInstanceName(instance: any, serviceId: string, isEcompGeneratedNaming: boolean): ValidatorModel[] {
+    let validations: ValidatorModel[] = [
+      new ValidatorModel(ValidatorOptions.pattern, 'Instance name may include only alphanumeric characters and underscore.', BasicControlGenerator.INSTANCE_NAME_REG_EX),
+      new ValidatorModel(CustomValidatorOptions.uniqueInstanceNameValidator, 'some error', [this._store, serviceId, instance && instance.instanceName])
+    ];
+    if (!isEcompGeneratedNaming) {
+      validations.push(new ValidatorModel(ValidatorOptions.required, 'is required'));
+    }
+    return validations;
+  }
+
+  getInputsOptions = (options: any[]) : Observable<SelectOption[]> =>{
+    let optionList: SelectOption[] = [];
+    options.forEach((option) => {
+      optionList.push(new SelectOption({
+        id: option.id || option.name,
+        name: option.name
+      }));
+    });
+    return of(optionList);
+  };
+
+  getProductFamilyControl = (instance : any, controls : FormControlModel[], isMandatory?: boolean) : DropdownFormControl => {
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : 'productFamilyId',
+      displayName : 'Product family',
+      dataTestId : 'productFamily',
+      placeHolder : 'Select Product Family',
+      isDisabled : false,
+      name : "product-family-select",
+      value : instance ? instance.productFamilyId : null,
+      validations : _.isNil(isMandatory) || isMandatory === true ? [new ValidatorModel(ValidatorOptions.required, 'is required')]: [],
+      onInit : this.getSubscribeResult.bind(this, this._aaiService.getProductFamilies),
+    })
+  };
+
+
+
+  getDynamicInputsByType(dynamicInputs : any, serviceModelId : string, storeKey : string, type: string ) : FormControlModel[] {
+    let result : FormControlModel[] = [];
+    if(dynamicInputs) {
+      let nodeInstance = null;
+      if (_.has(this._store.getState().service.serviceInstance[serviceModelId][type], storeKey)) {
+        nodeInstance = Object.assign({}, this._store.getState().service.serviceInstance[serviceModelId][type][storeKey]);
+      }
+      result = this.getDynamicInputs(dynamicInputs, nodeInstance);
+    }
+    return result;
+  }
+
+
+  getServiceDynamicInputs(dynamicInputs : any, serviceModelId : string) : FormControlModel[] {
+    let result: FormControlModel[] = [];
+    if (dynamicInputs) {
+      let serviceInstance = null;
+      if (_.has(this._store.getState().service.serviceInstance, serviceModelId)) {
+        serviceInstance = Object.assign({}, this._store.getState().service.serviceInstance[serviceModelId]);
+      }
+      result = this.getDynamicInputs(dynamicInputs, serviceInstance);
+    }
+    return result;
+  }
+
+  getDynamicInputs(dynamicInputs : any, instance :any)  : FormControlModel[]{
+    let result : FormControlModel[] = [];
+    if(dynamicInputs) {
+      dynamicInputs.forEach((input)=> {
+        let validations: ValidatorModel[] = [];
+        if(input.isRequired) {
+          validations.push(new ValidatorModel(ValidatorOptions.required, 'is required'))
+        }
+        if(input.minLength) {
+          validations.push(new ValidatorModel(ValidatorOptions.minLength, '', input.minLength))
+        }
+        if(input.maxLength) {
+          validations.push(new ValidatorModel(ValidatorOptions.maxLength, '', input.maxLength))
+        }
+
+        let dynamicInputLabelPipe: DynamicInputLabelPipe = new DynamicInputLabelPipe();
+        let data:any = {
+          controlName: input.name,
+          displayName: dynamicInputLabelPipe.transform(input.name).slice(0, -1),
+          dataTestId: input.id,
+          placeHolder: input.prompt,
+          tooltip: input.description,
+          validations: validations,
+          isVisible: input.isVisible,
+          value: !_.isNil(instance) && !_.isNil(instance.instanceParams) && instance.instanceParams.length > 0 ? instance.instanceParams[0][input.name] : input.value
+        };
+
+        switch (input.type) {
+          case 'select' :
+          case 'boolean' :{
+            data.value = data.value || input.optionList.filter((option) => option.isDefault ? option.id || option.name: null);
+            data.onInit  = this.getSubscribeInitResult.bind(null, this.getInputsOptions.bind(this, input.optionList));
+            result.push(new DropdownFormControl(data));
+            break;
+          }
+          case 'checkbox': {
+            data.type = FormControlType.CHECKBOX;
+            result.push(new FormControlModel(data));
+            break;
+          }
+          case 'number': {
+            data.min = input.min;
+            data.max = input.max;
+            result.push(new NumberFormControl(data));
+            break;
+          }
+          case 'file': {
+            result.push(new FileFormControl(data));
+            break;
+          }
+          default: {
+            result.push(new InputFormControl(data));
+          }
+        }
+      })
+    }
+
+    return result;
+  }
+
+  getDefaultInstanceName(instance: any, model: NodeModel) : string {
+    const initialInstanceName = (!_.isNil(instance) && instance.instanceName) || (!_.isNil(model.name) ? model.name.replace(BasicControlGenerator.GENERATED_NAME_REG_EX, "") : model.name);
+    return initialInstanceName;
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.spec.ts
new file mode 100644
index 0000000..97c6ddf
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.spec.ts
@@ -0,0 +1,1979 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {NgRedux} from '@angular-redux/store';
+import {BasicControlGenerator} from "../basic.control.generator";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {GenericFormService} from "../../generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {LogService} from "../../../../utils/log/log.service";
+import {FormControlNames, NetworkControlGenerator} from "./network.control.generator";
+import {
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+
+class MockAppStore<T> {
+  getState(){
+  return {
+  "global": {
+    "name": null,
+    "flags": {
+      "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+      "FLAG_SHOW_ASSIGNMENTS": true,
+      "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+      "FLAG_UNASSIGN_SERVICE": true,
+      "FLAG_SHOW_VERIFY_SERVICE": false,
+      "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+      "FLAG_DUPLICATE_VNF": true,
+      "FLAG_SERVICE_MODEL_CACHE": true,
+      "CREATE_INSTANCE_TEST": false,
+      "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+      "FLAG_ASYNC_INSTANTIATION": true,
+      "FLAG_ASYNC_JOBS": true,
+      "EMPTY_DRAWING_BOARD_TEST": false,
+      "FLAG_ADD_MSO_TESTAPI_FIELD": true
+    },
+    "type": "[FLAGS] Update"
+  },
+  "service": {
+    "serviceHierarchy": {
+      "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+        "service": {
+          "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+          "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+          "name": "ComplexService",
+          "version": "1.0",
+          "toscaModelURL": null,
+          "category": "Emanuel",
+          "serviceType": "",
+          "serviceRole": "",
+          "description": "ComplexService",
+          "serviceEcompNaming": "false",
+          "instantiationType": "Macro",
+          "inputs": {}
+        },
+        "vnfs": {
+          "VF_vMee 0": {
+            "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+            "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+            "description": "VSP_vMee",
+            "name": "VF_vMee",
+            "version": "2.0",
+            "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+            "inputs": {},
+            "commands": {},
+            "properties": {
+              "max_instances": 10,
+              "min_instances": 1,
+              "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+              "sctp-b-ipv6-egress_src_start_port": "0",
+              "sctp-a-ipv6-egress_rule_application": "any",
+              "Internal2_allow_transit": "true",
+              "sctp-b-IPv6_ethertype": "IPv6",
+              "sctp-a-egress_rule_application": "any",
+              "sctp-b-ingress_action": "pass",
+              "sctp-b-ingress_rule_protocol": "icmp",
+              "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+              "sctp-b-ipv6-ingress-src_start_port": "0.0",
+              "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+              "fsb_volume_size_0": "320.0",
+              "sctp-b-egress_src_addresses": "local",
+              "sctp-a-ipv6-ingress_ethertype": "IPv4",
+              "sctp-a-ipv6-ingress-dst_start_port": "0",
+              "sctp-b-ipv6-ingress_rule_application": "any",
+              "domain_name": "default-domain",
+              "sctp-a-ingress_rule_protocol": "icmp",
+              "sctp-b-egress-src_start_port": "0.0",
+              "sctp-a-egress_src_addresses": "local",
+              "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+              "sctp-a-egress-src_start_port": "0.0",
+              "sctp-a-ingress_ethertype": "IPv4",
+              "sctp-b-ipv6-ingress-dst_end_port": "65535",
+              "sctp-b-dst_subnet_prefix_v6": "::",
+              "nf_naming": "{ecomp_generated_naming=true}",
+              "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+              "sctp-b-egress-dst_start_port": "0.0",
+              "ncb_flavor_name": "nv.c20r64d1",
+              "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+              "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+              "Internal2_net_cidr": "10.0.0.10",
+              "sctp-a-ingress-dst_start_port": "0.0",
+              "sctp-a-egress-dst_start_port": "0.0",
+              "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+              "sctp-a-egress_ethertype": "IPv4",
+              "vlc_st_service_mode": "in-network-nat",
+              "sctp-a-ipv6-egress_ethertype": "IPv4",
+              "sctp-a-egress-src_end_port": "65535.0",
+              "sctp-b-ipv6-egress_rule_application": "any",
+              "sctp-b-egress_action": "pass",
+              "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+              "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+              "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+              "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+              "sctp-a-ipv6-ingress-src_start_port": "0.0",
+              "sctp-b-ipv6-egress_ethertype": "IPv4",
+              "Internal1_net_cidr": "10.0.0.10",
+              "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+              "fsb_flavor_name": "nv.c20r64d1",
+              "sctp_rule_protocol": "132",
+              "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+              "sctp-a-ipv6-ingress_rule_application": "any",
+              "ecomp_generated_naming": "false",
+              "sctp-a-IPv6_ethertype": "IPv6",
+              "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+              "vlc_st_virtualization_type": "virtual-machine",
+              "sctp-b-ingress-dst_start_port": "0.0",
+              "sctp-b-ingress-dst_end_port": "65535.0",
+              "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+              "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+              "sctp-b-ingress_rule_application": "any",
+              "int2_sec_group_name": "int2-sec-group",
+              "vlc_flavor_name": "nd.c16r64d1",
+              "sctp-b-ipv6-egress_src_addresses": "local",
+              "vlc_st_interface_type_int1": "other1",
+              "sctp-b-egress-src_end_port": "65535.0",
+              "sctp-a-ipv6-egress-dst_start_port": "0",
+              "vlc_st_interface_type_int2": "other2",
+              "sctp-a-ipv6-egress_rule_protocol": "any",
+              "Internal2_shared": "false",
+              "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+              "Internal2_rpf": "disable",
+              "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+              "sctp-b-ipv6-egress_src_end_port": "65535",
+              "sctp-a-ipv6-egress_src_addresses": "local",
+              "sctp-a-ingress-dst_end_port": "65535.0",
+              "sctp-a-ipv6-egress_src_end_port": "65535",
+              "Internal1_forwarding_mode": "l2",
+              "Internal2_dhcp": "false",
+              "sctp-a-dst_subnet_prefix_v6": "::",
+              "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+              "vlc_st_interface_type_gtp": "other0",
+              "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+              "sctp-b-src_subnet_prefix_v6": "::",
+              "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+              "int1_sec_group_name": "int1-sec-group",
+              "Internal1_dhcp": "false",
+              "sctp-a-ipv6-egress_dst_end_port": "65535",
+              "Internal2_forwarding_mode": "l2",
+              "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+              "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+              "Internal1_net_cidr_len": "17",
+              "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+              "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+              "sctp-a-ingress_dst_addresses": "local",
+              "sctp-a-egress_action": "pass",
+              "fsb_volume_type_0": "SF-Default-SSD",
+              "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+              "vlc_st_interface_type_sctp_a": "left",
+              "vlc_st_interface_type_sctp_b": "right",
+              "sctp-a-src_subnet_prefix_v6": "::",
+              "vlc_st_version": "2",
+              "sctp-b-egress_ethertype": "IPv4",
+              "sctp-a-ingress_rule_application": "any",
+              "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+              "instance_ip_family_v6": "v6",
+              "sctp-a-ipv6-egress_src_start_port": "0",
+              "sctp-b-ingress-src_start_port": "0.0",
+              "sctp-b-ingress_dst_addresses": "local",
+              "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+              "vlc_st_interface_type_oam": "management",
+              "multi_stage_design": "true",
+              "oam_sec_group_name": "oam-sec-group",
+              "Internal2_net_gateway": "10.0.0.10",
+              "sctp-a-ipv6-ingress-dst_end_port": "65535",
+              "sctp-b-ipv6-egress-dst_start_port": "0",
+              "Internal1_net_gateway": "10.0.0.10",
+              "sctp-b-ipv6-egress_rule_protocol": "any",
+              "gtp_sec_group_name": "gtp-sec-group",
+              "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+              "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+              "sctp-a-ipv6-ingress_dst_addresses": "local",
+              "sctp-a-egress_rule_protocol": "icmp",
+              "sctp-b-ipv6-egress_action": "pass",
+              "sctp-a-ipv6-egress_action": "pass",
+              "Internal1_shared": "false",
+              "sctp-b-ipv6-ingress_rule_protocol": "any",
+              "Internal2_net_cidr_len": "17",
+              "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+              "sctp-a-ingress-src_end_port": "65535.0",
+              "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+              "sctp-a-egress-dst_end_port": "65535.0",
+              "sctp-a-ingress_action": "pass",
+              "sctp-b-egress_rule_protocol": "icmp",
+              "sctp-b-ipv6-ingress_action": "pass",
+              "vlc_st_service_type": "firewall",
+              "sctp-b-ipv6-egress_dst_end_port": "65535",
+              "sctp-b-ipv6-ingress-dst_start_port": "0",
+              "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+              "vlc_st_availability_zone": "true",
+              "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+              "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+              "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+              "Internal1_allow_transit": "true",
+              "gpb_flavor_name": "nv.c20r64d1",
+              "availability_zone_max_count": "1",
+              "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+              "sctp-b-ipv6-ingress_dst_addresses": "local",
+              "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+              "sctp-b-ipv6-ingress_ethertype": "IPv4",
+              "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+              "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+              "sctp-a-ipv6-ingress_action": "pass",
+              "Internal1_rpf": "disable",
+              "sctp-b-ingress_ethertype": "IPv4",
+              "sctp-b-egress_rule_application": "any",
+              "sctp-b-ingress-src_end_port": "65535.0",
+              "sctp-a-ipv6-ingress_rule_protocol": "any",
+              "sctp-a-ingress-src_start_port": "0.0",
+              "sctp-b-egress-dst_end_port": "65535.0"
+            },
+            "type": "VF",
+            "modelCustomizationName": "VF_vMee 0",
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "vfcInstanceGroups": {}
+          }
+        },
+        "networks": {
+          "ExtVL 0": {
+            "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+            "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+            "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+            "name": "ExtVL",
+            "version": "37.0",
+            "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+            "inputs": {},
+            "commands": {},
+            "properties": {
+              "ecomp_generated_naming" : "false",
+              "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+              "exVL_naming": "{ecomp_generated_naming=true}",
+              "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+              "network_homing": "{ecomp_selected_instance_node_target=false}"
+            },
+            "type": "VL",
+            "modelCustomizationName": "ExtVL 0"
+          },
+          "ExtVL 1": {
+            "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b987",
+            "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+            "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+            "name": "ExtVL1",
+            "version": "37.0",
+            "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+            "inputs": {},
+            "commands": {},
+            "properties": {
+              "ecomp_generated_naming" : "true",
+              "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+              "exVL_naming": "{ecomp_generated_naming=true}",
+              "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+              "network_homing": "{ecomp_selected_instance_node_target=false}"
+            },
+            "type": "VL",
+            "modelCustomizationName": "ExtVL 0"
+          }
+        },
+        "collectionResource": {},
+        "configurations": {
+          "Port Mirroring Configuration By Policy 0": {
+            "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+            "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+            "description": "A port mirroring configuration by policy object",
+            "name": "Port Mirroring Configuration By Policy",
+            "version": "27.0",
+            "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+            "inputs": {},
+            "commands": {},
+            "properties": {},
+            "type": "Configuration",
+            "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+            "sourceNodes": [],
+            "collectorNodes": null,
+            "configurationByPolicy": false
+          }
+        },
+        "serviceProxies": {},
+        "vfModules": {
+          "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+            "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+            "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+            "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+            "description": null,
+            "name": "VfVmee..vmme_vlc..module-1",
+            "version": "2",
+            "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+            "properties": {
+              "minCountInstances": 0,
+              "maxCountInstances": null,
+              "initialCount": 0,
+              "vfModuleLabel": "vmme_vlc"
+            },
+            "inputs": {},
+            "volumeGroupAllowed": true
+          },
+          "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+            "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+            "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+            "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+            "description": null,
+            "name": "VfVmee..vmme_gpb..module-2",
+            "version": "2",
+            "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+            "properties": {
+              "minCountInstances": 0,
+              "maxCountInstances": null,
+              "initialCount": 0,
+              "vfModuleLabel": "vmme_gpb"
+            },
+            "inputs": {},
+            "volumeGroupAllowed": false
+          },
+          "vf_vmee0..VfVmee..base_vmme..module-0": {
+            "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+            "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+            "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+            "description": null,
+            "name": "VfVmee..base_vmme..module-0",
+            "version": "2",
+            "modelCustomizationName": "VfVmee..base_vmme..module-0",
+            "properties": {
+              "minCountInstances": 1,
+              "maxCountInstances": 1,
+              "initialCount": 1,
+              "vfModuleLabel": "base_vmme"
+            },
+            "inputs": {},
+            "volumeGroupAllowed": true
+          }
+        },
+        "volumeGroups": {
+          "vf_vmee0..VfVmee..base_vmme..module-0": {
+            "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+            "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+            "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+            "description": null,
+            "name": "VfVmee..base_vmme..module-0",
+            "version": "2",
+            "modelCustomizationName": "VfVmee..base_vmme..module-0",
+            "properties": {
+              "minCountInstances": 1,
+              "maxCountInstances": 1,
+              "initialCount": 1,
+              "vfModuleLabel": "base_vmme"
+            },
+            "inputs": {}
+          }
+        },
+        "pnfs": {}
+      }
+    },
+    "serviceInstance": {
+      "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+        "networks" : {},
+        "vnfs": {
+          "VF_vMee 0": {
+            "rollbackOnFailure": "true",
+            "vfModules": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                  "isMissingData": false,
+                  "sdncPreReload": null,
+                  "modelInfo": {
+                    "modelType": "VFmodule",
+                    "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "modelName": "VfVmee..base_vmme..module-0",
+                    "modelVersion": "2",
+                    "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                  },
+                  "instanceParams": [
+                    {}
+                    ],
+                  "trackById": "wmtm6sy2uj"
+                }
+              }
+            },
+            "isMissingData": true,
+            "originalName": "VF_vMee 0",
+            "vnfStoreKey": "VF_vMee 0",
+            "trackById": "p3wk448m5do",
+            "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": null,
+            "tenantId": null,
+            "lineOfBusiness": null,
+            "platformName": null,
+            "modelInfo": {
+              "modelType": "VF",
+              "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "VF_vMee",
+              "modelVersion": "2.0",
+              "modelCustomizationName": "VF_vMee 0"
+            }
+          }
+        },
+        "instanceParams": [
+          {}
+          ],
+        "validationCounter": 1,
+        "existingNames": {},
+        "existingVNFCounterMap": {
+          "d6557200-ecf2-4641-8094-5393ae3aae60": 1
+        },
+        "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+        "subscriptionServiceType": "TYLER SILVIA",
+        "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+        "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+        "lcpCloudRegionId": "hvf6",
+        "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+        "aicZoneId": "JAG1",
+        "projectName": "x1",
+        "rollbackOnFailure": "true",
+        "bulkSize": 1,
+        "modelInfo": {
+          "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+          "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+          "modelName": "ComplexService",
+          "modelVersion": "1.0",
+          "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+        },
+        "isALaCarte": false,
+        "name": "ComplexService",
+        "version": "1.0",
+        "description": "ComplexService",
+        "category": "Emanuel",
+        "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+        "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+        "serviceType": "",
+        "serviceRole": "",
+        "isMultiStepDesign": false
+      }
+    },
+    "lcpRegionsAndTenants": {
+      "lcpRegionList": [
+        {
+          "id": "JANET25",
+          "name": "JANET25",
+          "isPermitted": true
+        },
+        {
+          "id": "hvf6",
+          "name": "hvf6",
+          "isPermitted": true
+        }
+        ],
+      "lcpRegionsTenantsMap": {
+        "JANET25": [
+          {
+            "id": "092eb9e8e4b7412e8787dd091bc58e86",
+            "name": "USP-SIP-IC-24335-T-01",
+            "isPermitted": true
+          }
+          ],
+        "hvf6": [
+          {
+            "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+            "name": "AIN Web Tool-15-D-testalexandria",
+            "isPermitted": true
+          },
+          {
+            "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "name": "AIN Web Tool-15-D-STTest2",
+            "isPermitted": true
+          },
+          {
+            "id": "1178612d2b394be4834ad77f567c0af2",
+            "name": "AIN Web Tool-15-D-SSPtestcustome",
+            "isPermitted": true
+          },
+          {
+            "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+            "name": "AIN Web Tool-15-D-UncheckedEcopm",
+            "isPermitted": true
+          },
+          {
+            "id": "de007636e25249238447264a988a927b",
+            "name": "AIN Web Tool-15-D-dfsdf",
+            "isPermitted": true
+          },
+          {
+            "id": "62f29b3613634ca6a3065cbe0e020c44",
+            "name": "AIN/SMS-16-D-Multiservices1",
+            "isPermitted": true
+          },
+          {
+            "id": "649289e30d3244e0b48098114d63c2aa",
+            "name": "AIN Web Tool-15-D-SSPST66",
+            "isPermitted": true
+          },
+          {
+            "id": "3f21eeea6c2c486bba31dab816c05a32",
+            "name": "AIN Web Tool-15-D-ASSPST47",
+            "isPermitted": true
+          },
+          {
+            "id": "f60ce21d3ee6427586cff0d22b03b773",
+            "name": "CESAR-100-D-sspjg67246",
+            "isPermitted": true
+          },
+          {
+            "id": "8774659e425f479895ae091bb5d46560",
+            "name": "CESAR-100-D-sspjg68359",
+            "isPermitted": true
+          },
+          {
+            "id": "624eb554b0d147c19ff8885341760481",
+            "name": "AINWebTool-15-D-iftach",
+            "isPermitted": true
+          },
+          {
+            "id": "214f55f5fc414c678059c383b03e4962",
+            "name": "CESAR-100-D-sspjg612401",
+            "isPermitted": true
+          },
+          {
+            "id": "c90666c291664841bb98e4d981ff1db5",
+            "name": "CESAR-100-D-sspjg621340",
+            "isPermitted": true
+          },
+          {
+            "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+            "name": "sspjg621351cloned",
+            "isPermitted": true
+          },
+          {
+            "id": "b386b768a3f24c8e953abbe0b3488c02",
+            "name": "AINWebTool-15-D-eteancomp",
+            "isPermitted": true
+          },
+          {
+            "id": "dc6c4dbfd225474e9deaadd34968646c",
+            "name": "AINWebTool-15-T-SPFET",
+            "isPermitted": true
+          },
+          {
+            "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+            "name": "AINWebTool-15-X-eeweww",
+            "isPermitted": true
+          },
+          {
+            "id": "f2f3830e4c984d45bcd00e1a04158a79",
+            "name": "CESAR-100-D-spjg61909",
+            "isPermitted": true
+          },
+          {
+            "id": "05b91bd5137f4929878edd965755c06d",
+            "name": "CESAR-100-D-sspjg621512cloned",
+            "isPermitted": true
+          },
+          {
+            "id": "7002fbe8482d4a989ddf445b1ce336e0",
+            "name": "AINWebTool-15-X-vdr",
+            "isPermitted": true
+          },
+          {
+            "id": "4008522be43741dcb1f5422022a2aa0b",
+            "name": "AINWebTool-15-D-ssasa",
+            "isPermitted": true
+          },
+          {
+            "id": "f44e2e96a1b6476abfda2fa407b00169",
+            "name": "AINWebTool-15-D-PFNPT",
+            "isPermitted": true
+          },
+          {
+            "id": "b69a52bec8a84669a37a1e8b72708be7",
+            "name": "AINWebTool-15-X-vdre",
+            "isPermitted": true
+          },
+          {
+            "id": "fac7d9fd56154caeb9332202dcf2969f",
+            "name": "AINWebTool-15-X-NONPODECOMP",
+            "isPermitted": true
+          },
+          {
+            "id": "2d34d8396e194eb49969fd61ffbff961",
+            "name": "DN5242-Nov16-T5",
+            "isPermitted": true
+          },
+          {
+            "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+            "name": "ro-T11",
+            "isPermitted": true
+          },
+          {
+            "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+            "name": "ro-T112",
+            "isPermitted": true
+          },
+          {
+            "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+            "name": "DN5242-Nov21-T1",
+            "isPermitted": true
+          },
+          {
+            "id": "d0a3e3f2964542259d155a81c41aadc3",
+            "name": "test-hvf6-09",
+            "isPermitted": true
+          },
+          {
+            "id": "cbb99fe4ada84631b7baf046b6fd2044",
+            "name": "DN5242-Nov16-T3",
+            "isPermitted": true
+          }
+          ]
+      }
+    },
+    "productFamilies": [
+      {
+        "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+        "name": "SCOTTIE",
+        "isPermitted": true
+      },
+      {
+        "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+        "name": "IGNACIO",
+        "isPermitted": true
+      },
+      {
+        "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+        "name": "Christie",
+        "isPermitted": true
+      },
+      {
+        "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+        "name": "Enhanced Services",
+        "isPermitted": true
+      },
+      {
+        "id": "vTerrance",
+        "name": "vTerrance",
+        "isPermitted": true
+      },
+      {
+        "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+        "name": "vSCP",
+        "isPermitted": true
+      },
+      {
+        "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+        "name": "Emanuel",
+        "isPermitted": true
+      },
+      {
+        "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+        "name": "BVOIP",
+        "isPermitted": true
+      },
+      {
+        "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+        "name": "LINDSEY",
+        "isPermitted": true
+      },
+      {
+        "id": "LRSI-OSPF",
+        "name": "LRSI-OSPF",
+        "isPermitted": true
+      },
+      {
+        "id": "vRosemarie",
+        "name": "HNGATEWAY",
+        "isPermitted": true
+      },
+      {
+        "id": "vHNPaas",
+        "name": "WILKINS",
+        "isPermitted": true
+      },
+      {
+        "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+        "name": "TYLER SILVIA",
+        "isPermitted": true
+      },
+      {
+        "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+        "name": "VROUTER",
+        "isPermitted": true
+      },
+      {
+        "id": "Cisneros",
+        "name": "vMuriel",
+        "isPermitted": true
+      },
+      {
+        "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+        "name": "CARA Griffin",
+        "isPermitted": true
+      },
+      {
+        "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+        "name": "DARREN MCGEE",
+        "isPermitted": true
+      },
+      {
+        "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+        "name": "Transport",
+        "isPermitted": true
+      },
+      {
+        "id": "vSalvatore",
+        "name": "vSalvatore",
+        "isPermitted": true
+      },
+      {
+        "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+        "name": "Josefina",
+        "isPermitted": true
+      },
+      {
+        "id": "vHubbard",
+        "name": "vHubbard",
+        "isPermitted": true
+      },
+      {
+        "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+        "name": "DARREN MCGEE",
+        "isPermitted": true
+      }
+      ],
+    "serviceTypes": {
+      "e433710f-9217-458d-a79d-1c7aff376d89": [
+        {
+          "id": "0",
+          "name": "vRichardson",
+          "isPermitted": false
+        },
+        {
+          "id": "1",
+          "name": "TYLER SILVIA",
+          "isPermitted": true
+        },
+        {
+          "id": "2",
+          "name": "Emanuel",
+          "isPermitted": false
+        },
+        {
+          "id": "3",
+          "name": "vJamie",
+          "isPermitted": false
+        },
+        {
+          "id": "4",
+          "name": "vVoiceMail",
+          "isPermitted": false
+        },
+        {
+          "id": "5",
+          "name": "Kennedy",
+          "isPermitted": false
+        },
+        {
+          "id": "6",
+          "name": "vSEGW",
+          "isPermitted": false
+        },
+        {
+          "id": "7",
+          "name": "vVM",
+          "isPermitted": false
+        },
+        {
+          "id": "8",
+          "name": "vOTA",
+          "isPermitted": false
+        },
+        {
+          "id": "9",
+          "name": "vMME",
+          "isPermitted": false
+        },
+        {
+          "id": "10",
+          "name": "vMNS",
+          "isPermitted": false
+        },
+        {
+          "id": "11",
+          "name": "vSCP",
+          "isPermitted": false
+        },
+        {
+          "id": "12",
+          "name": "VPMS",
+          "isPermitted": false
+        },
+        {
+          "id": "13",
+          "name": "vMMSC",
+          "isPermitted": false
+        },
+        {
+          "id": "14",
+          "name": "SSD",
+          "isPermitted": false
+        },
+        {
+          "id": "15",
+          "name": "vMOG",
+          "isPermitted": false
+        },
+        {
+          "id": "16",
+          "name": "LINDSEY",
+          "isPermitted": false
+        },
+        {
+          "id": "17",
+          "name": "JOHANNA_SANTOS",
+          "isPermitted": false
+        },
+        {
+          "id": "18",
+          "name": "vCarroll",
+          "isPermitted": false
+        }
+        ]
+    },
+    "aicZones": [
+      {
+        "id": "NFT1",
+        "name": "NFTJSSSS-NFT1"
+      },
+      {
+        "id": "JAG1",
+        "name": "YUDFJULP-JAG1"
+      },
+      {
+        "id": "YYY1",
+        "name": "UUUAIAAI-YYY1"
+      },
+      {
+        "id": "BAN1",
+        "name": "VSDKYUTP-BAN1"
+      },
+      {
+        "id": "DKJ1",
+        "name": "DKJSJDKA-DKJ1"
+      },
+      {
+        "id": "MCS1",
+        "name": "ASACMAMS-MCS1"
+      },
+      {
+        "id": "UIO1",
+        "name": "uioclli1-UIO1"
+      },
+      {
+        "id": "RAJ1",
+        "name": "YGBIJNLQ-RAJ1"
+      },
+      {
+        "id": "OPA1",
+        "name": "opaclli1-OPA1"
+      },
+      {
+        "id": "SDE1",
+        "name": "ZXCVBNMA-SDE1"
+      },
+      {
+        "id": "VEN2",
+        "name": "FGHJUHIL-VEN2"
+      },
+      {
+        "id": "ORL1",
+        "name": "ORLDFLMA-ORL1"
+      },
+      {
+        "id": "JAD1",
+        "name": "JADECLLI-JAD1"
+      },
+      {
+        "id": "ZXL1",
+        "name": "LWLWCANN-ZXL1"
+      },
+      {
+        "id": "CKL1",
+        "name": "CLKSKCKK-CKL1"
+      },
+      {
+        "id": "SDF1",
+        "name": "sdfclli1-SDF1"
+      },
+      {
+        "id": "RAD1",
+        "name": "RADICAL1-RAD1"
+      },
+      {
+        "id": "KIT1",
+        "name": "BHYJFGLN-KIT1"
+      },
+      {
+        "id": "REL1",
+        "name": "INGERFGT-REL1"
+      },
+      {
+        "id": "JNL1",
+        "name": "CJALSDAC-JNL1"
+      },
+      {
+        "id": "OLK1",
+        "name": "OLKOLKLS-OLK1"
+      },
+      {
+        "id": "CHI1",
+        "name": "CHILLIWE-CHI1"
+      },
+      {
+        "id": "UUU4",
+        "name": "UUUAAAUU-UUU4"
+      },
+      {
+        "id": "TUF1",
+        "name": "TUFCLLI1-TUF1"
+      },
+      {
+        "id": "KJN1",
+        "name": "CKALDKSA-KJN1"
+      },
+      {
+        "id": "SAM1",
+        "name": "SNDGCA64-SAN1"
+      },
+      {
+        "id": "SCK1",
+        "name": "SCKSCKSK-SCK1"
+      },
+      {
+        "id": "HJH1",
+        "name": "AOEEQQQD-HJH1"
+      },
+      {
+        "id": "HGD1",
+        "name": "SDFQWHGD-HGD1"
+      },
+      {
+        "id": "KOR1",
+        "name": "HYFLNBVT-KOR1"
+      },
+      {
+        "id": "ATL43",
+        "name": "AICLOCID-ATL43"
+      },
+      {
+        "id": "ATL54",
+        "name": "AICFTAAI-ATL54"
+      },
+      {
+        "id": "ATL66",
+        "name": "CLLIAAII-ATL66"
+      },
+      {
+        "id": "VEL1",
+        "name": "BNMLKUIK-VEL1"
+      },
+      {
+        "id": "ICC1",
+        "name": "SANJITAT-ICC1"
+      },
+      {
+        "id": "MNT11",
+        "name": "WSXEFBTH-MNT11"
+      },
+      {
+        "id": "DEF2",
+        "name": "WSBHGTYL-DEF2"
+      },
+      {
+        "id": "MAD11",
+        "name": "SDFQWGKL-MAD11"
+      },
+      {
+        "id": "OLG1",
+        "name": "OLHOLHOL-OLG1"
+      },
+      {
+        "id": "GAR1",
+        "name": "NGFVSJKO-GAR1"
+      },
+      {
+        "id": "SAN22",
+        "name": "GNVLSCTL-SAN22"
+      },
+      {
+        "id": "HRG1",
+        "name": "HRGHRGGS-HRG1"
+      },
+      {
+        "id": "JCS1",
+        "name": "JCSJSCJS-JCS1"
+      },
+      {
+        "id": "DHA12",
+        "name": "WSXEDECF-DHA12"
+      },
+      {
+        "id": "HJE1",
+        "name": "AOEEWWWD-HJE1"
+      },
+      {
+        "id": "NCA1",
+        "name": "NCANCANN-NCA1"
+      },
+      {
+        "id": "IOP1",
+        "name": "iopclli1-IOP1"
+      },
+      {
+        "id": "RTY1",
+        "name": "rtyclli1-RTY1"
+      },
+      {
+        "id": "KAP1",
+        "name": "HIOUYTRQ-KAP1"
+      },
+      {
+        "id": "ZEN1",
+        "name": "ZENCLLI1-ZEN1"
+      },
+      {
+        "id": "HKA1",
+        "name": "JAKHLASS-HKA1"
+      },
+      {
+        "id": "CQK1",
+        "name": "CQKSCAKK-CQK1"
+      },
+      {
+        "id": "SAI1",
+        "name": "UBEKQLPD-SAI1"
+      },
+      {
+        "id": "ERT1",
+        "name": "ertclli1-ERT1"
+      },
+      {
+        "id": "IBB1",
+        "name": "PLMKOIJU-IBB1"
+      },
+      {
+        "id": "TIR2",
+        "name": "PLKINHYI-TIR2"
+      },
+      {
+        "id": "HSD1",
+        "name": "CHASKCDS-HSD1"
+      },
+      {
+        "id": "SLF78",
+        "name": "SDCTLFN1-SLF78"
+      },
+      {
+        "id": "SEE78",
+        "name": "SDCTEEE4-SEE78"
+      },
+      {
+        "id": "SAN13",
+        "name": "TOKYJPFA-SAN13"
+      },
+      {
+        "id": "SAA78",
+        "name": "SDCTAAA1-SAA78"
+      },
+      {
+        "id": "LUC1",
+        "name": "ATLDFGYC-LUC1"
+      },
+      {
+        "id": "AMD13",
+        "name": "MEMATLAN-AMD13"
+      },
+      {
+        "id": "TOR1",
+        "name": "TOROONXN-TOR1"
+      },
+      {
+        "id": "QWE1",
+        "name": "QWECLLI1-QWE1"
+      },
+      {
+        "id": "ZOG1",
+        "name": "ZOGASTRO-ZOG1"
+      },
+      {
+        "id": "CAL33",
+        "name": "CALIFORN-CAL33"
+      },
+      {
+        "id": "SHH78",
+        "name": "SDIT1HHH-SHH78"
+      },
+      {
+        "id": "DSA1",
+        "name": "LKJHGFDS-DSA1"
+      },
+      {
+        "id": "CLG1",
+        "name": "CLGRABAD-CLG1"
+      },
+      {
+        "id": "BNA1",
+        "name": "BNARAGBK-BNA1"
+      },
+      {
+        "id": "ATL84",
+        "name": "CANTTCOC-ATL84"
+      },
+      {
+        "id": "APP1",
+        "name": "WBHGTYUI-APP1"
+      },
+      {
+        "id": "RJN1",
+        "name": "RJNRBZAW-RJN1"
+      },
+      {
+        "id": "EHH78",
+        "name": "SDCSHHH5-EHH78"
+      },
+      {
+        "id": "mac10",
+        "name": "PKGTESTF-mac10"
+      },
+      {
+        "id": "SXB78",
+        "name": "SDCTGXB1-SXB78"
+      },
+      {
+        "id": "SAX78",
+        "name": "SDCTAXG1-SAX78"
+      },
+      {
+        "id": "SYD1",
+        "name": "SYDNAUBV-SYD1"
+      },
+      {
+        "id": "TOK1",
+        "name": "TOKYJPFA-TOK1"
+      },
+      {
+        "id": "KGM2",
+        "name": "KGMTNC20-KGM2"
+      },
+      {
+        "id": "DCC1b",
+        "name": "POIUYTGH-DCC1b"
+      },
+      {
+        "id": "SKK78",
+        "name": "SDCTKKK1-SKK78"
+      },
+      {
+        "id": "SGG78",
+        "name": "SDCTGGG1-SGG78"
+      },
+      {
+        "id": "SJJ78",
+        "name": "SDCTJJJ1-SJJ78"
+      },
+      {
+        "id": "SBX78",
+        "name": "SDCTBXG1-SBX78"
+      },
+      {
+        "id": "LAG1",
+        "name": "LARGIZON-LAG1"
+      },
+      {
+        "id": "IAA1",
+        "name": "QAZXSWED-IAA1"
+      },
+      {
+        "id": "POI1",
+        "name": "PLMNJKIU-POI1"
+      },
+      {
+        "id": "LAG1a",
+        "name": "LARGIZON-LAG1a"
+      },
+      {
+        "id": "PBL1",
+        "name": "PBLAPBAI-PBL1"
+      },
+      {
+        "id": "LAG45",
+        "name": "LARGIZON-LAG1a"
+      },
+      {
+        "id": "MAR1",
+        "name": "MNBVCXZM-MAR1"
+      },
+      {
+        "id": "HST70",
+        "name": "HSTNTX70-HST70"
+      },
+      {
+        "id": "DCC1a",
+        "name": "POIUYTGH-DCC1a"
+      },
+      {
+        "id": "TOL1",
+        "name": "TOLDOH21-TOL1"
+      },
+      {
+        "id": "LON1",
+        "name": "LONEENCO-LON1"
+      },
+      {
+        "id": "SJU78",
+        "name": "SDIT1JUB-SJU78"
+      },
+      {
+        "id": "STN27",
+        "name": "HSTNTX01-STN27"
+      },
+      {
+        "id": "SSW56",
+        "name": "ss8126GT-SSW56"
+      },
+      {
+        "id": "SBB78",
+        "name": "SDIT1BBB-SBB78"
+      },
+      {
+        "id": "DCC3",
+        "name": "POIUYTGH-DCC3"
+      },
+      {
+        "id": "GNV1",
+        "name": "GNVLSCTL-GNV1"
+      },
+      {
+        "id": "WAS1",
+        "name": "WASHDCSW-WAS1"
+      },
+      {
+        "id": "TOY1",
+        "name": "TORYONNZ-TOY1"
+      },
+      {
+        "id": "STT1",
+        "name": "STTLWA02-STT1"
+      },
+      {
+        "id": "STG1",
+        "name": "STTGGE62-STG1"
+      },
+      {
+        "id": "SLL78",
+        "name": "SDCTLLL1-SLL78"
+      },
+      {
+        "id": "SBU78",
+        "name": "SDIT1BUB-SBU78"
+      },
+      {
+        "id": "ATL2",
+        "name": "ATLNGANW-ATL2"
+      },
+      {
+        "id": "BOT1",
+        "name": "BOTHWAKY-BOT1"
+      },
+      {
+        "id": "SNG1",
+        "name": "SNGPSIAU-SNG1"
+      },
+      {
+        "id": "NYC1",
+        "name": "NYCMNY54-NYC1"
+      },
+      {
+        "id": "LAG1b",
+        "name": "LARGIZON-LAG1b"
+      },
+      {
+        "id": "AMD15",
+        "name": "AMDFAA01-AMD15"
+      },
+      {
+        "id": "SNA1",
+        "name": "SNANTXCA-SNA1"
+      },
+      {
+        "id": "PLT1",
+        "name": "PLTNCA60-PLT1"
+      },
+      {
+        "id": "TLP1",
+        "name": "TLPNXM18-TLP1"
+      },
+      {
+        "id": "SDD81",
+        "name": "SAIT1DD6-SDD81"
+      },
+      {
+        "id": "DCC1",
+        "name": "POIUYTGH-DCC1"
+      },
+      {
+        "id": "DCC2",
+        "name": "POIUYTGH-DCC2"
+      },
+      {
+        "id": "OKC1",
+        "name": "OKCBOK55-OKC1"
+      },
+      {
+        "id": "PAR1",
+        "name": "PARSFRCG-PAR1"
+      },
+      {
+        "id": "TES36",
+        "name": "ABCEETES-TES36"
+      },
+      {
+        "id": "COM1",
+        "name": "PLMKOPIU-COM1"
+      },
+      {
+        "id": "ANI1",
+        "name": "ATLNGTRE-ANI1"
+      },
+      {
+        "id": "SDG78",
+        "name": "SDIT1BDG-SDG78"
+      },
+      {
+        "id": "mac20",
+        "name": "PKGTESTF-mac20"
+      },
+      {
+        "id": "DSF45",
+        "name": "DSFBG123-DSF45"
+      },
+      {
+        "id": "HST25",
+        "name": "HSTNTX01-HST25"
+      },
+      {
+        "id": "AMD18",
+        "name": "AUDIMA01-AMD18"
+      },
+      {
+        "id": "SAA80",
+        "name": "SAIT9AA3-SAA80"
+      },
+      {
+        "id": "SSA56",
+        "name": "SSIT2AA7-SSA56"
+      },
+      {
+        "id": "SDD82",
+        "name": "SAIT1DD9-SDD82"
+      },
+      {
+        "id": "JCV1",
+        "name": "JCVLFLBW-JCV1"
+      },
+      {
+        "id": "SUL2",
+        "name": "WERTYUJK-SUL2"
+      },
+      {
+        "id": "PUR1",
+        "name": "purelyde-PUR1"
+      },
+      {
+        "id": "FDE55",
+        "name": "FDERT555-FDE55"
+      },
+      {
+        "id": "SITE",
+        "name": "LONEENCO-SITE"
+      },
+      {
+        "id": "ATL1",
+        "name": "ATLNGAMA-ATL1"
+      },
+      {
+        "id": "JUL1",
+        "name": "ZXCVBNMM-JUL1"
+      },
+      {
+        "id": "TAT34",
+        "name": "TESAAISB-TAT34"
+      },
+      {
+        "id": "XCP12",
+        "name": "CHKGH123-XCP12"
+      },
+      {
+        "id": "RAI1",
+        "name": "poiuytre-RAI1"
+      },
+      {
+        "id": "HPO1",
+        "name": "ATLNGAUP-HPO1"
+      },
+      {
+        "id": "KJF12",
+        "name": "KJFDH123-KJF12"
+      },
+      {
+        "id": "SCC80",
+        "name": "SAIT9CC3-SCC80"
+      },
+      {
+        "id": "SAA12",
+        "name": "SAIT9AF8-SAA12"
+      },
+      {
+        "id": "SAA14",
+        "name": "SAIT1AA9-SAA14"
+      },
+      {
+        "id": "ATL35",
+        "name": "TTESSAAI-ATL35"
+      },
+      {
+        "id": "CWY1",
+        "name": "CWYMOWBS-CWY1"
+      },
+      {
+        "id": "ATL76",
+        "name": "TELEPAAI-ATL76"
+      },
+      {
+        "id": "DSL12",
+        "name": "DSLFK242-DSL12"
+      },
+      {
+        "id": "ATL53",
+        "name": "AAIATLTE-ATL53"
+      },
+      {
+        "id": "SAA11",
+        "name": "SAIT9AA2-SAA11"
+      },
+      {
+        "id": "ATL62",
+        "name": "TESSASCH-ATL62"
+      },
+      {
+        "id": "AUG1",
+        "name": "ASDFGHJK-AUG1"
+      },
+      {
+        "id": "POI22",
+        "name": "POIUY123-POI22"
+      },
+      {
+        "id": "SAA13",
+        "name": "SAIT1AA9-SAA13"
+      },
+      {
+        "id": "BHY17",
+        "name": "BHYTFRF3-BHY17"
+      },
+      {
+        "id": "LIS1",
+        "name": "HOSTPROF-LIS1"
+      },
+      {
+        "id": "SIP1",
+        "name": "ZXCVBNMK-SIP1"
+      },
+      {
+        "id": "ATL99",
+        "name": "TEESTAAI-ATL43"
+      },
+      {
+        "id": "ATL64",
+        "name": "FORLOAAJ-ATL64"
+      },
+      {
+        "id": "TAT33",
+        "name": "TESAAISA-TAT33"
+      },
+      {
+        "id": "RAD10",
+        "name": "INDIPUNE-RAD10"
+      },
+      {
+        "id": "RTW5",
+        "name": "BHYTFRY4-RTW5"
+      },
+      {
+        "id": "JGS1",
+        "name": "KSJKKKKK-JGS1"
+      },
+      {
+        "id": "ATL98",
+        "name": "TEESTAAI-ATL43"
+      },
+      {
+        "id": "WAN1",
+        "name": "LEIWANGW-WAN1"
+      },
+      {
+        "id": "ATL44",
+        "name": "ATLSANAB-ATL44"
+      },
+      {
+        "id": "RTD2",
+        "name": "BHYTFRk4-RTD2"
+      },
+      {
+        "id": "NIR1",
+        "name": "ORFLMANA-NIR1"
+      },
+      {
+        "id": "ATL75",
+        "name": "SANAAIRE-ATL75"
+      },
+      {
+        "id": "NUM1",
+        "name": "QWERTYUI-NUM1"
+      },
+      {
+        "id": "MTN32",
+        "name": "MDTWNJ21-MTN32"
+      },
+      {
+        "id": "RTZ4",
+        "name": "BHYTFRZ6-RTZ4"
+      },
+      {
+        "id": "ATL56",
+        "name": "ATLSANAC-ATL56"
+      },
+      {
+        "id": "AMS1",
+        "name": "AMSTNLBW-AMS1"
+      },
+      {
+        "id": "RCT1",
+        "name": "AMSTERNL-RCT1"
+      },
+      {
+        "id": "JAN1",
+        "name": "ORFLMATT-JAN1"
+      },
+      {
+        "id": "ABC14",
+        "name": "TESAAISA-ABC14"
+      },
+      {
+        "id": "TAT37",
+        "name": "TESAAISD-TAT37"
+      },
+      {
+        "id": "MIC54",
+        "name": "MICHIGAN-MIC54"
+      },
+      {
+        "id": "ABC11",
+        "name": "ATLSANAI-ABC11"
+      },
+      {
+        "id": "AMF11",
+        "name": "AMDOCS01-AMF11"
+      },
+      {
+        "id": "ATL63",
+        "name": "ATLSANEW-ATL63"
+      },
+      {
+        "id": "ABC12",
+        "name": "ATLSECIA-ABC12"
+      },
+      {
+        "id": "MTN20",
+        "name": "MDTWNJ21-MTN20"
+      },
+      {
+        "id": "ABC15",
+        "name": "AAITESAN-ABC15"
+      },
+      {
+        "id": "AVT1",
+        "name": "AVTRFLHD-AVT1"
+      },
+      {
+        "id": "ATL34",
+        "name": "ATLSANAI-ATL34"
+      }
+      ],
+    "categoryParameters": {
+      "owningEntityList": [
+        {
+          "id": "aaa1",
+          "name": "aaa1"
+        },
+        {
+          "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+          "name": "WayneHolland"
+        },
+        {
+          "id": "Melissa",
+          "name": "Melissa"
+        }
+        ],
+      "projectList": [
+        {
+          "id": "WATKINS",
+          "name": "WATKINS"
+        },
+        {
+          "id": "x1",
+          "name": "x1"
+        },
+        {
+          "id": "yyy1",
+          "name": "yyy1"
+        }
+        ],
+      "lineOfBusinessList": [
+        {
+          "id": "ONAP",
+          "name": "ONAP"
+        },
+        {
+          "id": "zzz1",
+          "name": "zzz1"
+        }
+        ],
+      "platformList": [
+        {
+          "id": "platform",
+          "name": "platform"
+        },
+        {
+          "id": "xxx1",
+          "name": "xxx1"
+        }
+        ]
+    },
+    "type": "[LCP_REGIONS_AND_TENANTS] Update",
+    "subscribers": [
+      {
+        "id": "CAR_2020_ER",
+        "name": "CAR_2020_ER",
+        "isPermitted": true
+      },
+      {
+        "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+        "name": "JULIO ERICKSON",
+        "isPermitted": false
+      },
+      {
+        "id": "DHV1707-TestSubscriber-2",
+        "name": "DALE BRIDGES",
+        "isPermitted": false
+      },
+      {
+        "id": "DHV1707-TestSubscriber-1",
+        "name": "LLOYD BRIDGES",
+        "isPermitted": false
+      },
+      {
+        "id": "jimmy-example",
+        "name": "JimmyExampleCust-20161102",
+        "isPermitted": false
+      },
+      {
+        "id": "jimmy-example2",
+        "name": "JimmyExampleCust-20161103",
+        "isPermitted": false
+      },
+      {
+        "id": "ERICA5779-TestSub-PWT-102",
+        "name": "ERICA5779-TestSub-PWT-102",
+        "isPermitted": false
+      },
+      {
+        "id": "ERICA5779-TestSub-PWT-101",
+        "name": "ERICA5779-TestSub-PWT-101",
+        "isPermitted": false
+      },
+      {
+        "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+        "name": "Emanuel",
+        "isPermitted": false
+      },
+      {
+        "id": "ERICA5779-Subscriber-4",
+        "name": "ERICA5779-Subscriber-5",
+        "isPermitted": false
+      },
+      {
+        "id": "ERICA5779-TestSub-PWT-103",
+        "name": "ERICA5779-TestSub-PWT-103",
+        "isPermitted": false
+      },
+      {
+        "id": "ERICA5779-Subscriber-2",
+        "name": "ERICA5779-Subscriber-2",
+        "isPermitted": false
+      },
+      {
+        "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+        "name": "SILVIA ROBBINS",
+        "isPermitted": true
+      },
+      {
+        "id": "ERICA5779-Subscriber-3",
+        "name": "ERICA5779-Subscriber-3",
+        "isPermitted": false
+      },
+      {
+        "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+        "name": "CRAIG/ROBERTS",
+        "isPermitted": false
+      }
+      ]
+  }
+}
+}
+}
+
+class MockFeatureFlagsService {}
+
+describe('Network Control Generator', () => {
+  let injector;
+  let service: NetworkControlGenerator;
+  let httpMock: HttpTestingController;
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [NetworkControlGenerator,
+        GenericFormService,
+        BasicControlGenerator,
+        AaiService,
+        FormBuilder,
+        LogService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockAppStore}]
+    });
+
+    injector = getTestBed();
+    service = injector.get(NetworkControlGenerator);
+    httpMock = injector.get(HttpTestingController);
+  });
+
+  test('getMacroFormControls check for mandatory controls', () => {
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const networkName : string = "ExtVL 0";
+    const networkStoreKey : string = "ExtVL 0";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, networkStoreKey, networkName, false);
+
+    const mandatoryControls : string[] = [
+      FormControlNames.LCPCLOUD_REGION_ID,
+      'tenantId',
+      'platformName'
+    ];
+    for(let i = 0 ; i < mandatoryControls.length ; i++){
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+
+
+  test('getMacroFormControls should return instance name if isEcompName is true', () => {
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const networkName : string = "ExtVL 1";
+    const networkStoreKey : string = "ExtVL 1";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, networkStoreKey, networkName, false);
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.PRODUCT_FAMILY_ID,
+      FormControlNames.LCPCLOUD_REGION_ID ,
+      'legacyRegion',
+      'tenantId',
+      'platformName',
+      'lineOfBusiness'];
+
+
+
+    expect(controls.length).toEqual(7);
+    for(let i = 0 ; i < controls.length ; i++){
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+  test('getMacroFormControls should return the correct order of controls', () => {
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const networkName : string = "ExtVL 0";
+    const networkStoreKey : string = "ExtVL 0";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, networkStoreKey, networkName, false);
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.PRODUCT_FAMILY_ID,
+      FormControlNames.LCPCLOUD_REGION_ID ,
+      'legacyRegion',
+      'tenantId',
+      'platformName',
+      'lineOfBusiness'];
+
+
+
+    expect(controls.length).toEqual(7);
+    for(let i = 0 ; i < controls.length ; i++){
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+  test('getMacroFormControls should not return the rollback status', () => {
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const networkName : string = "ExtVL 0";
+    const networkStoreKey : string = "ExtVL 0";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, networkStoreKey, networkName, false);
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.PRODUCT_FAMILY_ID,
+      FormControlNames.LCPCLOUD_REGION_ID ,
+      'legacyRegion',
+      'tenantId',
+      'platformName',
+      'lineOfBusiness',
+      FormControlNames.ROLLBACK_ON_FAILURE
+    ];
+
+
+
+    expect(controls.length).toEqual(7);
+    for(let i = 0 ; i < controls.length ; i++){
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+  test('getAlacartFormControls should return the correct order of controls', () => {
+    const controls:FormControlModel[] = getAlaCarteFormControls();
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.PRODUCT_FAMILY_ID,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      'legacyRegion',
+      'tenantId',
+      'platformName',
+      'lineOfBusiness',
+      'rollbackOnFailure'];
+    expect(controls.length).toEqual(8);
+    for(let i = 0 ; i < controls.length ; i++) {
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+  function getAlaCarteFormControls(): FormControlModel[] {
+    const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const networkName: string = "ExtVL 0";
+    const networkStoreKey: string = "ExtVL 0";
+    const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, networkStoreKey, networkName, false);
+    return controls;
+  }
+
+  test('getAlacartFormControls instance name control validator shall have the expected regex', () => {
+    const controls:FormControlModel[] = getAlaCarteFormControls();
+
+    const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME);
+    const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern);
+    expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/);
+  });
+
+  test('getAlacartFormControls check for mandatory controls', () => {
+    const controls:FormControlModel[] = getAlaCarteFormControls();
+
+    const mandatoryControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      'tenantId',
+      'platformName',
+      'rollbackOnFailure'
+    ];
+    for(let i = 0 ; i < mandatoryControls.length ; i++){
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.ts
new file mode 100644
index 0000000..c3a6223
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/networkGenerator/network.control.generator.ts
@@ -0,0 +1,247 @@
+import {Injectable} from "@angular/core";
+import {GenericFormService} from "../../generic-form.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {NgRedux} from "@angular-redux/store";
+import {HttpClient} from "@angular/common/http";
+import {BasicControlGenerator} from "../basic.control.generator";
+import * as _ from 'lodash';
+import {Observable, of} from "rxjs";
+
+import {
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {LogService} from "../../../../utils/log/log.service";
+import {AppState} from "../../../../store/reducers";
+import {FormGroup} from "@angular/forms";
+import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model";
+import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum";
+import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
+import {SelectOption} from "../../../../models/selectOption";
+import {NetworkInstance} from "../../../../models/networkInstance";
+import {NetworkModel} from "../../../../models/networkModel";
+import {Constants} from "../../../../utils/constants";
+
+export enum FormControlNames {
+  INSTANCE_NAME = 'instanceName',
+  GLOBAL_SUBSCRIBER_ID = 'globalSubscriberId',
+  PRODUCT_FAMILY_ID = 'productFamilyId',
+  LCPCLOUD_REGION_ID = 'lcpCloudRegionId',
+  TENANT_ID = 'tenantId',
+  AICZONE_ID = 'aicZoneId',
+  ROLLBACK_ON_FAILURE = 'rollbackOnFailure',
+  LEGACY_REGION = 'legacyRegion'
+}
+
+
+enum InputType {
+  LCP_REGION = "lcpCloudRegionId",
+  TENANT = "tenantId",
+  LOB = "lineOfBusiness",
+  PLATFORM = "platformName",
+  ROLLBACK = "rollbackOnFailure",
+  PRODUCT_FAMILY = "productFamilyId",
+  VG = "volumeGroupName"
+}
+
+@Injectable()
+export class NetworkControlGenerator {
+  aaiService: AaiService;
+
+  constructor(private genericFormService: GenericFormService,
+              private _basicControlGenerator: BasicControlGenerator,
+              private store: NgRedux<AppState>,
+              private http: HttpClient,
+              private _aaiService: AaiService,
+              private _logService: LogService) {
+    this.aaiService = _aaiService;
+  }
+
+  getNetworkInstance = (serviceId: string, networkName: string, isUpdateMode : boolean): NetworkInstance => {
+    let networkInstance : NetworkInstance = null;
+    if (isUpdateMode && this.store.getState().service.serviceInstance[serviceId] && _.has(this.store.getState().service.serviceInstance[serviceId].networks, networkName)) {
+      networkInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId].networks[networkName]);
+    }
+    return networkInstance;
+  };
+
+
+  getMacroFormControls(serviceId: string, networkStoreKey: string, networkName: string, isUpdateMode : boolean): FormControlModel[] {
+    networkStoreKey = _.isNil(networkStoreKey) ? networkName : networkStoreKey;
+
+    if (_.isNil(serviceId) || _.isNil(networkStoreKey) || _.isNil(networkName)) {
+      this._logService.error('should provide serviceId, networkName, networkStoreKey', serviceId);
+      return [];
+    }
+
+    const networkInstance = this.getNetworkInstance(serviceId, networkStoreKey, isUpdateMode);
+    const networkModel = new NetworkModel(this.store.getState().service.serviceHierarchy[serviceId].networks[networkName]);
+    let result: FormControlModel[] = [];
+
+    if (!_.isNil(networkModel)) {
+      result.push(this.getInstanceName(networkInstance, serviceId, networkName, networkModel.isEcompGeneratedNaming));
+      result.push(this._basicControlGenerator.getProductFamilyControl(networkInstance, result, false));
+      result.push(this.getLcpRegionControl(serviceId, networkInstance, result));
+      result.push(this._basicControlGenerator.getLegacyRegion(networkInstance));
+      result.push(this.getTenantControl(serviceId, networkInstance, result));
+      result.push(this.getPlatformControl(networkInstance, result));
+      result.push(this.getLineOfBusinessControl(networkInstance, result));
+    }
+    return result;
+
+  }
+
+  getAlaCarteFormControls(serviceId: string, networkStoreKey: string, networkName: string, isUpdateMode : boolean): FormControlModel[] {
+    networkStoreKey = _.isNil(networkStoreKey) ? networkName : networkStoreKey;
+    if (_.isNil(serviceId) || _.isNil(networkStoreKey) || _.isNil(networkName)) {
+      this._logService.error('should provide serviceId, networkName, networkStoreKey', serviceId);
+      return [];
+    }
+
+    let result: FormControlModel[] = [];
+    const networkInstance = this.getNetworkInstance(serviceId, networkStoreKey, isUpdateMode);
+    const networkModel = new NetworkModel(this.store.getState().service.serviceHierarchy[serviceId].networks[networkName]);
+
+    if (!_.isNil(networkModel)) {
+      result.push(this.getInstanceName(networkInstance, serviceId, networkName, networkModel.isEcompGeneratedNaming));
+      result.push(this._basicControlGenerator.getProductFamilyControl(networkInstance, result, false));
+      result.push(this.getLcpRegionControl(serviceId, networkInstance, result));
+      result.push(this._basicControlGenerator.getLegacyRegion(networkInstance));
+      result.push(this.getTenantControl(serviceId, networkInstance, result));
+      result.push(this.getPlatformControl(networkInstance, result));
+      result.push(this.getLineOfBusinessControl(networkInstance, result));
+      result.push(this.getRollbackOnFailureControl(networkInstance, result));
+    }
+    return result;
+
+  }
+
+  isInputShouldBeShown = (inputType: any): boolean => {
+    let networkInputs = [InputType.LCP_REGION, InputType.LOB, InputType.TENANT, InputType.PRODUCT_FAMILY, InputType.PLATFORM, InputType.ROLLBACK];
+    return networkInputs.indexOf(inputType) > -1;
+  };
+
+  getInstanceName(instance : any, serviceId : string, networkName : string, isEcompGeneratedNaming: boolean): FormControlModel {
+    const networkModel : NetworkModel = this.store.getState().service.serviceHierarchy[serviceId].networks[networkName];
+    return this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, networkModel);
+  }
+
+  getLineOfBusinessControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: 'lineOfBusiness',
+      displayName: 'Line of business',
+      dataTestId: 'lineOfBusiness',
+      placeHolder: 'Select Line Of Business',
+      isDisabled: false,
+      name: "lineOfBusiness",
+      value: instance ? instance.lineOfBusiness : null,
+      validations: [],
+      onInitSelectedField: ['lineOfBusinessList'],
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
+    })
+  };
+
+  getPlatformControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: 'platformName',
+      displayName: 'Platform',
+      dataTestId: 'platform',
+      placeHolder: 'Select Platform',
+      isDisabled: false,
+      name: "platform",
+      value: instance ? instance.platformName : null,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInitSelectedField: ['platformList'],
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
+    })
+  };
+
+  getTenantControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    const service = this.store.getState().service.serviceInstance[serviceId];
+    const globalCustomerId: string = service.globalSubscriberId;
+    const serviceType: string = service.subscriptionServiceType;
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: FormControlNames.TENANT_ID,
+      displayName: 'Tenant',
+      dataTestId: 'tenant',
+      placeHolder: 'Select Tenant',
+      name: "tenant",
+      isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId),
+      onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null,
+      value: instance ? instance.tenantId : null,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInit : instance ? this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this.aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : ()=>{},
+    })
+  };
+
+  getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    const service = this.store.getState().service.serviceInstance[serviceId];
+    const globalCustomerId: string = service.globalSubscriberId;
+    const serviceType: string = service.subscriptionServiceType;
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: 'lcpCloudRegionId',
+      displayName: 'LCP region',
+      dataTestId: 'lcpRegion',
+      placeHolder: 'Select LCP Region',
+      name: "lcpRegion",
+      isDisabled: false,
+      value: instance ? instance.lcpCloudRegionId : null,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInitSelectedField: ['lcpRegionList'],
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)),
+      onChange: (param: string, form: FormGroup) => {
+        form.controls[FormControlNames.TENANT_ID].enable();
+        form.controls[FormControlNames.TENANT_ID].reset();
+        if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
+          this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => {
+            controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param];
+            if(res.lcpRegionsTenantsMap[param]){
+              controls.find(item => item.controlName === FormControlNames.TENANT_ID)['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0;
+            }
+          }));
+        }
+
+        if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) {
+          form.controls['legacyRegion'].enable();
+          controls.find(item => item.controlName === 'legacyRegion').isVisible = true;
+
+        } else {
+          controls.find(item => item.controlName === 'legacyRegion').isVisible = false;
+          form.controls['legacyRegion'].setValue(null);
+          form.controls['legacyRegion'].reset();
+          form.controls['legacyRegion'].disable();
+        }
+      }
+    })
+  };
+
+  getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: FormControlNames.ROLLBACK_ON_FAILURE,
+      displayName: 'Rollback on failure',
+      dataTestId: 'rollback',
+      placeHolder: 'Rollback on failure',
+      isDisabled: false,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      value: instance ? instance.rollbackOnFailure : 'true',
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions)
+    })
+  };
+
+  getRollBackOnFailureOptions = (): Observable<SelectOption[]> => {
+    return of([
+      new SelectOption({id: 'true', name: 'Rollback'}),
+      new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+    ]);
+  };
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.spec.ts
new file mode 100644
index 0000000..b7a728c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.spec.ts
@@ -0,0 +1,1859 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {NgRedux} from '@angular-redux/store';
+import {FormControlNames, ServiceControlGenerator} from "./service.control.generator";
+import {BasicControlGenerator} from "./basic.control.generator";
+import {AaiService} from "../../../services/aaiService/aai.service";
+import {GenericFormService} from "../generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../../models/formControlModels/formControl.model";
+import {LogService} from "../../../utils/log/log.service";
+import {FormControlType} from "../../../models/formControlModels/formControlTypes.enum";
+import {DropdownFormControl} from "../../../models/formControlModels/dropdownFormControl.model";
+import {FeatureFlagsService} from "../../../services/featureFlag/feature-flags.service";
+
+class MockAppStore<T> {
+  getState(){
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {}
+            },
+            "vnfs": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "ecomp_generated_naming": "false",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VF",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {},
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [
+            {
+              "id": "JANET25",
+              "name": "JANET25",
+              "isPermitted": true
+            },
+            {
+              "id": "hvf6",
+              "name": "hvf6",
+              "isPermitted": true
+            }
+          ],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [
+              {
+                "id": "092eb9e8e4b7412e8787dd091bc58e86",
+                "name": "USP-SIP-IC-24335-T-01",
+                "isPermitted": true
+              }
+            ],
+            "hvf6": [
+              {
+                "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "name": "AIN Web Tool-15-D-testalexandria",
+                "isPermitted": true
+              },
+              {
+                "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "name": "AIN Web Tool-15-D-STTest2",
+                "isPermitted": true
+              },
+              {
+                "id": "1178612d2b394be4834ad77f567c0af2",
+                "name": "AIN Web Tool-15-D-SSPtestcustome",
+                "isPermitted": true
+              },
+              {
+                "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+                "name": "AIN Web Tool-15-D-UncheckedEcopm",
+                "isPermitted": true
+              },
+              {
+                "id": "de007636e25249238447264a988a927b",
+                "name": "AIN Web Tool-15-D-dfsdf",
+                "isPermitted": true
+              },
+              {
+                "id": "62f29b3613634ca6a3065cbe0e020c44",
+                "name": "AIN/SMS-16-D-Multiservices1",
+                "isPermitted": true
+              },
+              {
+                "id": "649289e30d3244e0b48098114d63c2aa",
+                "name": "AIN Web Tool-15-D-SSPST66",
+                "isPermitted": true
+              },
+              {
+                "id": "3f21eeea6c2c486bba31dab816c05a32",
+                "name": "AIN Web Tool-15-D-ASSPST47",
+                "isPermitted": true
+              },
+              {
+                "id": "f60ce21d3ee6427586cff0d22b03b773",
+                "name": "CESAR-100-D-sspjg67246",
+                "isPermitted": true
+              },
+              {
+                "id": "8774659e425f479895ae091bb5d46560",
+                "name": "CESAR-100-D-sspjg68359",
+                "isPermitted": true
+              },
+              {
+                "id": "624eb554b0d147c19ff8885341760481",
+                "name": "AINWebTool-15-D-iftach",
+                "isPermitted": true
+              },
+              {
+                "id": "214f55f5fc414c678059c383b03e4962",
+                "name": "CESAR-100-D-sspjg612401",
+                "isPermitted": true
+              },
+              {
+                "id": "c90666c291664841bb98e4d981ff1db5",
+                "name": "CESAR-100-D-sspjg621340",
+                "isPermitted": true
+              },
+              {
+                "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+                "name": "sspjg621351cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "b386b768a3f24c8e953abbe0b3488c02",
+                "name": "AINWebTool-15-D-eteancomp",
+                "isPermitted": true
+              },
+              {
+                "id": "dc6c4dbfd225474e9deaadd34968646c",
+                "name": "AINWebTool-15-T-SPFET",
+                "isPermitted": true
+              },
+              {
+                "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+                "name": "AINWebTool-15-X-eeweww",
+                "isPermitted": true
+              },
+              {
+                "id": "f2f3830e4c984d45bcd00e1a04158a79",
+                "name": "CESAR-100-D-spjg61909",
+                "isPermitted": true
+              },
+              {
+                "id": "05b91bd5137f4929878edd965755c06d",
+                "name": "CESAR-100-D-sspjg621512cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "7002fbe8482d4a989ddf445b1ce336e0",
+                "name": "AINWebTool-15-X-vdr",
+                "isPermitted": true
+              },
+              {
+                "id": "4008522be43741dcb1f5422022a2aa0b",
+                "name": "AINWebTool-15-D-ssasa",
+                "isPermitted": true
+              },
+              {
+                "id": "f44e2e96a1b6476abfda2fa407b00169",
+                "name": "AINWebTool-15-D-PFNPT",
+                "isPermitted": true
+              },
+              {
+                "id": "b69a52bec8a84669a37a1e8b72708be7",
+                "name": "AINWebTool-15-X-vdre",
+                "isPermitted": true
+              },
+              {
+                "id": "fac7d9fd56154caeb9332202dcf2969f",
+                "name": "AINWebTool-15-X-NONPODECOMP",
+                "isPermitted": true
+              },
+              {
+                "id": "2d34d8396e194eb49969fd61ffbff961",
+                "name": "DN5242-Nov16-T5",
+                "isPermitted": true
+              },
+              {
+                "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+                "name": "ro-T11",
+                "isPermitted": true
+              },
+              {
+                "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+                "name": "ro-T112",
+                "isPermitted": true
+              },
+              {
+                "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+                "name": "DN5242-Nov21-T1",
+                "isPermitted": true
+              },
+              {
+                "id": "d0a3e3f2964542259d155a81c41aadc3",
+                "name": "test-hvf6-09",
+                "isPermitted": true
+              },
+              {
+                "id": "cbb99fe4ada84631b7baf046b6fd2044",
+                "name": "DN5242-Nov16-T3",
+                "isPermitted": true
+              }
+            ]
+          }
+        },
+        "productFamilies": [
+          {
+            "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+            "name": "SCOTTIE",
+            "isPermitted": true
+          },
+          {
+            "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "name": "IGNACIO",
+            "isPermitted": true
+          },
+          {
+            "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "name": "Christie",
+            "isPermitted": true
+          },
+          {
+            "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+            "name": "Enhanced Services",
+            "isPermitted": true
+          },
+          {
+            "id": "vTerrance",
+            "name": "vTerrance",
+            "isPermitted": true
+          },
+          {
+            "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+            "name": "vSCP",
+            "isPermitted": true
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": true
+          },
+          {
+            "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+            "name": "BVOIP",
+            "isPermitted": true
+          },
+          {
+            "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+            "name": "LINDSEY",
+            "isPermitted": true
+          },
+          {
+            "id": "LRSI-OSPF",
+            "name": "LRSI-OSPF",
+            "isPermitted": true
+          },
+          {
+            "id": "vRosemarie",
+            "name": "HNGATEWAY",
+            "isPermitted": true
+          },
+          {
+            "id": "vHNPaas",
+            "name": "WILKINS",
+            "isPermitted": true
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "TYLER SILVIA",
+            "isPermitted": true
+          },
+          {
+            "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+            "name": "VROUTER",
+            "isPermitted": true
+          },
+          {
+            "id": "Cisneros",
+            "name": "vMuriel",
+            "isPermitted": true
+          },
+          {
+            "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+            "name": "CARA Griffin",
+            "isPermitted": true
+          },
+          {
+            "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          },
+          {
+            "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+            "name": "Transport",
+            "isPermitted": true
+          },
+          {
+            "id": "vSalvatore",
+            "name": "vSalvatore",
+            "isPermitted": true
+          },
+          {
+            "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+            "name": "Josefina",
+            "isPermitted": true
+          },
+          {
+            "id": "vHubbard",
+            "name": "vHubbard",
+            "isPermitted": true
+          },
+          {
+            "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          }
+        ],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [
+            {
+              "id": "0",
+              "name": "vRichardson",
+              "isPermitted": false
+            },
+            {
+              "id": "1",
+              "name": "TYLER SILVIA",
+              "isPermitted": true
+            },
+            {
+              "id": "2",
+              "name": "Emanuel",
+              "isPermitted": false
+            },
+            {
+              "id": "3",
+              "name": "vJamie",
+              "isPermitted": false
+            },
+            {
+              "id": "4",
+              "name": "vVoiceMail",
+              "isPermitted": false
+            },
+            {
+              "id": "5",
+              "name": "Kennedy",
+              "isPermitted": false
+            },
+            {
+              "id": "6",
+              "name": "vSEGW",
+              "isPermitted": false
+            },
+            {
+              "id": "7",
+              "name": "vVM",
+              "isPermitted": false
+            },
+            {
+              "id": "8",
+              "name": "vOTA",
+              "isPermitted": false
+            },
+            {
+              "id": "9",
+              "name": "vMME",
+              "isPermitted": false
+            },
+            {
+              "id": "10",
+              "name": "vMNS",
+              "isPermitted": false
+            },
+            {
+              "id": "11",
+              "name": "vSCP",
+              "isPermitted": false
+            },
+            {
+              "id": "12",
+              "name": "VPMS",
+              "isPermitted": false
+            },
+            {
+              "id": "13",
+              "name": "vMMSC",
+              "isPermitted": false
+            },
+            {
+              "id": "14",
+              "name": "SSD",
+              "isPermitted": false
+            },
+            {
+              "id": "15",
+              "name": "vMOG",
+              "isPermitted": false
+            },
+            {
+              "id": "16",
+              "name": "LINDSEY",
+              "isPermitted": false
+            },
+            {
+              "id": "17",
+              "name": "JOHANNA_SANTOS",
+              "isPermitted": false
+            },
+            {
+              "id": "18",
+              "name": "vCarroll",
+              "isPermitted": false
+            }
+          ]
+        },
+        "aicZones": [
+          {
+            "id": "NFT1",
+            "name": "NFTJSSSS-NFT1"
+          },
+          {
+            "id": "JAG1",
+            "name": "YUDFJULP-JAG1"
+          },
+          {
+            "id": "YYY1",
+            "name": "UUUAIAAI-YYY1"
+          },
+          {
+            "id": "BAN1",
+            "name": "VSDKYUTP-BAN1"
+          },
+          {
+            "id": "DKJ1",
+            "name": "DKJSJDKA-DKJ1"
+          },
+          {
+            "id": "MCS1",
+            "name": "ASACMAMS-MCS1"
+          },
+          {
+            "id": "UIO1",
+            "name": "uioclli1-UIO1"
+          },
+          {
+            "id": "RAJ1",
+            "name": "YGBIJNLQ-RAJ1"
+          },
+          {
+            "id": "OPA1",
+            "name": "opaclli1-OPA1"
+          },
+          {
+            "id": "SDE1",
+            "name": "ZXCVBNMA-SDE1"
+          },
+          {
+            "id": "VEN2",
+            "name": "FGHJUHIL-VEN2"
+          },
+          {
+            "id": "ORL1",
+            "name": "ORLDFLMA-ORL1"
+          },
+          {
+            "id": "JAD1",
+            "name": "JADECLLI-JAD1"
+          },
+          {
+            "id": "ZXL1",
+            "name": "LWLWCANN-ZXL1"
+          },
+          {
+            "id": "CKL1",
+            "name": "CLKSKCKK-CKL1"
+          },
+          {
+            "id": "SDF1",
+            "name": "sdfclli1-SDF1"
+          },
+          {
+            "id": "RAD1",
+            "name": "RADICAL1-RAD1"
+          },
+          {
+            "id": "KIT1",
+            "name": "BHYJFGLN-KIT1"
+          },
+          {
+            "id": "REL1",
+            "name": "INGERFGT-REL1"
+          },
+          {
+            "id": "JNL1",
+            "name": "CJALSDAC-JNL1"
+          },
+          {
+            "id": "OLK1",
+            "name": "OLKOLKLS-OLK1"
+          },
+          {
+            "id": "CHI1",
+            "name": "CHILLIWE-CHI1"
+          },
+          {
+            "id": "UUU4",
+            "name": "UUUAAAUU-UUU4"
+          },
+          {
+            "id": "TUF1",
+            "name": "TUFCLLI1-TUF1"
+          },
+          {
+            "id": "KJN1",
+            "name": "CKALDKSA-KJN1"
+          },
+          {
+            "id": "SAM1",
+            "name": "SNDGCA64-SAN1"
+          },
+          {
+            "id": "SCK1",
+            "name": "SCKSCKSK-SCK1"
+          },
+          {
+            "id": "HJH1",
+            "name": "AOEEQQQD-HJH1"
+          },
+          {
+            "id": "HGD1",
+            "name": "SDFQWHGD-HGD1"
+          },
+          {
+            "id": "KOR1",
+            "name": "HYFLNBVT-KOR1"
+          },
+          {
+            "id": "ATL43",
+            "name": "AICLOCID-ATL43"
+          },
+          {
+            "id": "ATL54",
+            "name": "AICFTAAI-ATL54"
+          },
+          {
+            "id": "ATL66",
+            "name": "CLLIAAII-ATL66"
+          },
+          {
+            "id": "VEL1",
+            "name": "BNMLKUIK-VEL1"
+          },
+          {
+            "id": "ICC1",
+            "name": "SANJITAT-ICC1"
+          },
+          {
+            "id": "MNT11",
+            "name": "WSXEFBTH-MNT11"
+          },
+          {
+            "id": "DEF2",
+            "name": "WSBHGTYL-DEF2"
+          },
+          {
+            "id": "MAD11",
+            "name": "SDFQWGKL-MAD11"
+          },
+          {
+            "id": "OLG1",
+            "name": "OLHOLHOL-OLG1"
+          },
+          {
+            "id": "GAR1",
+            "name": "NGFVSJKO-GAR1"
+          },
+          {
+            "id": "SAN22",
+            "name": "GNVLSCTL-SAN22"
+          },
+          {
+            "id": "HRG1",
+            "name": "HRGHRGGS-HRG1"
+          },
+          {
+            "id": "JCS1",
+            "name": "JCSJSCJS-JCS1"
+          },
+          {
+            "id": "DHA12",
+            "name": "WSXEDECF-DHA12"
+          },
+          {
+            "id": "HJE1",
+            "name": "AOEEWWWD-HJE1"
+          },
+          {
+            "id": "NCA1",
+            "name": "NCANCANN-NCA1"
+          },
+          {
+            "id": "IOP1",
+            "name": "iopclli1-IOP1"
+          },
+          {
+            "id": "RTY1",
+            "name": "rtyclli1-RTY1"
+          },
+          {
+            "id": "KAP1",
+            "name": "HIOUYTRQ-KAP1"
+          },
+          {
+            "id": "ZEN1",
+            "name": "ZENCLLI1-ZEN1"
+          },
+          {
+            "id": "HKA1",
+            "name": "JAKHLASS-HKA1"
+          },
+          {
+            "id": "CQK1",
+            "name": "CQKSCAKK-CQK1"
+          },
+          {
+            "id": "SAI1",
+            "name": "UBEKQLPD-SAI1"
+          },
+          {
+            "id": "ERT1",
+            "name": "ertclli1-ERT1"
+          },
+          {
+            "id": "IBB1",
+            "name": "PLMKOIJU-IBB1"
+          },
+          {
+            "id": "TIR2",
+            "name": "PLKINHYI-TIR2"
+          },
+          {
+            "id": "HSD1",
+            "name": "CHASKCDS-HSD1"
+          },
+          {
+            "id": "SLF78",
+            "name": "SDCTLFN1-SLF78"
+          },
+          {
+            "id": "SEE78",
+            "name": "SDCTEEE4-SEE78"
+          },
+          {
+            "id": "SAN13",
+            "name": "TOKYJPFA-SAN13"
+          },
+          {
+            "id": "SAA78",
+            "name": "SDCTAAA1-SAA78"
+          },
+          {
+            "id": "LUC1",
+            "name": "ATLDFGYC-LUC1"
+          },
+          {
+            "id": "AMD13",
+            "name": "MEMATLAN-AMD13"
+          },
+          {
+            "id": "TOR1",
+            "name": "TOROONXN-TOR1"
+          },
+          {
+            "id": "QWE1",
+            "name": "QWECLLI1-QWE1"
+          },
+          {
+            "id": "ZOG1",
+            "name": "ZOGASTRO-ZOG1"
+          },
+          {
+            "id": "CAL33",
+            "name": "CALIFORN-CAL33"
+          },
+          {
+            "id": "SHH78",
+            "name": "SDIT1HHH-SHH78"
+          },
+          {
+            "id": "DSA1",
+            "name": "LKJHGFDS-DSA1"
+          },
+          {
+            "id": "CLG1",
+            "name": "CLGRABAD-CLG1"
+          },
+          {
+            "id": "BNA1",
+            "name": "BNARAGBK-BNA1"
+          },
+          {
+            "id": "ATL84",
+            "name": "CANTTCOC-ATL84"
+          },
+          {
+            "id": "APP1",
+            "name": "WBHGTYUI-APP1"
+          },
+          {
+            "id": "RJN1",
+            "name": "RJNRBZAW-RJN1"
+          },
+          {
+            "id": "EHH78",
+            "name": "SDCSHHH5-EHH78"
+          },
+          {
+            "id": "mac10",
+            "name": "PKGTESTF-mac10"
+          },
+          {
+            "id": "SXB78",
+            "name": "SDCTGXB1-SXB78"
+          },
+          {
+            "id": "SAX78",
+            "name": "SDCTAXG1-SAX78"
+          },
+          {
+            "id": "SYD1",
+            "name": "SYDNAUBV-SYD1"
+          },
+          {
+            "id": "TOK1",
+            "name": "TOKYJPFA-TOK1"
+          },
+          {
+            "id": "KGM2",
+            "name": "KGMTNC20-KGM2"
+          },
+          {
+            "id": "DCC1b",
+            "name": "POIUYTGH-DCC1b"
+          },
+          {
+            "id": "SKK78",
+            "name": "SDCTKKK1-SKK78"
+          },
+          {
+            "id": "SGG78",
+            "name": "SDCTGGG1-SGG78"
+          },
+          {
+            "id": "SJJ78",
+            "name": "SDCTJJJ1-SJJ78"
+          },
+          {
+            "id": "SBX78",
+            "name": "SDCTBXG1-SBX78"
+          },
+          {
+            "id": "LAG1",
+            "name": "LARGIZON-LAG1"
+          },
+          {
+            "id": "IAA1",
+            "name": "QAZXSWED-IAA1"
+          },
+          {
+            "id": "POI1",
+            "name": "PLMNJKIU-POI1"
+          },
+          {
+            "id": "LAG1a",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "PBL1",
+            "name": "PBLAPBAI-PBL1"
+          },
+          {
+            "id": "LAG45",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "MAR1",
+            "name": "MNBVCXZM-MAR1"
+          },
+          {
+            "id": "HST70",
+            "name": "HSTNTX70-HST70"
+          },
+          {
+            "id": "DCC1a",
+            "name": "POIUYTGH-DCC1a"
+          },
+          {
+            "id": "TOL1",
+            "name": "TOLDOH21-TOL1"
+          },
+          {
+            "id": "LON1",
+            "name": "LONEENCO-LON1"
+          },
+          {
+            "id": "SJU78",
+            "name": "SDIT1JUB-SJU78"
+          },
+          {
+            "id": "STN27",
+            "name": "HSTNTX01-STN27"
+          },
+          {
+            "id": "SSW56",
+            "name": "ss8126GT-SSW56"
+          },
+          {
+            "id": "SBB78",
+            "name": "SDIT1BBB-SBB78"
+          },
+          {
+            "id": "DCC3",
+            "name": "POIUYTGH-DCC3"
+          },
+          {
+            "id": "GNV1",
+            "name": "GNVLSCTL-GNV1"
+          },
+          {
+            "id": "WAS1",
+            "name": "WASHDCSW-WAS1"
+          },
+          {
+            "id": "TOY1",
+            "name": "TORYONNZ-TOY1"
+          },
+          {
+            "id": "STT1",
+            "name": "STTLWA02-STT1"
+          },
+          {
+            "id": "STG1",
+            "name": "STTGGE62-STG1"
+          },
+          {
+            "id": "SLL78",
+            "name": "SDCTLLL1-SLL78"
+          },
+          {
+            "id": "SBU78",
+            "name": "SDIT1BUB-SBU78"
+          },
+          {
+            "id": "ATL2",
+            "name": "ATLNGANW-ATL2"
+          },
+          {
+            "id": "BOT1",
+            "name": "BOTHWAKY-BOT1"
+          },
+          {
+            "id": "SNG1",
+            "name": "SNGPSIAU-SNG1"
+          },
+          {
+            "id": "NYC1",
+            "name": "NYCMNY54-NYC1"
+          },
+          {
+            "id": "LAG1b",
+            "name": "LARGIZON-LAG1b"
+          },
+          {
+            "id": "AMD15",
+            "name": "AMDFAA01-AMD15"
+          },
+          {
+            "id": "SNA1",
+            "name": "SNANTXCA-SNA1"
+          },
+          {
+            "id": "PLT1",
+            "name": "PLTNCA60-PLT1"
+          },
+          {
+            "id": "TLP1",
+            "name": "TLPNXM18-TLP1"
+          },
+          {
+            "id": "SDD81",
+            "name": "SAIT1DD6-SDD81"
+          },
+          {
+            "id": "DCC1",
+            "name": "POIUYTGH-DCC1"
+          },
+          {
+            "id": "DCC2",
+            "name": "POIUYTGH-DCC2"
+          },
+          {
+            "id": "OKC1",
+            "name": "OKCBOK55-OKC1"
+          },
+          {
+            "id": "PAR1",
+            "name": "PARSFRCG-PAR1"
+          },
+          {
+            "id": "TES36",
+            "name": "ABCEETES-TES36"
+          },
+          {
+            "id": "COM1",
+            "name": "PLMKOPIU-COM1"
+          },
+          {
+            "id": "ANI1",
+            "name": "ATLNGTRE-ANI1"
+          },
+          {
+            "id": "SDG78",
+            "name": "SDIT1BDG-SDG78"
+          },
+          {
+            "id": "mac20",
+            "name": "PKGTESTF-mac20"
+          },
+          {
+            "id": "DSF45",
+            "name": "DSFBG123-DSF45"
+          },
+          {
+            "id": "HST25",
+            "name": "HSTNTX01-HST25"
+          },
+          {
+            "id": "AMD18",
+            "name": "AUDIMA01-AMD18"
+          },
+          {
+            "id": "SAA80",
+            "name": "SAIT9AA3-SAA80"
+          },
+          {
+            "id": "SSA56",
+            "name": "SSIT2AA7-SSA56"
+          },
+          {
+            "id": "SDD82",
+            "name": "SAIT1DD9-SDD82"
+          },
+          {
+            "id": "JCV1",
+            "name": "JCVLFLBW-JCV1"
+          },
+          {
+            "id": "SUL2",
+            "name": "WERTYUJK-SUL2"
+          },
+          {
+            "id": "PUR1",
+            "name": "purelyde-PUR1"
+          },
+          {
+            "id": "FDE55",
+            "name": "FDERT555-FDE55"
+          },
+          {
+            "id": "SITE",
+            "name": "LONEENCO-SITE"
+          },
+          {
+            "id": "ATL1",
+            "name": "ATLNGAMA-ATL1"
+          },
+          {
+            "id": "JUL1",
+            "name": "ZXCVBNMM-JUL1"
+          },
+          {
+            "id": "TAT34",
+            "name": "TESAAISB-TAT34"
+          },
+          {
+            "id": "XCP12",
+            "name": "CHKGH123-XCP12"
+          },
+          {
+            "id": "RAI1",
+            "name": "poiuytre-RAI1"
+          },
+          {
+            "id": "HPO1",
+            "name": "ATLNGAUP-HPO1"
+          },
+          {
+            "id": "KJF12",
+            "name": "KJFDH123-KJF12"
+          },
+          {
+            "id": "SCC80",
+            "name": "SAIT9CC3-SCC80"
+          },
+          {
+            "id": "SAA12",
+            "name": "SAIT9AF8-SAA12"
+          },
+          {
+            "id": "SAA14",
+            "name": "SAIT1AA9-SAA14"
+          },
+          {
+            "id": "ATL35",
+            "name": "TTESSAAI-ATL35"
+          },
+          {
+            "id": "CWY1",
+            "name": "CWYMOWBS-CWY1"
+          },
+          {
+            "id": "ATL76",
+            "name": "TELEPAAI-ATL76"
+          },
+          {
+            "id": "DSL12",
+            "name": "DSLFK242-DSL12"
+          },
+          {
+            "id": "ATL53",
+            "name": "AAIATLTE-ATL53"
+          },
+          {
+            "id": "SAA11",
+            "name": "SAIT9AA2-SAA11"
+          },
+          {
+            "id": "ATL62",
+            "name": "TESSASCH-ATL62"
+          },
+          {
+            "id": "AUG1",
+            "name": "ASDFGHJK-AUG1"
+          },
+          {
+            "id": "POI22",
+            "name": "POIUY123-POI22"
+          },
+          {
+            "id": "SAA13",
+            "name": "SAIT1AA9-SAA13"
+          },
+          {
+            "id": "BHY17",
+            "name": "BHYTFRF3-BHY17"
+          },
+          {
+            "id": "LIS1",
+            "name": "HOSTPROF-LIS1"
+          },
+          {
+            "id": "SIP1",
+            "name": "ZXCVBNMK-SIP1"
+          },
+          {
+            "id": "ATL99",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "ATL64",
+            "name": "FORLOAAJ-ATL64"
+          },
+          {
+            "id": "TAT33",
+            "name": "TESAAISA-TAT33"
+          },
+          {
+            "id": "RAD10",
+            "name": "INDIPUNE-RAD10"
+          },
+          {
+            "id": "RTW5",
+            "name": "BHYTFRY4-RTW5"
+          },
+          {
+            "id": "JGS1",
+            "name": "KSJKKKKK-JGS1"
+          },
+          {
+            "id": "ATL98",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "WAN1",
+            "name": "LEIWANGW-WAN1"
+          },
+          {
+            "id": "ATL44",
+            "name": "ATLSANAB-ATL44"
+          },
+          {
+            "id": "RTD2",
+            "name": "BHYTFRk4-RTD2"
+          },
+          {
+            "id": "NIR1",
+            "name": "ORFLMANA-NIR1"
+          },
+          {
+            "id": "ATL75",
+            "name": "SANAAIRE-ATL75"
+          },
+          {
+            "id": "NUM1",
+            "name": "QWERTYUI-NUM1"
+          },
+          {
+            "id": "MTN32",
+            "name": "MDTWNJ21-MTN32"
+          },
+          {
+            "id": "RTZ4",
+            "name": "BHYTFRZ6-RTZ4"
+          },
+          {
+            "id": "ATL56",
+            "name": "ATLSANAC-ATL56"
+          },
+          {
+            "id": "AMS1",
+            "name": "AMSTNLBW-AMS1"
+          },
+          {
+            "id": "RCT1",
+            "name": "AMSTERNL-RCT1"
+          },
+          {
+            "id": "JAN1",
+            "name": "ORFLMATT-JAN1"
+          },
+          {
+            "id": "ABC14",
+            "name": "TESAAISA-ABC14"
+          },
+          {
+            "id": "TAT37",
+            "name": "TESAAISD-TAT37"
+          },
+          {
+            "id": "MIC54",
+            "name": "MICHIGAN-MIC54"
+          },
+          {
+            "id": "ABC11",
+            "name": "ATLSANAI-ABC11"
+          },
+          {
+            "id": "AMF11",
+            "name": "AMDOCS01-AMF11"
+          },
+          {
+            "id": "ATL63",
+            "name": "ATLSANEW-ATL63"
+          },
+          {
+            "id": "ABC12",
+            "name": "ATLSECIA-ABC12"
+          },
+          {
+            "id": "MTN20",
+            "name": "MDTWNJ21-MTN20"
+          },
+          {
+            "id": "ABC15",
+            "name": "AAITESAN-ABC15"
+          },
+          {
+            "id": "AVT1",
+            "name": "AVTRFLHD-AVT1"
+          },
+          {
+            "id": "ATL34",
+            "name": "ATLSANAI-ATL34"
+          }
+        ],
+        "categoryParameters": {
+          "owningEntityList": [
+            {
+              "id": "aaa1",
+              "name": "aaa1"
+            },
+            {
+              "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+              "name": "WayneHolland"
+            },
+            {
+              "id": "Melissa",
+              "name": "Melissa"
+            }
+          ],
+          "projectList": [
+            {
+              "id": "WATKINS",
+              "name": "WATKINS"
+            },
+            {
+              "id": "x1",
+              "name": "x1"
+            },
+            {
+              "id": "yyy1",
+              "name": "yyy1"
+            }
+          ],
+          "lineOfBusinessList": [
+            {
+              "id": "ONAP",
+              "name": "ONAP"
+            },
+            {
+              "id": "zzz1",
+              "name": "zzz1"
+            }
+          ],
+          "platformList": [
+            {
+              "id": "platform",
+              "name": "platform"
+            },
+            {
+              "id": "xxx1",
+              "name": "xxx1"
+            }
+          ]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [
+          {
+            "id": "CAR_2020_ER",
+            "name": "CAR_2020_ER",
+            "isPermitted": true
+          },
+          {
+            "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+            "name": "JULIO ERICKSON",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-2",
+            "name": "DALE BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-1",
+            "name": "LLOYD BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example",
+            "name": "JimmyExampleCust-20161102",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example2",
+            "name": "JimmyExampleCust-20161103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-102",
+            "name": "ERICA5779-TestSub-PWT-102",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-101",
+            "name": "ERICA5779-TestSub-PWT-101",
+            "isPermitted": false
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-4",
+            "name": "ERICA5779-Subscriber-5",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-103",
+            "name": "ERICA5779-TestSub-PWT-103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-2",
+            "name": "ERICA5779-Subscriber-2",
+            "isPermitted": false
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "SILVIA ROBBINS",
+            "isPermitted": true
+          },
+          {
+            "id": "ERICA5779-Subscriber-3",
+            "name": "ERICA5779-Subscriber-3",
+            "isPermitted": false
+          },
+          {
+            "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+            "name": "CRAIG/ROBERTS",
+            "isPermitted": false
+          }
+        ]
+      }
+    }
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('Service Control Generator', () => {
+  let injector;
+  let service: ServiceControlGenerator;
+  let httpMock: HttpTestingController;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [ServiceControlGenerator,
+        GenericFormService,
+        BasicControlGenerator,
+        AaiService,
+        FormBuilder,
+        LogService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockAppStore}]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(ServiceControlGenerator);
+    httpMock = injector.get(HttpTestingController);
+
+  })().then(done).catch(done.fail));
+
+
+  test('ServiceControlGenerator should return the correct controls with correct order', () => {
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId);
+    const globalSubscriberIdControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.GLOBAL_SUBSCRIBER_ID);
+
+    expect(globalSubscriberIdControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined();
+    expect(globalSubscriberIdControl.dataTestId).toEqual('subscriberName');
+    expect(globalSubscriberIdControl.type).toEqual(FormControlType.DROPDOWN);
+    expect(globalSubscriberIdControl.isDisabled).toBeFalsy();
+    expect(globalSubscriberIdControl.placeHolder).toEqual('Select Subscriber Name');
+    expect(globalSubscriberIdControl.displayName).toEqual('Subscriber name');
+    expect(globalSubscriberIdControl.onInit).toBeDefined();
+    expect(globalSubscriberIdControl.onChange).toBeDefined();
+
+    const serviceTypeControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.SUBSCRIPTION_SERVICE_TYPE);
+    expect(serviceTypeControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined();
+    expect(serviceTypeControl.dataTestId).toEqual('serviceType');
+    expect(serviceTypeControl.type).toEqual(FormControlType.DROPDOWN);
+    expect(serviceTypeControl.isDisabled).toBeTruthy();
+    expect(serviceTypeControl.placeHolder).toEqual('Select Service Type');
+    expect(serviceTypeControl.displayName).toEqual('Service type');
+    expect(serviceTypeControl.onInit).toBeDefined();
+    expect(serviceTypeControl.onChange).toBeDefined();
+
+    const productFamilyControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.PRODUCT_FAMILY_ID);
+    expect(productFamilyControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined();
+    expect(productFamilyControl.dataTestId).toEqual('productFamily');
+    expect(productFamilyControl.type).toEqual(FormControlType.DROPDOWN);
+    expect(productFamilyControl.isDisabled).toBeFalsy();
+    expect(productFamilyControl.placeHolder).toEqual('Select Product Family');
+    expect(productFamilyControl.displayName).toEqual('Product family');
+    expect(productFamilyControl.onInit).toBeDefined();
+
+    const lcpRegionControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.LCPCLOUD_REGION_ID);
+    expect(lcpRegionControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined();
+    expect(lcpRegionControl.dataTestId).toEqual('lcpRegion');
+    expect(lcpRegionControl.type).toEqual(FormControlType.DROPDOWN);
+    expect(lcpRegionControl.isDisabled).toBeTruthy();
+    expect(lcpRegionControl.placeHolder).toEqual('Select LCP Region');
+    expect(lcpRegionControl.displayName).toEqual('LCP region');
+    expect(lcpRegionControl.onInit).toBeDefined();
+    expect(lcpRegionControl.onChange).toBeDefined();
+
+    const tenantControl : DropdownFormControl = <DropdownFormControl>controls.find(item => item.controlName === FormControlNames.TENANT_ID);
+    expect(tenantControl.validations.find(val => val.validatorName === ValidatorOptions.required)).toBeDefined();
+    expect(tenantControl.dataTestId).toEqual('tenant');
+    expect(tenantControl.type).toEqual(FormControlType.DROPDOWN);
+    expect(tenantControl.isDisabled).toBeTruthy();
+    expect(tenantControl.placeHolder).toEqual('Select Tenant');
+    expect(tenantControl.displayName).toEqual('Tenant');
+    expect(tenantControl.onInit).toBeDefined();
+    expect(tenantControl.onChange).toBeDefined();
+
+    const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME);
+    const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern);
+    expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/);
+  });
+
+
+  test('getMacroFormControls should return the correct order of controls', () => {
+    // Order the fields
+    // 1.	Instance name
+    // 2.	Subscriber name
+    // 3.	Service type
+    // 4.	Owning entity (fix Entity to entity)
+    // 5.	Product family
+    // 6.	LCP region
+    // 7.	Tenant
+    // 8.	AIC zone (fix Zone to zone)
+    // 9.	Pause on pause points
+    // 10.	Project
+    // 11.	Rollback on failure
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId);
+
+
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.GLOBAL_SUBSCRIBER_ID,
+      FormControlNames.SUBSCRIPTION_SERVICE_TYPE ,
+      FormControlNames.OWNING_ENTITY_ID ,
+      FormControlNames.PRODUCT_FAMILY_ID ,
+      FormControlNames.LCPCLOUD_REGION_ID ,
+      FormControlNames.TENANT_ID ,
+      FormControlNames.AICZONE_ID ,
+      FormControlNames.PAUSE,
+      FormControlNames.PROJECT_NAME ,
+      FormControlNames.ROLLBACK_ON_FAILURE];
+    expect(controls.length).toEqual(11);
+    for(let i = 0 ; i < controls.length ; i++){
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+  test('getAlacartFormControls should return the correct order of controls', () => {
+    // Order the fields
+    // 1.	Instance name
+    // 2.	Subscriber name
+    // 3.	Service type
+    // 4.	Owning entity (fix Entity to entity)
+    // 5.	Project
+    // 6.	Rollback on failure
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const controls :FormControlModel[] = service.getAlaCartControls(serviceId);
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.GLOBAL_SUBSCRIBER_ID,
+      FormControlNames.SUBSCRIPTION_SERVICE_TYPE ,
+      FormControlNames.OWNING_ENTITY_ID ,
+      FormControlNames.PROJECT_NAME ,
+      FormControlNames.ROLLBACK_ON_FAILURE];
+
+    expect(controls.length).toEqual(6);
+    for(let i = 0 ; i < controls.length ; i++){
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.ts
new file mode 100644
index 0000000..539f848
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/service.control.generator.ts
@@ -0,0 +1,331 @@
+import {Injectable} from "@angular/core";
+import {GenericFormService} from "../generic-form.service";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../../store/reducers";
+import {
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../models/formControlModels/formControl.model";
+import {DropdownFormControl} from "../../../models/formControlModels/dropdownFormControl.model";
+import * as _ from 'lodash';
+import {BasicControlGenerator} from "./basic.control.generator";
+import {AaiService} from "../../../services/aaiService/aai.service";
+import {FormGroup} from "@angular/forms";
+import {FormControlType} from "../../../models/formControlModels/formControlTypes.enum";
+import {HttpClient} from "@angular/common/http";
+import {SelectOption} from "../../../models/selectOption";
+import {Observable} from "rxjs";
+import {LogService} from "../../../utils/log/log.service";
+import {ServiceModel} from "../../../models/serviceModel";
+import {of} from "rxjs";
+
+import {CheckboxFormControl} from "../../../models/formControlModels/checkboxFormControl.model";
+
+export enum FormControlNames {
+  INSTANCE_NAME = 'instanceName',
+  GLOBAL_SUBSCRIBER_ID = 'globalSubscriberId',
+  SUBSCRIPTION_SERVICE_TYPE = 'subscriptionServiceType',
+  PRODUCT_FAMILY_ID = 'productFamilyId',
+  LCPCLOUD_REGION_ID = 'lcpCloudRegionId',
+  TENANT_ID = 'tenantId',
+  AICZONE_ID = 'aicZoneId',
+  PROJECT_NAME = 'projectName',
+  OWNING_ENTITY_ID = 'owningEntityId',
+  ROLLBACK_ON_FAILURE = 'rollbackOnFailure',
+  PAUSE = 'pause'
+}
+
+@Injectable()
+export class  ServiceControlGenerator {
+  aaiService : AaiService;
+  constructor(private genericFormService : GenericFormService,
+              private _basicControlGenerator : BasicControlGenerator,
+              private store: NgRedux<AppState>,
+              private http: HttpClient,
+              private _aaiService : AaiService,
+              private _logService : LogService){
+    this.aaiService = _aaiService;
+  }
+
+  getServiceInstance = (serviceId : string) : any => {
+    let serviceInstance = null;
+    if (_.has(this.store.getState().service.serviceInstance, serviceId)) {
+      serviceInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId]);
+    }
+
+    return serviceInstance;
+  };
+
+  getAlaCartControls(serviceId: string, dynamicInputs?: any[]) : FormControlModel[] {
+    if(_.isNil(serviceId)){
+      this._logService.error('should provide serviceId', serviceId);
+      return [];
+    }
+    const serviceInstance = this.getServiceInstance(serviceId);
+
+    let result : FormControlModel[] = [];
+
+    const serviceModel = new ServiceModel(this.store.getState().service.serviceHierarchy[serviceId]);
+    if(!_.isNil(serviceModel)){
+      result.push(this._basicControlGenerator.getInstanceName(serviceInstance, serviceId, serviceModel.isEcompGeneratedNaming));
+      result.push(this.getGlobalSubscriberControl(serviceInstance, result));
+      result.push(this.getServiceTypeControl(serviceInstance, result, false));
+      result.push(this.getOwningEntityControl(serviceInstance, result));
+      result.push(this.getProjectControl(serviceInstance, result));
+      result.push(this.getRollbackOnFailureControl(serviceInstance, result));
+    }
+
+    this._logService.info('Generate dynamic service controls, is edit mode: ' + serviceInstance != null , result);
+    return result;
+  }
+
+  getMacroFormControls(serviceId: string, dynamicInputs?: any[]) : FormControlModel[] {
+    if(_.isNil(serviceId)){
+      this._logService.error('should provide serviceId', serviceId);
+      return [];
+    }
+
+    const serviceInstance = this.getServiceInstance(serviceId);
+
+    let result : FormControlModel[] = [];
+    const serviceModel = new ServiceModel(this.store.getState().service.serviceHierarchy[serviceId]);
+    if(!_.isNil(serviceModel)){
+      result.push(this._basicControlGenerator.getInstanceName(serviceInstance, serviceId, serviceModel.isEcompGeneratedNaming));
+      result.push(this.getGlobalSubscriberControl(serviceInstance, result));
+      result.push(this.getServiceTypeControl(serviceInstance, result, true));
+      result.push(this.getOwningEntityControl(serviceInstance, result));
+      result.push(this.getProductFamilyControl(serviceInstance, result));
+      result.push(this.getLcpRegionControl(serviceInstance, result));
+      result.push(this.getTenantControl(serviceInstance, result),);
+      result.push(this.getAICZoneControl(serviceInstance, result));
+
+      if(serviceModel.isMultiStepDesign){
+        result.push(new CheckboxFormControl({
+          controlName : FormControlNames.PAUSE,
+          displayName : 'Pause on pause points',
+          dataTestId : 'Pause',
+          isDisabled : false,
+          validations : [new ValidatorModel(ValidatorOptions.required, 'is required')],
+          value : serviceInstance ? serviceInstance.pause : null,
+        }));
+      }
+
+      result.push(this.getProjectControl(serviceInstance, result));
+      result.push(this.getRollbackOnFailureControl(serviceInstance, result));
+    }
+
+
+    this._logService.info('Generate dynamic service controls, is edit mode: ' + serviceInstance != null , result);
+    return result;
+  }
+
+  getRollBackOnFailureOptions = () : Observable<SelectOption[]> =>{
+    return of([
+      new SelectOption({id: 'true', name: 'Rollback'}),
+      new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+    ]);
+  };
+
+  getGlobalSubscriberControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl  => {
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.GLOBAL_SUBSCRIBER_ID,
+      displayName : 'Subscriber name',
+      dataTestId : 'subscriberName',
+      placeHolder : 'Select Subscriber Name',
+      isDisabled : false,
+      name : "subscriber-name-select",
+      value : serviceInstance ? serviceInstance.globalSubscriberId : null,
+      validations : [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInit : this._basicControlGenerator.getSubscribeInitResult.bind(this._aaiService, this.aaiService.getSubscribers),
+      onChange :  (param: string, form : FormGroup) => {
+        form.controls[FormControlNames.SUBSCRIPTION_SERVICE_TYPE].reset();
+        if(!_.isNil(param)){
+          form.controls[FormControlNames.SUBSCRIPTION_SERVICE_TYPE].enable();
+          this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getServiceTypes(param).subscribe(res =>{
+            controls.find(item => item.controlName === FormControlNames.SUBSCRIPTION_SERVICE_TYPE)['options$'] = res;
+          }));
+        }
+        else {
+          form.controls[FormControlNames.SUBSCRIPTION_SERVICE_TYPE].disable();
+        }
+      }
+    })
+  };
+
+  getServiceTypeControl = (serviceInstance : any, controls : FormControlModel[], isMacro?: boolean) : DropdownFormControl => {
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.SUBSCRIPTION_SERVICE_TYPE,
+      displayName : 'Service type',
+      dataTestId : 'serviceType',
+      placeHolder : 'Select Service Type',
+      selectedField : 'name',
+      name : "service-type",
+      isDisabled : _.isNil(serviceInstance),
+      value : serviceInstance ? serviceInstance.subscriptionServiceType : null,
+      validations : [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInit : serviceInstance ? this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this.aaiService.getServiceTypes.bind(this, serviceInstance.globalSubscriberId)) : ()=>{},
+      onChange :  (param: string, form : FormGroup) => {
+        if(isMacro){
+          form.controls[FormControlNames.LCPCLOUD_REGION_ID].reset();
+          if(!_.isNil(param)) {
+            form.controls[FormControlNames.LCPCLOUD_REGION_ID].enable();
+            const globalCustomerId: string = form.controls[FormControlNames.GLOBAL_SUBSCRIBER_ID].value;
+            if (!_.isNil(globalCustomerId)) {
+              this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, param).subscribe(res => {
+                controls.find(item => item.controlName === FormControlNames.LCPCLOUD_REGION_ID)['options$'] = res.lcpRegionList;
+              }));
+            }
+          }
+          else {
+            form.controls[FormControlNames.LCPCLOUD_REGION_ID].disable();
+          }
+        }
+
+      }
+    })
+  };
+
+  getOwningEntityControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => {
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.OWNING_ENTITY_ID,
+      displayName : 'Owning entity',
+      dataTestId : 'owningEntity',
+      placeHolder : 'Select Owning Entity',
+      name :"owningEntity",
+      isDisabled : false,
+      validations : [new ValidatorModel(ValidatorOptions.required, 'is required'),],
+      onInitSelectedField : ['owningEntityList'],
+      value : serviceInstance ? serviceInstance.owningEntityId : null,
+      onInit : this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
+    })
+  };
+
+  getProductFamilyControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => {
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.PRODUCT_FAMILY_ID,
+      displayName : 'Product family',
+      dataTestId : 'productFamily',
+      placeHolder : 'Select Product Family',
+      isDisabled : false,
+      name : "product-family-select",
+      value : serviceInstance ? serviceInstance.productFamilyId : null,
+      validations : [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInit : this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getProductFamilies),
+    })
+  };
+
+  getLcpRegionControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => {
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.LCPCLOUD_REGION_ID,
+      displayName : 'LCP region',
+      dataTestId : 'lcpRegion',
+      placeHolder : 'Select LCP Region',
+      name : "lcpRegion",
+      isDisabled : _.isNil(serviceInstance),
+      value : serviceInstance ? serviceInstance.lcpCloudRegionId : null,
+      validations : [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInitSelectedField : ['lcpRegionList'],
+      onInit : serviceInstance ? this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this.aaiService.getLcpRegionsAndTenants.bind(this, serviceInstance.globalSubscriberId, serviceInstance.subscriptionServiceType)) : ()=>{},
+      onChange :  (param: string, form : FormGroup) => {
+        form.controls[FormControlNames.TENANT_ID].reset();
+        if(param) {
+          form.controls[FormControlNames.TENANT_ID].enable();
+        }
+        else {
+          form.controls[FormControlNames.TENANT_ID].disable();
+        }
+        const globalCustomerId : string = form.controls[FormControlNames.GLOBAL_SUBSCRIBER_ID].value;
+        const serviceType : string = form.controls[FormControlNames.SUBSCRIPTION_SERVICE_TYPE].value;
+        if(!_.isNil(globalCustomerId) && !_.isNil(serviceType)){
+          this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res =>{
+            controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param];
+          }));
+        }
+      }
+    })
+  };
+
+  getTenantControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => {
+    return  new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.TENANT_ID,
+      displayName : 'Tenant',
+      dataTestId : 'tenant',
+      placeHolder : 'Select Tenant',
+      name : "tenant",
+      isDisabled : _.isNil(serviceInstance),
+      onInitSelectedField :serviceInstance ?  ['lcpRegionsTenantsMap', serviceInstance.lcpCloudRegionId] : null,
+      onInit : serviceInstance ? this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this.aaiService.getLcpRegionsAndTenants.bind(this, serviceInstance.globalSubscriberId, serviceInstance.subscriptionServiceType)) : ()=>{},
+      value : serviceInstance ? serviceInstance.tenantId : null,
+      validations : [new ValidatorModel(ValidatorOptions.required, 'is required')],
+    })
+  };
+
+  getAICZoneControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => {
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.AICZONE_ID,
+      displayName : 'AIC zone',
+      dataTestId : 'aic_zone',
+      placeHolder : 'Select AIC zone',
+      name : "aicZone",
+      value : serviceInstance ? serviceInstance.aicZoneId : null,
+      isDisabled : false,
+      validations : [],
+      onInit : this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getAicZones)
+    })
+  };
+
+  getPauseControl = (serviceInstance : any, controls : FormControlModel[]) :CheckboxFormControl => {
+    return  new CheckboxFormControl({
+      controlName : FormControlNames.PAUSE,
+      displayName : 'Pause on pause points',
+      dataTestId : 'Pause',
+      isDisabled : false,
+      value : serviceInstance ? serviceInstance.pause : null,
+    })
+  };
+
+  getProjectControl = (serviceInstance : any, controls : FormControlModel[]) :DropdownFormControl =>{
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.PROJECT_NAME,
+      displayName : 'Project',
+      dataTestId : 'project',
+      placeHolder : 'Select Project',
+      name : "project",
+      isDisabled : false,
+      validations : [],
+      value : serviceInstance ? serviceInstance.projectName : null,
+      onInitSelectedField : ['projectList'],
+      onInit : this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
+    })
+  };
+
+  getRollbackOnFailureControl = (serviceInstance : any, controls : FormControlModel[]) : DropdownFormControl => {
+    return new DropdownFormControl({
+      type : FormControlType.DROPDOWN,
+      controlName : FormControlNames.ROLLBACK_ON_FAILURE,
+      displayName : 'Rollback on failure',
+      dataTestId : 'rollback',
+      isDisabled : false,
+      validations : [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      value : serviceInstance ? serviceInstance.rollbackOnFailure : 'true',
+      onInit : this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions)
+    })
+  };
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.spec.ts
new file mode 100644
index 0000000..36be1bd
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.spec.ts
@@ -0,0 +1,2008 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {NgRedux} from '@angular-redux/store';
+import {BasicControlGenerator} from "../basic.control.generator";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {GenericFormService} from "../../generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {LogService} from "../../../../utils/log/log.service";
+import {
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {FormControlNames, VfModuleControlGenerator} from "./vfModule.control.generator";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+
+class MockAppStore<T> {
+  getState() {
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {}
+            },
+            "vnfs": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "serviceEcompNaming" : "true",
+                "properties": {
+                  "ecomp_generated_naming": "false",
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VF",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "ecomp_generated_naming": "false",
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "networks": {},
+            "vnfs": {
+              "VF_vMee 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                      "isMissingData": false,
+                      "sdncPreReload": null,
+                      "modelInfo": {
+                        "modelType": "VFmodule",
+                        "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                        "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                        "modelName": "VfVmee..base_vmme..module-0",
+                        "modelVersion": "2",
+                        "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                        "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                      },
+                      "instanceParams": [
+                        {}
+                      ],
+                      "trackById": "wmtm6sy2uj"
+                    }
+                  }
+                },
+                "isMissingData": true,
+                "originalName": "VF_vMee 0",
+                "vnfStoreKey": "VF_vMee 0",
+                "trackById": "p3wk448m5do",
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+                "lcpCloudRegionId": null,
+                "tenantId": null,
+                "lineOfBusiness": null,
+                "platformName": null,
+                "modelInfo": {
+                  "modelType": "VF",
+                  "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+                  "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+                  "modelName": "VF_vMee",
+                  "modelVersion": "2.0",
+                  "modelCustomizationName": "VF_vMee 0"
+                }
+              }
+            },
+            "instanceParams": [
+              {}
+            ],
+            "validationCounter": 1,
+            "existingNames": {},
+            "existingVNFCounterMap": {
+              "d6557200-ecf2-4641-8094-5393ae3aae60": 1
+            },
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": "hvf6",
+            "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "aicZoneId": "JAG1",
+            "projectName": "x1",
+            "rollbackOnFailure": "true",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "ComplexService",
+              "modelVersion": "1.0",
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+            },
+            "isALaCarte": false,
+            "name": "ComplexService",
+            "version": "1.0",
+            "description": "ComplexService",
+            "category": "Emanuel",
+            "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isEcompGeneratedNaming": true,
+            "isMultiStepDesign": false
+          }
+        },
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [
+            {
+              "id": "JANET25",
+              "name": "JANET25",
+              "isPermitted": true
+            },
+            {
+              "id": "hvf6",
+              "name": "hvf6",
+              "isPermitted": true
+            }
+          ],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [
+              {
+                "id": "092eb9e8e4b7412e8787dd091bc58e86",
+                "name": "USP-SIP-IC-24335-T-01",
+                "isPermitted": true
+              }
+            ],
+            "hvf6": [
+              {
+                "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "name": "AIN Web Tool-15-D-testalexandria",
+                "isPermitted": true
+              },
+              {
+                "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "name": "AIN Web Tool-15-D-STTest2",
+                "isPermitted": true
+              },
+              {
+                "id": "1178612d2b394be4834ad77f567c0af2",
+                "name": "AIN Web Tool-15-D-SSPtestcustome",
+                "isPermitted": true
+              },
+              {
+                "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+                "name": "AIN Web Tool-15-D-UncheckedEcopm",
+                "isPermitted": true
+              },
+              {
+                "id": "de007636e25249238447264a988a927b",
+                "name": "AIN Web Tool-15-D-dfsdf",
+                "isPermitted": true
+              },
+              {
+                "id": "62f29b3613634ca6a3065cbe0e020c44",
+                "name": "AIN/SMS-16-D-Multiservices1",
+                "isPermitted": true
+              },
+              {
+                "id": "649289e30d3244e0b48098114d63c2aa",
+                "name": "AIN Web Tool-15-D-SSPST66",
+                "isPermitted": true
+              },
+              {
+                "id": "3f21eeea6c2c486bba31dab816c05a32",
+                "name": "AIN Web Tool-15-D-ASSPST47",
+                "isPermitted": true
+              },
+              {
+                "id": "f60ce21d3ee6427586cff0d22b03b773",
+                "name": "CESAR-100-D-sspjg67246",
+                "isPermitted": true
+              },
+              {
+                "id": "8774659e425f479895ae091bb5d46560",
+                "name": "CESAR-100-D-sspjg68359",
+                "isPermitted": true
+              },
+              {
+                "id": "624eb554b0d147c19ff8885341760481",
+                "name": "AINWebTool-15-D-iftach",
+                "isPermitted": true
+              },
+              {
+                "id": "214f55f5fc414c678059c383b03e4962",
+                "name": "CESAR-100-D-sspjg612401",
+                "isPermitted": true
+              },
+              {
+                "id": "c90666c291664841bb98e4d981ff1db5",
+                "name": "CESAR-100-D-sspjg621340",
+                "isPermitted": true
+              },
+              {
+                "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+                "name": "sspjg621351cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "b386b768a3f24c8e953abbe0b3488c02",
+                "name": "AINWebTool-15-D-eteancomp",
+                "isPermitted": true
+              },
+              {
+                "id": "dc6c4dbfd225474e9deaadd34968646c",
+                "name": "AINWebTool-15-T-SPFET",
+                "isPermitted": true
+              },
+              {
+                "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+                "name": "AINWebTool-15-X-eeweww",
+                "isPermitted": true
+              },
+              {
+                "id": "f2f3830e4c984d45bcd00e1a04158a79",
+                "name": "CESAR-100-D-spjg61909",
+                "isPermitted": true
+              },
+              {
+                "id": "05b91bd5137f4929878edd965755c06d",
+                "name": "CESAR-100-D-sspjg621512cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "7002fbe8482d4a989ddf445b1ce336e0",
+                "name": "AINWebTool-15-X-vdr",
+                "isPermitted": true
+              },
+              {
+                "id": "4008522be43741dcb1f5422022a2aa0b",
+                "name": "AINWebTool-15-D-ssasa",
+                "isPermitted": true
+              },
+              {
+                "id": "f44e2e96a1b6476abfda2fa407b00169",
+                "name": "AINWebTool-15-D-PFNPT",
+                "isPermitted": true
+              },
+              {
+                "id": "b69a52bec8a84669a37a1e8b72708be7",
+                "name": "AINWebTool-15-X-vdre",
+                "isPermitted": true
+              },
+              {
+                "id": "fac7d9fd56154caeb9332202dcf2969f",
+                "name": "AINWebTool-15-X-NONPODECOMP",
+                "isPermitted": true
+              },
+              {
+                "id": "2d34d8396e194eb49969fd61ffbff961",
+                "name": "DN5242-Nov16-T5",
+                "isPermitted": true
+              },
+              {
+                "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+                "name": "ro-T11",
+                "isPermitted": true
+              },
+              {
+                "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+                "name": "ro-T112",
+                "isPermitted": true
+              },
+              {
+                "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+                "name": "DN5242-Nov21-T1",
+                "isPermitted": true
+              },
+              {
+                "id": "d0a3e3f2964542259d155a81c41aadc3",
+                "name": "test-hvf6-09",
+                "isPermitted": true
+              },
+              {
+                "id": "cbb99fe4ada84631b7baf046b6fd2044",
+                "name": "DN5242-Nov16-T3",
+                "isPermitted": true
+              }
+            ]
+          }
+        },
+        "productFamilies": [
+          {
+            "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+            "name": "SCOTTIE",
+            "isPermitted": true
+          },
+          {
+            "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "name": "IGNACIO",
+            "isPermitted": true
+          },
+          {
+            "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "name": "Christie",
+            "isPermitted": true
+          },
+          {
+            "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+            "name": "Enhanced Services",
+            "isPermitted": true
+          },
+          {
+            "id": "vTerrance",
+            "name": "vTerrance",
+            "isPermitted": true
+          },
+          {
+            "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+            "name": "vSCP",
+            "isPermitted": true
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": true
+          },
+          {
+            "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+            "name": "BVOIP",
+            "isPermitted": true
+          },
+          {
+            "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+            "name": "LINDSEY",
+            "isPermitted": true
+          },
+          {
+            "id": "LRSI-OSPF",
+            "name": "LRSI-OSPF",
+            "isPermitted": true
+          },
+          {
+            "id": "vRosemarie",
+            "name": "HNGATEWAY",
+            "isPermitted": true
+          },
+          {
+            "id": "vHNPaas",
+            "name": "WILKINS",
+            "isPermitted": true
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "TYLER SILVIA",
+            "isPermitted": true
+          },
+          {
+            "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+            "name": "VROUTER",
+            "isPermitted": true
+          },
+          {
+            "id": "Cisneros",
+            "name": "vMuriel",
+            "isPermitted": true
+          },
+          {
+            "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+            "name": "CARA Griffin",
+            "isPermitted": true
+          },
+          {
+            "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          },
+          {
+            "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+            "name": "Transport",
+            "isPermitted": true
+          },
+          {
+            "id": "vSalvatore",
+            "name": "vSalvatore",
+            "isPermitted": true
+          },
+          {
+            "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+            "name": "Josefina",
+            "isPermitted": true
+          },
+          {
+            "id": "vHubbard",
+            "name": "vHubbard",
+            "isPermitted": true
+          },
+          {
+            "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          }
+        ],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [
+            {
+              "id": "0",
+              "name": "vRichardson",
+              "isPermitted": false
+            },
+            {
+              "id": "1",
+              "name": "TYLER SILVIA",
+              "isPermitted": true
+            },
+            {
+              "id": "2",
+              "name": "Emanuel",
+              "isPermitted": false
+            },
+            {
+              "id": "3",
+              "name": "vJamie",
+              "isPermitted": false
+            },
+            {
+              "id": "4",
+              "name": "vVoiceMail",
+              "isPermitted": false
+            },
+            {
+              "id": "5",
+              "name": "Kennedy",
+              "isPermitted": false
+            },
+            {
+              "id": "6",
+              "name": "vSEGW",
+              "isPermitted": false
+            },
+            {
+              "id": "7",
+              "name": "vVM",
+              "isPermitted": false
+            },
+            {
+              "id": "8",
+              "name": "vOTA",
+              "isPermitted": false
+            },
+            {
+              "id": "9",
+              "name": "vMME",
+              "isPermitted": false
+            },
+            {
+              "id": "10",
+              "name": "vMNS",
+              "isPermitted": false
+            },
+            {
+              "id": "11",
+              "name": "vSCP",
+              "isPermitted": false
+            },
+            {
+              "id": "12",
+              "name": "VPMS",
+              "isPermitted": false
+            },
+            {
+              "id": "13",
+              "name": "vMMSC",
+              "isPermitted": false
+            },
+            {
+              "id": "14",
+              "name": "SSD",
+              "isPermitted": false
+            },
+            {
+              "id": "15",
+              "name": "vMOG",
+              "isPermitted": false
+            },
+            {
+              "id": "16",
+              "name": "LINDSEY",
+              "isPermitted": false
+            },
+            {
+              "id": "17",
+              "name": "JOHANNA_SANTOS",
+              "isPermitted": false
+            },
+            {
+              "id": "18",
+              "name": "vCarroll",
+              "isPermitted": false
+            }
+          ]
+        },
+        "aicZones": [
+          {
+            "id": "NFT1",
+            "name": "NFTJSSSS-NFT1"
+          },
+          {
+            "id": "JAG1",
+            "name": "YUDFJULP-JAG1"
+          },
+          {
+            "id": "YYY1",
+            "name": "UUUAIAAI-YYY1"
+          },
+          {
+            "id": "BAN1",
+            "name": "VSDKYUTP-BAN1"
+          },
+          {
+            "id": "DKJ1",
+            "name": "DKJSJDKA-DKJ1"
+          },
+          {
+            "id": "MCS1",
+            "name": "ASACMAMS-MCS1"
+          },
+          {
+            "id": "UIO1",
+            "name": "uioclli1-UIO1"
+          },
+          {
+            "id": "RAJ1",
+            "name": "YGBIJNLQ-RAJ1"
+          },
+          {
+            "id": "OPA1",
+            "name": "opaclli1-OPA1"
+          },
+          {
+            "id": "SDE1",
+            "name": "ZXCVBNMA-SDE1"
+          },
+          {
+            "id": "VEN2",
+            "name": "FGHJUHIL-VEN2"
+          },
+          {
+            "id": "ORL1",
+            "name": "ORLDFLMA-ORL1"
+          },
+          {
+            "id": "JAD1",
+            "name": "JADECLLI-JAD1"
+          },
+          {
+            "id": "ZXL1",
+            "name": "LWLWCANN-ZXL1"
+          },
+          {
+            "id": "CKL1",
+            "name": "CLKSKCKK-CKL1"
+          },
+          {
+            "id": "SDF1",
+            "name": "sdfclli1-SDF1"
+          },
+          {
+            "id": "RAD1",
+            "name": "RADICAL1-RAD1"
+          },
+          {
+            "id": "KIT1",
+            "name": "BHYJFGLN-KIT1"
+          },
+          {
+            "id": "REL1",
+            "name": "INGERFGT-REL1"
+          },
+          {
+            "id": "JNL1",
+            "name": "CJALSDAC-JNL1"
+          },
+          {
+            "id": "OLK1",
+            "name": "OLKOLKLS-OLK1"
+          },
+          {
+            "id": "CHI1",
+            "name": "CHILLIWE-CHI1"
+          },
+          {
+            "id": "UUU4",
+            "name": "UUUAAAUU-UUU4"
+          },
+          {
+            "id": "TUF1",
+            "name": "TUFCLLI1-TUF1"
+          },
+          {
+            "id": "KJN1",
+            "name": "CKALDKSA-KJN1"
+          },
+          {
+            "id": "SAM1",
+            "name": "SNDGCA64-SAN1"
+          },
+          {
+            "id": "SCK1",
+            "name": "SCKSCKSK-SCK1"
+          },
+          {
+            "id": "HJH1",
+            "name": "AOEEQQQD-HJH1"
+          },
+          {
+            "id": "HGD1",
+            "name": "SDFQWHGD-HGD1"
+          },
+          {
+            "id": "KOR1",
+            "name": "HYFLNBVT-KOR1"
+          },
+          {
+            "id": "ATL43",
+            "name": "AICLOCID-ATL43"
+          },
+          {
+            "id": "ATL54",
+            "name": "AICFTAAI-ATL54"
+          },
+          {
+            "id": "ATL66",
+            "name": "CLLIAAII-ATL66"
+          },
+          {
+            "id": "VEL1",
+            "name": "BNMLKUIK-VEL1"
+          },
+          {
+            "id": "ICC1",
+            "name": "SANJITAT-ICC1"
+          },
+          {
+            "id": "MNT11",
+            "name": "WSXEFBTH-MNT11"
+          },
+          {
+            "id": "DEF2",
+            "name": "WSBHGTYL-DEF2"
+          },
+          {
+            "id": "MAD11",
+            "name": "SDFQWGKL-MAD11"
+          },
+          {
+            "id": "OLG1",
+            "name": "OLHOLHOL-OLG1"
+          },
+          {
+            "id": "GAR1",
+            "name": "NGFVSJKO-GAR1"
+          },
+          {
+            "id": "SAN22",
+            "name": "GNVLSCTL-SAN22"
+          },
+          {
+            "id": "HRG1",
+            "name": "HRGHRGGS-HRG1"
+          },
+          {
+            "id": "JCS1",
+            "name": "JCSJSCJS-JCS1"
+          },
+          {
+            "id": "DHA12",
+            "name": "WSXEDECF-DHA12"
+          },
+          {
+            "id": "HJE1",
+            "name": "AOEEWWWD-HJE1"
+          },
+          {
+            "id": "NCA1",
+            "name": "NCANCANN-NCA1"
+          },
+          {
+            "id": "IOP1",
+            "name": "iopclli1-IOP1"
+          },
+          {
+            "id": "RTY1",
+            "name": "rtyclli1-RTY1"
+          },
+          {
+            "id": "KAP1",
+            "name": "HIOUYTRQ-KAP1"
+          },
+          {
+            "id": "ZEN1",
+            "name": "ZENCLLI1-ZEN1"
+          },
+          {
+            "id": "HKA1",
+            "name": "JAKHLASS-HKA1"
+          },
+          {
+            "id": "CQK1",
+            "name": "CQKSCAKK-CQK1"
+          },
+          {
+            "id": "SAI1",
+            "name": "UBEKQLPD-SAI1"
+          },
+          {
+            "id": "ERT1",
+            "name": "ertclli1-ERT1"
+          },
+          {
+            "id": "IBB1",
+            "name": "PLMKOIJU-IBB1"
+          },
+          {
+            "id": "TIR2",
+            "name": "PLKINHYI-TIR2"
+          },
+          {
+            "id": "HSD1",
+            "name": "CHASKCDS-HSD1"
+          },
+          {
+            "id": "SLF78",
+            "name": "SDCTLFN1-SLF78"
+          },
+          {
+            "id": "SEE78",
+            "name": "SDCTEEE4-SEE78"
+          },
+          {
+            "id": "SAN13",
+            "name": "TOKYJPFA-SAN13"
+          },
+          {
+            "id": "SAA78",
+            "name": "SDCTAAA1-SAA78"
+          },
+          {
+            "id": "LUC1",
+            "name": "ATLDFGYC-LUC1"
+          },
+          {
+            "id": "AMD13",
+            "name": "MEMATLAN-AMD13"
+          },
+          {
+            "id": "TOR1",
+            "name": "TOROONXN-TOR1"
+          },
+          {
+            "id": "QWE1",
+            "name": "QWECLLI1-QWE1"
+          },
+          {
+            "id": "ZOG1",
+            "name": "ZOGASTRO-ZOG1"
+          },
+          {
+            "id": "CAL33",
+            "name": "CALIFORN-CAL33"
+          },
+          {
+            "id": "SHH78",
+            "name": "SDIT1HHH-SHH78"
+          },
+          {
+            "id": "DSA1",
+            "name": "LKJHGFDS-DSA1"
+          },
+          {
+            "id": "CLG1",
+            "name": "CLGRABAD-CLG1"
+          },
+          {
+            "id": "BNA1",
+            "name": "BNARAGBK-BNA1"
+          },
+          {
+            "id": "ATL84",
+            "name": "CANTTCOC-ATL84"
+          },
+          {
+            "id": "APP1",
+            "name": "WBHGTYUI-APP1"
+          },
+          {
+            "id": "RJN1",
+            "name": "RJNRBZAW-RJN1"
+          },
+          {
+            "id": "EHH78",
+            "name": "SDCSHHH5-EHH78"
+          },
+          {
+            "id": "mac10",
+            "name": "PKGTESTF-mac10"
+          },
+          {
+            "id": "SXB78",
+            "name": "SDCTGXB1-SXB78"
+          },
+          {
+            "id": "SAX78",
+            "name": "SDCTAXG1-SAX78"
+          },
+          {
+            "id": "SYD1",
+            "name": "SYDNAUBV-SYD1"
+          },
+          {
+            "id": "TOK1",
+            "name": "TOKYJPFA-TOK1"
+          },
+          {
+            "id": "KGM2",
+            "name": "KGMTNC20-KGM2"
+          },
+          {
+            "id": "DCC1b",
+            "name": "POIUYTGH-DCC1b"
+          },
+          {
+            "id": "SKK78",
+            "name": "SDCTKKK1-SKK78"
+          },
+          {
+            "id": "SGG78",
+            "name": "SDCTGGG1-SGG78"
+          },
+          {
+            "id": "SJJ78",
+            "name": "SDCTJJJ1-SJJ78"
+          },
+          {
+            "id": "SBX78",
+            "name": "SDCTBXG1-SBX78"
+          },
+          {
+            "id": "LAG1",
+            "name": "LARGIZON-LAG1"
+          },
+          {
+            "id": "IAA1",
+            "name": "QAZXSWED-IAA1"
+          },
+          {
+            "id": "POI1",
+            "name": "PLMNJKIU-POI1"
+          },
+          {
+            "id": "LAG1a",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "PBL1",
+            "name": "PBLAPBAI-PBL1"
+          },
+          {
+            "id": "LAG45",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "MAR1",
+            "name": "MNBVCXZM-MAR1"
+          },
+          {
+            "id": "HST70",
+            "name": "HSTNTX70-HST70"
+          },
+          {
+            "id": "DCC1a",
+            "name": "POIUYTGH-DCC1a"
+          },
+          {
+            "id": "TOL1",
+            "name": "TOLDOH21-TOL1"
+          },
+          {
+            "id": "LON1",
+            "name": "LONEENCO-LON1"
+          },
+          {
+            "id": "SJU78",
+            "name": "SDIT1JUB-SJU78"
+          },
+          {
+            "id": "STN27",
+            "name": "HSTNTX01-STN27"
+          },
+          {
+            "id": "SSW56",
+            "name": "ss8126GT-SSW56"
+          },
+          {
+            "id": "SBB78",
+            "name": "SDIT1BBB-SBB78"
+          },
+          {
+            "id": "DCC3",
+            "name": "POIUYTGH-DCC3"
+          },
+          {
+            "id": "GNV1",
+            "name": "GNVLSCTL-GNV1"
+          },
+          {
+            "id": "WAS1",
+            "name": "WASHDCSW-WAS1"
+          },
+          {
+            "id": "TOY1",
+            "name": "TORYONNZ-TOY1"
+          },
+          {
+            "id": "STT1",
+            "name": "STTLWA02-STT1"
+          },
+          {
+            "id": "STG1",
+            "name": "STTGGE62-STG1"
+          },
+          {
+            "id": "SLL78",
+            "name": "SDCTLLL1-SLL78"
+          },
+          {
+            "id": "SBU78",
+            "name": "SDIT1BUB-SBU78"
+          },
+          {
+            "id": "ATL2",
+            "name": "ATLNGANW-ATL2"
+          },
+          {
+            "id": "BOT1",
+            "name": "BOTHWAKY-BOT1"
+          },
+          {
+            "id": "SNG1",
+            "name": "SNGPSIAU-SNG1"
+          },
+          {
+            "id": "NYC1",
+            "name": "NYCMNY54-NYC1"
+          },
+          {
+            "id": "LAG1b",
+            "name": "LARGIZON-LAG1b"
+          },
+          {
+            "id": "AMD15",
+            "name": "AMDFAA01-AMD15"
+          },
+          {
+            "id": "SNA1",
+            "name": "SNANTXCA-SNA1"
+          },
+          {
+            "id": "PLT1",
+            "name": "PLTNCA60-PLT1"
+          },
+          {
+            "id": "TLP1",
+            "name": "TLPNXM18-TLP1"
+          },
+          {
+            "id": "SDD81",
+            "name": "SAIT1DD6-SDD81"
+          },
+          {
+            "id": "DCC1",
+            "name": "POIUYTGH-DCC1"
+          },
+          {
+            "id": "DCC2",
+            "name": "POIUYTGH-DCC2"
+          },
+          {
+            "id": "OKC1",
+            "name": "OKCBOK55-OKC1"
+          },
+          {
+            "id": "PAR1",
+            "name": "PARSFRCG-PAR1"
+          },
+          {
+            "id": "TES36",
+            "name": "ABCEETES-TES36"
+          },
+          {
+            "id": "COM1",
+            "name": "PLMKOPIU-COM1"
+          },
+          {
+            "id": "ANI1",
+            "name": "ATLNGTRE-ANI1"
+          },
+          {
+            "id": "SDG78",
+            "name": "SDIT1BDG-SDG78"
+          },
+          {
+            "id": "mac20",
+            "name": "PKGTESTF-mac20"
+          },
+          {
+            "id": "DSF45",
+            "name": "DSFBG123-DSF45"
+          },
+          {
+            "id": "HST25",
+            "name": "HSTNTX01-HST25"
+          },
+          {
+            "id": "AMD18",
+            "name": "AUDIMA01-AMD18"
+          },
+          {
+            "id": "SAA80",
+            "name": "SAIT9AA3-SAA80"
+          },
+          {
+            "id": "SSA56",
+            "name": "SSIT2AA7-SSA56"
+          },
+          {
+            "id": "SDD82",
+            "name": "SAIT1DD9-SDD82"
+          },
+          {
+            "id": "JCV1",
+            "name": "JCVLFLBW-JCV1"
+          },
+          {
+            "id": "SUL2",
+            "name": "WERTYUJK-SUL2"
+          },
+          {
+            "id": "PUR1",
+            "name": "purelyde-PUR1"
+          },
+          {
+            "id": "FDE55",
+            "name": "FDERT555-FDE55"
+          },
+          {
+            "id": "SITE",
+            "name": "LONEENCO-SITE"
+          },
+          {
+            "id": "ATL1",
+            "name": "ATLNGAMA-ATL1"
+          },
+          {
+            "id": "JUL1",
+            "name": "ZXCVBNMM-JUL1"
+          },
+          {
+            "id": "TAT34",
+            "name": "TESAAISB-TAT34"
+          },
+          {
+            "id": "XCP12",
+            "name": "CHKGH123-XCP12"
+          },
+          {
+            "id": "RAI1",
+            "name": "poiuytre-RAI1"
+          },
+          {
+            "id": "HPO1",
+            "name": "ATLNGAUP-HPO1"
+          },
+          {
+            "id": "KJF12",
+            "name": "KJFDH123-KJF12"
+          },
+          {
+            "id": "SCC80",
+            "name": "SAIT9CC3-SCC80"
+          },
+          {
+            "id": "SAA12",
+            "name": "SAIT9AF8-SAA12"
+          },
+          {
+            "id": "SAA14",
+            "name": "SAIT1AA9-SAA14"
+          },
+          {
+            "id": "ATL35",
+            "name": "TTESSAAI-ATL35"
+          },
+          {
+            "id": "CWY1",
+            "name": "CWYMOWBS-CWY1"
+          },
+          {
+            "id": "ATL76",
+            "name": "TELEPAAI-ATL76"
+          },
+          {
+            "id": "DSL12",
+            "name": "DSLFK242-DSL12"
+          },
+          {
+            "id": "ATL53",
+            "name": "AAIATLTE-ATL53"
+          },
+          {
+            "id": "SAA11",
+            "name": "SAIT9AA2-SAA11"
+          },
+          {
+            "id": "ATL62",
+            "name": "TESSASCH-ATL62"
+          },
+          {
+            "id": "AUG1",
+            "name": "ASDFGHJK-AUG1"
+          },
+          {
+            "id": "POI22",
+            "name": "POIUY123-POI22"
+          },
+          {
+            "id": "SAA13",
+            "name": "SAIT1AA9-SAA13"
+          },
+          {
+            "id": "BHY17",
+            "name": "BHYTFRF3-BHY17"
+          },
+          {
+            "id": "LIS1",
+            "name": "HOSTPROF-LIS1"
+          },
+          {
+            "id": "SIP1",
+            "name": "ZXCVBNMK-SIP1"
+          },
+          {
+            "id": "ATL99",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "ATL64",
+            "name": "FORLOAAJ-ATL64"
+          },
+          {
+            "id": "TAT33",
+            "name": "TESAAISA-TAT33"
+          },
+          {
+            "id": "RAD10",
+            "name": "INDIPUNE-RAD10"
+          },
+          {
+            "id": "RTW5",
+            "name": "BHYTFRY4-RTW5"
+          },
+          {
+            "id": "JGS1",
+            "name": "KSJKKKKK-JGS1"
+          },
+          {
+            "id": "ATL98",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "WAN1",
+            "name": "LEIWANGW-WAN1"
+          },
+          {
+            "id": "ATL44",
+            "name": "ATLSANAB-ATL44"
+          },
+          {
+            "id": "RTD2",
+            "name": "BHYTFRk4-RTD2"
+          },
+          {
+            "id": "NIR1",
+            "name": "ORFLMANA-NIR1"
+          },
+          {
+            "id": "ATL75",
+            "name": "SANAAIRE-ATL75"
+          },
+          {
+            "id": "NUM1",
+            "name": "QWERTYUI-NUM1"
+          },
+          {
+            "id": "MTN32",
+            "name": "MDTWNJ21-MTN32"
+          },
+          {
+            "id": "RTZ4",
+            "name": "BHYTFRZ6-RTZ4"
+          },
+          {
+            "id": "ATL56",
+            "name": "ATLSANAC-ATL56"
+          },
+          {
+            "id": "AMS1",
+            "name": "AMSTNLBW-AMS1"
+          },
+          {
+            "id": "RCT1",
+            "name": "AMSTERNL-RCT1"
+          },
+          {
+            "id": "JAN1",
+            "name": "ORFLMATT-JAN1"
+          },
+          {
+            "id": "ABC14",
+            "name": "TESAAISA-ABC14"
+          },
+          {
+            "id": "TAT37",
+            "name": "TESAAISD-TAT37"
+          },
+          {
+            "id": "MIC54",
+            "name": "MICHIGAN-MIC54"
+          },
+          {
+            "id": "ABC11",
+            "name": "ATLSANAI-ABC11"
+          },
+          {
+            "id": "AMF11",
+            "name": "AMDOCS01-AMF11"
+          },
+          {
+            "id": "ATL63",
+            "name": "ATLSANEW-ATL63"
+          },
+          {
+            "id": "ABC12",
+            "name": "ATLSECIA-ABC12"
+          },
+          {
+            "id": "MTN20",
+            "name": "MDTWNJ21-MTN20"
+          },
+          {
+            "id": "ABC15",
+            "name": "AAITESAN-ABC15"
+          },
+          {
+            "id": "AVT1",
+            "name": "AVTRFLHD-AVT1"
+          },
+          {
+            "id": "ATL34",
+            "name": "ATLSANAI-ATL34"
+          }
+        ],
+        "categoryParameters": {
+          "owningEntityList": [
+            {
+              "id": "aaa1",
+              "name": "aaa1"
+            },
+            {
+              "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+              "name": "WayneHolland"
+            },
+            {
+              "id": "Melissa",
+              "name": "Melissa"
+            }
+          ],
+          "projectList": [
+            {
+              "id": "WATKINS",
+              "name": "WATKINS"
+            },
+            {
+              "id": "x1",
+              "name": "x1"
+            },
+            {
+              "id": "yyy1",
+              "name": "yyy1"
+            }
+          ],
+          "lineOfBusinessList": [
+            {
+              "id": "ONAP",
+              "name": "ONAP"
+            },
+            {
+              "id": "zzz1",
+              "name": "zzz1"
+            }
+          ],
+          "platformList": [
+            {
+              "id": "platform",
+              "name": "platform"
+            },
+            {
+              "id": "xxx1",
+              "name": "xxx1"
+            }
+          ]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [
+          {
+            "id": "CAR_2020_ER",
+            "name": "CAR_2020_ER",
+            "isPermitted": true
+          },
+          {
+            "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+            "name": "JULIO ERICKSON",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-2",
+            "name": "DALE BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-1",
+            "name": "LLOYD BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example",
+            "name": "JimmyExampleCust-20161102",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example2",
+            "name": "JimmyExampleCust-20161103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-102",
+            "name": "ERICA5779-TestSub-PWT-102",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-101",
+            "name": "ERICA5779-TestSub-PWT-101",
+            "isPermitted": false
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-4",
+            "name": "ERICA5779-Subscriber-5",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-103",
+            "name": "ERICA5779-TestSub-PWT-103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-2",
+            "name": "ERICA5779-Subscriber-2",
+            "isPermitted": false
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "SILVIA ROBBINS",
+            "isPermitted": true
+          },
+          {
+            "id": "ERICA5779-Subscriber-3",
+            "name": "ERICA5779-Subscriber-3",
+            "isPermitted": false
+          },
+          {
+            "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+            "name": "CRAIG/ROBERTS",
+            "isPermitted": false
+          }
+        ]
+      }
+    }
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('VFModule Control Generator', () => {
+  let injector;
+  let service: VfModuleControlGenerator;
+  let httpMock: HttpTestingController;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [VfModuleControlGenerator,
+        GenericFormService,
+        BasicControlGenerator,
+        AaiService,
+        FormBuilder,
+        LogService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockAppStore}]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(VfModuleControlGenerator);
+    httpMock = injector.get(HttpTestingController);
+    jest.spyOn(console, 'error');
+
+  })().then(done).catch(done.fail));
+
+  test(' getMacroFormControls gets vnfStoreKey === null', () => {
+    const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfStoreKey: string = null;
+    const vfModuleStoreKey: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
+    const vfModuleUUID: string = "522159d5-d6e0-4c2a-aa44-5a542a12a830";
+    const controls: FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, vfModuleUUID, true);
+
+    expect(controls).toEqual([]);
+    expect(console.error).toHaveBeenCalled();
+  });
+
+  test('getAlaCarteFormControls check for mandatory controls', () => {
+    const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfStoreKey: string = 'VF_vMee 0';
+    const vfModuleStoreKey: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
+    const uuidData: Object = {
+      modelId : "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+      modelName :  "vf_vmee0..VfVmee..base_vmme..module-0",
+      serviceId : "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+      type : "VFmodule",
+      vFModuleStoreKey : "vf_vmee0..VfVmee..base_vmme..module-0vmvzo",
+      vnfStoreKey : "VF_vMee 0"
+    };
+    const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, uuidData, true);
+
+    const mandatoryControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      FormControlNames.TENANT_ID,
+      FormControlNames.ROLLBACK_ON_FAILURE,
+    ];
+
+    for(let i = 0 ; i < mandatoryControls.length ; i++) {
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+
+  test('getMacroFormControls check for mandatory controls', () => {
+    const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfStoreKey: string = 'VF_vMee 0';
+    const uuidData: Object = {
+      modelId : "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+      modelName :  "vf_vmee0..VfVmee..base_vmme..module-0",
+      serviceId : "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+      type : "VFmodule",
+      vFModuleStoreKey : "vf_vmee0..VfVmee..base_vmme..module-0vmvzo",
+      vnfStoreKey : "VF_vMee 0"
+    };
+    const controls: FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vnfStoreKey, uuidData, true);
+
+    const mandatoryControls : string[] = [
+      'instanceName'
+    ];
+
+    for(let i = 0 ; i < mandatoryControls.length ; i++) {
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+
+  test(' getMacroFormControls gets null vnfStoreKey', () => {
+    const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfStoreKey: string = null;
+    const vfModuleUUID: string = "522159d5-d6e0-4c2a-aa44-5a542a12a830";
+    const uuidData: Object = {};
+    const controls: FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vfModuleUUID, uuidData,true);
+
+    expect(controls).toEqual([]);
+    expect(console.error).toHaveBeenCalled();
+  });
+
+  test('getAlaCarteFormControls should return the correct order of controls', () => {
+    const controls:FormControlModel[] = getAlaCarteFormControls();
+
+    const orderedControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.VOLUME_GROUP_NAME,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      FormControlNames.LEGACY_REGION,
+      FormControlNames.TENANT_ID,
+      FormControlNames.ROLLBACK_ON_FAILURE,
+      FormControlNames.SDN_C_PRE_LOAD
+    ];
+
+    expect(controls.length).toEqual(7);
+    for(let i = 0 ; i < orderedControls.length ; i++) {
+     expect(controls[i].controlName).toEqual(orderedControls[i]);
+    }
+  });
+
+  function getAlaCarteFormControls():FormControlModel[] {
+    const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfStoreKey: string = 'VF_vMee 0';
+    const vfModuleUUID: string = "522159d5-d6e0-4c2a-aa44-5a542a12a830";
+    const uuidData: Object = {
+      modelId: "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+      modelName: "vf_vmee0..VfVmee..base_vmme..module-0",
+      serviceId: "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+      type: "VFmodule",
+      vFModuleStoreKey: "vf_vmee0..VfVmee..base_vmme..module-0vmvzo",
+      vnfStoreKey: "VF_vMee 0"
+    };
+    const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfStoreKey, vfModuleUUID, uuidData, true);
+    return controls;
+  }
+
+  test('getAlaCarteFormControls responce with wrong order of controls', () => {
+    const controls:FormControlModel[] = getAlaCarteFormControls();
+
+    const orderedControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.VOLUME_GROUP_NAME,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      FormControlNames.TENANT_ID, // TENANT_ID must be after LEGACY_REGION
+      FormControlNames.LEGACY_REGION,
+      FormControlNames.ROLLBACK_ON_FAILURE,
+      FormControlNames.SDN_C_PRE_LOAD
+    ];
+
+    for(let i = 0 ; i < orderedControls.length ; i++) {
+      if (controls[i].controlName === 'legacyRegion') {
+        expect(orderedControls[i]).toEqual('tenantId');
+      }
+    }
+  });
+
+  test('getMacroFormControls should return the correct order of controls', () => {
+    const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfStoreKey: string = 'VF_vMee 0';
+    const vfModuleUUID: string = "522159d5-d6e0-4c2a-aa44-5a542a12a830";
+    const uuidData: Object = {
+      modelId : "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+      modelName :  "vf_vmee0..VfVmee..base_vmme..module-0",
+      serviceId : "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+      type : "VFmodule",
+      vFModuleStoreKey : "vf_vmee0..VfVmee..base_vmme..module-0vmvzo",
+      vnfStoreKey : "VF_vMee 0"
+    };
+    const controls: FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vfModuleUUID, uuidData, true);
+
+    const orderedControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.VOLUME_GROUP_NAME
+    ];
+
+    for(let i = 0 ; i < orderedControls.length ; i++) {
+      expect(controls[i].controlName).toEqual(orderedControls[i]);
+    }
+  });
+
+  test.each`
+    controllerName
+    ${'instanceName'}
+    ${'volumeGroupName'}
+  `('getAlacartFormControls $controllerName control validator shall have the expected regex', ({controllerName}) => {
+    const controls:FormControlModel[] = getAlaCarteFormControls();
+
+    const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName == controllerName);
+    const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern);
+    expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/);
+  });
+
+  test(' getAlaCarteFormControls gets null service', () => {
+    const controls:FormControlModel[] = getAlaCarteFormControls();
+    expect(controls.length).toEqual(7);
+
+    const orderedControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.VOLUME_GROUP_NAME,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      FormControlNames.LEGACY_REGION,
+      FormControlNames.TENANT_ID,
+      FormControlNames.ROLLBACK_ON_FAILURE,
+      FormControlNames.SDN_C_PRE_LOAD
+    ];
+
+    for(let i = 0 ; i < orderedControls.length ; i++) {
+      expect(controls[i].controlName).toEqual(orderedControls[i]);
+    }
+  });
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts
new file mode 100644
index 0000000..3012c13
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator.ts
@@ -0,0 +1,349 @@
+import {Injectable} from "@angular/core";
+import {GenericFormService} from "../../generic-form.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {NgRedux} from "@angular-redux/store";
+import {HttpClient} from "@angular/common/http";
+import {BasicControlGenerator} from "../basic.control.generator";
+import * as _ from 'lodash';
+import {Observable, of} from "rxjs";
+
+import {
+  CustomValidatorOptions,
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {LogService} from "../../../../utils/log/log.service";
+import {AppState} from "../../../../store/reducers";
+import {FormGroup} from "@angular/forms";
+import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model";
+import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum";
+import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
+import {SelectOption} from "../../../../models/selectOption";
+import {VfModuleInstance} from "../../../../models/vfModuleInstance";
+import {VfModule} from "../../../../models/vfModule";
+import {VNFModel} from "../../../../models/vnfModel";
+import {VnfInstance} from "../../../../models/vnfInstance";
+import {FileFormControl} from "../../../../models/formControlModels/fileFormControl.model";
+import {CheckboxFormControl} from "../../../../models/formControlModels/checkboxFormControl.model";
+import {FileUnit} from "../../../formControls/component/file/fileUnit.enum";
+import {Constants} from "../../../../utils/constants";
+
+
+export enum FormControlNames {
+  INSTANCE_NAME = 'instanceName',
+  VOLUME_GROUP_NAME = 'volumeGroupName',
+  LCPCLOUD_REGION_ID = 'lcpCloudRegionId',
+  LEGACY_REGION = 'legacyRegion',
+  TENANT_ID = 'tenantId',
+  ROLLBACK_ON_FAILURE = 'rollbackOnFailure',
+  SDN_C_PRE_LOAD = 'sdncPreLoad',
+  SUPPLEMENTARY_FILE = 'supplementaryFile'
+}
+
+
+@Injectable()
+export class VfModuleControlGenerator {
+  aaiService: AaiService;
+  vfModuleModel: VfModule;
+  vfModuleName : string;
+  isUpdateMode : boolean;
+
+  constructor(private genericFormService: GenericFormService,
+              private _basicControlGenerator: BasicControlGenerator,
+              private store: NgRedux<AppState>,
+              private http: HttpClient,
+              private _aaiService: AaiService,
+              private _logService: LogService) {
+    this.aaiService = _aaiService;
+  }
+
+  setVFModuleStoreKey = (serviceId: string, vfModuleUuid: string) => {
+      const vfModules = this.store.getState().service.serviceHierarchy[serviceId].vfModules;
+      const vfModulesKeys = Object.keys(vfModules);
+      for(let key of  vfModulesKeys){
+        if(vfModules[key].uuid === vfModuleUuid){
+          this.vfModuleName = key;
+          return;
+        }
+      }
+  };
+
+
+  getVfModuleInstance = (serviceId: string, vnfStoreKey: string, UUIDData: Object, isUpdateMode: boolean): VfModuleInstance => {
+    let vfModuleInstance: VfModuleInstance = null;
+    if (isUpdateMode && this.store.getState().service.serviceInstance[serviceId] &&
+      _.has(this.store.getState().service.serviceInstance[serviceId].vnfs, vnfStoreKey) &&
+      _.has(this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules, UUIDData['modelName'])) {
+       vfModuleInstance = Object.assign({},this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules[UUIDData['modelName']][UUIDData['vFModuleStoreKey']]);
+    }
+    return vfModuleInstance;
+  };
+
+  extractVfAccordingToVfModuleUuid(serviceId: string, UUIDData: Object): VfModule {
+    const vfModule = this.store.getState().service.serviceHierarchy[serviceId].vfModules[UUIDData['modelName']];
+    this.vfModuleModel = vfModule;
+    return vfModule;
+  }
+
+  getMacroFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] {
+    this.isUpdateMode = isUpdateMode;
+    this.extractVfAccordingToVfModuleUuid(serviceId, uuidData);
+    if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) {
+      if(isUpdateMode){
+        this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId);
+        return [];
+      }
+    }
+
+    const vfModuleInstance = this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode);
+    const vfModuleModel = this.vfModuleModel;
+    const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey];
+    const vnfModelName: string = vnf.originalName;
+    const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]);
+
+    let result: FormControlModel[] = [];
+
+    if (!_.isNil(vfModuleModel)) {
+      result.push(this.getInstanceName(vfModuleInstance, serviceId, vnfModel.isEcompGeneratedNaming));
+      if (this.vfModuleModel.volumeGroupAllowed) {
+        result.push(this.getVolumeGroupName(vfModuleInstance, serviceId, vnfStoreKey, vfModuleInstance && vfModuleInstance.volumeGroupName, vnfModel.isEcompGeneratedNaming));
+     }
+    }
+    if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) {
+      let suppFileInput:FileFormControl = <FileFormControl>(this.getSupplementaryFile(vfModuleInstance));
+      result.push(suppFileInput);
+      result = result.concat(suppFileInput.hiddenFile);
+    }
+    return result;
+  }
+
+  getAlaCarteFormControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, uuidData : Object, isUpdateMode: boolean): FormControlModel[] {
+    this.isUpdateMode = isUpdateMode;
+    this.extractVfAccordingToVfModuleUuid(serviceId, uuidData);
+    if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) {
+      if(isUpdateMode){
+        this._logService.error('should provide serviceId, vfModuleStoreKey, vnfStoreKey', serviceId);
+        return [];
+      }
+    }
+    const vnf: VnfInstance = this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey];
+    const vnfModelName: string = vnf.originalName;
+    const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfModelName]);
+
+    const vfModuleInstance = this.getVfModuleInstance(serviceId, vnfStoreKey, uuidData, isUpdateMode);
+    let result: FormControlModel[] = [];
+    result.push(this.getInstanceName(vfModuleInstance, serviceId, vnfModel.isEcompGeneratedNaming));
+
+    if (this.vfModuleModel.volumeGroupAllowed) {
+      result.push(this.getVolumeGroupName(vfModuleInstance, serviceId, vnfStoreKey, this.vfModuleName, vnfModel.isEcompGeneratedNaming));
+    }
+    result.push(this.getLcpRegionControl(serviceId, vfModuleInstance, result));
+    result.push(this._basicControlGenerator.getLegacyRegion(vfModuleInstance));
+    result.push(this.getTenantControl(serviceId, vfModuleInstance, result));
+    result.push(this.getRollbackOnFailureControl(vfModuleInstance, result));
+    result.push(this.getSDNCControl(vfModuleInstance, result));
+    if(this.store.getState().global.flags['FLAG_SUPPLEMENTARY_FILE']) {
+      let suppFileInput:FileFormControl = <FileFormControl>(this.getSupplementaryFile(vfModuleInstance));
+      result.push(suppFileInput);
+      result = result.concat(suppFileInput.hiddenFile);
+    }
+    return result;
+
+  }
+
+  getInstanceName(instance: any, serviceId: string, isEcompGeneratedNaming: boolean): FormControlModel {
+    let formControlModel:FormControlModel = this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, this.vfModuleModel);
+    formControlModel.onBlur = (event, form : FormGroup) => {
+        if(!_.isNil(form.controls['volumeGroupName'])&& event.target.value.length > 0){
+          form.controls['volumeGroupName'].setValue(event.target.value + "_vol");
+        }
+      };
+
+    return formControlModel;
+  }
+
+  getDefaultVolumeGroupName(instance: any, vfModuleName: string, isEcompGeneratedNaming: boolean): string {
+    if ((!_.isNil(instance) && instance.volumeGroupName))  {
+      return instance.volumeGroupName;
+    }
+    if (isEcompGeneratedNaming) {
+      return null;
+    }
+    return this._basicControlGenerator.getDefaultInstanceName(instance, this.vfModuleModel) + "_vol";
+  }
+
+  getVolumeGroupName(instance: any, serviceId: string, vnfStoreKey: string, vfModuleName: string, isEcompGeneratedNaming: boolean): FormControlModel {
+    let validations: ValidatorModel[] = [
+      new ValidatorModel(ValidatorOptions.pattern, 'Instance name may include only alphanumeric characters and underscore.', BasicControlGenerator.INSTANCE_NAME_REG_EX),
+      new ValidatorModel(CustomValidatorOptions.uniqueInstanceNameValidator, 'Volume Group instance name is already in use, please pick another name', [this.store, serviceId, instance && instance.volumeGroupName])
+    ];
+    // comment out because if not provided vid won't create VG
+    // if (!isEcompGeneratedNaming)  {
+    //   validations.push(new ValidatorModel(ValidatorOptions.required, 'is required'));
+    // }
+    return new InputFormControl({
+      controlName: 'volumeGroupName',
+      displayName: 'Volume Group Name',
+      dataTestId: 'volumeGroupName',
+      // placeHolder: (!isEcompGeneratedNaming) ? 'Volume Group Name' : 'Automatically generated when not provided',
+      validations: validations,
+      tooltip : 'When filled, VID will create a Volume Group by this name and associate with this module.\n' +
+                'When empty, the module is created without a Volume Group.',
+      isVisible: true,
+      value: this.getDefaultVolumeGroupName(instance, vfModuleName, isEcompGeneratedNaming),
+      onKeypress: (event) => {
+        const pattern:RegExp = BasicControlGenerator.INSTANCE_NAME_REG_EX;
+        if (pattern) {
+          if (!pattern.test(event['key'])) {
+            event.preventDefault();
+          }
+        }
+        return event;
+      }
+    });
+  }
+
+  getSupplementaryFile(instance: any): FormControlModel {
+    return new FileFormControl({
+      controlName: FormControlNames.SUPPLEMENTARY_FILE,
+      displayName: 'Supplementary Data File (JSON format)',
+      dataTestId: 'SupplementaryFile',
+      placeHolder: 'Choose file',
+      selectedFile:  !_.isNil(instance) ? instance.supplementaryFileName: null,
+      isVisible: true,
+      acceptedExtentions: "application/json",
+      hiddenFile : [new InputFormControl({
+        controlName: FormControlNames.SUPPLEMENTARY_FILE + "_hidden",
+        isVisible: false,
+        validations: [new ValidatorModel(CustomValidatorOptions.isFileTooBig, "File size exceeds 5MB.", [FileUnit.MB, 5])]
+      }),
+        new InputFormControl({
+          controlName: FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content",
+          isVisible: false,
+          validations: [new ValidatorModel(CustomValidatorOptions.isValidJson,
+            "File is invalid, please make sure a legal JSON file is uploaded using name:value pairs.",[]),
+            new ValidatorModel(CustomValidatorOptions.isStringContainTags,
+              "File is invalid, please remove tags <>.",[])],
+          value: !_.isNil(instance) ? (instance.supplementaryFile_hidden_content): null,
+        })
+      ],
+      onDelete : (form : FormGroup) => {
+        form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(null);
+        form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(null);
+      },
+      onChange : (files: FileList, form : FormGroup)  => {
+        if (files.length > 0) {
+          const file = files.item(0);
+          let reader = new FileReader();
+          reader.onload = function(event) {
+            form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(reader.result);
+            form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(file);
+          };
+          reader.readAsText(file);
+        }
+        else {
+          form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden"].setValue(null);
+          form.controls[FormControlNames.SUPPLEMENTARY_FILE + "_hidden_content"].setValue(null);
+        }
+      }
+    })
+  };
+
+  getTenantControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    const service = this.store.getState().service.serviceInstance[serviceId];
+    const globalCustomerId: string = service.globalSubscriberId;
+    const serviceType: string = service.subscriptionServiceType;
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: FormControlNames.TENANT_ID,
+      displayName: 'Tenant',
+      dataTestId: 'tenant',
+      placeHolder: 'Select Tenant',
+      name: "tenant",
+      isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId),
+      onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null,
+      value: instance ? instance.tenantId : null,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInit: instance ? this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this.aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : () => {
+      },
+    })
+  };
+
+  getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    const service = this.store.getState().service.serviceInstance[serviceId];
+    const globalCustomerId: string = service.globalSubscriberId;
+    const serviceType: string = service.subscriptionServiceType;
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: 'lcpCloudRegionId',
+      displayName: 'LCP region',
+      dataTestId: 'lcpRegion',
+      placeHolder: 'Select LCP Region',
+      name: "lcpRegion",
+      isDisabled: false,
+      value: instance ? instance.lcpCloudRegionId : null,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInitSelectedField: ['lcpRegionList'],
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)),
+      onChange: (param: string, form: FormGroup) => {
+        form.controls[FormControlNames.TENANT_ID].enable();
+        form.controls[FormControlNames.TENANT_ID].reset();
+        if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
+          this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => {
+            controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param];
+            if (res.lcpRegionsTenantsMap[param]) {
+              controls.find(item => item.controlName === FormControlNames.TENANT_ID)['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0;
+            }
+          }));
+        }
+
+        if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) {
+          form.controls['legacyRegion'].enable();
+          controls.find(item => item.controlName === 'legacyRegion').isVisible = true;
+
+        } else {
+          controls.find(item => item.controlName === 'legacyRegion').isVisible = false;
+          form.controls['legacyRegion'].setValue(null);
+          form.controls['legacyRegion'].reset();
+          form.controls['legacyRegion'].disable();
+        }
+      }
+    })
+  };
+
+  getSDNCControl = (instance: any, controls: FormControlModel[]): CheckboxFormControl => {
+    return new CheckboxFormControl({
+      type: FormControlType.CHECKBOX,
+      controlName: 'sdncPreLoad',
+      displayName: 'SDN-C pre-load',
+      dataTestId: 'sdncPreLoad',
+      value: instance ? instance.sdncPreLoad : false,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')]
+    })
+  };
+
+  getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: FormControlNames.ROLLBACK_ON_FAILURE,
+      displayName: 'Rollback on failure',
+      dataTestId: 'rollback',
+      isDisabled: false,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      value: instance ? instance.rollbackOnFailure : 'true',
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions)
+    })
+  };
+
+  getRollBackOnFailureOptions = (): Observable<SelectOption[]> => {
+    return of([
+      new SelectOption({id: 'true', name: 'Rollback'}),
+      new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+    ]);
+  };
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts
new file mode 100644
index 0000000..d15a57b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.spec.ts
@@ -0,0 +1,1943 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {NgRedux} from '@angular-redux/store';
+import {FormControlNames} from "../service.control.generator";
+import {BasicControlGenerator} from "../basic.control.generator";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {GenericFormService} from "../../generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {LogService} from "../../../../utils/log/log.service";
+import {VnfControlGenerator} from "./vnf.control.generator";
+import {Observable} from "rxjs";
+import {SelectOption} from "../../../../models/selectOption";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+
+class MockAppStore<T> {
+  getState(){
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {}
+            },
+            "vnfs": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "ecomp_generated_naming": "false",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VF",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "vnfs": {
+              "VF_vMee 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                      "isMissingData": false,
+                      "sdncPreReload": null,
+                      "modelInfo": {
+                        "modelType": "VFmodule",
+                        "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                        "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                        "modelName": "VfVmee..base_vmme..module-0",
+                        "modelVersion": "2",
+                        "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                        "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                      },
+                      "instanceParams": [
+                        {}
+                      ],
+                      "trackById": "wmtm6sy2uj"
+                    }
+                  }
+                },
+                "isMissingData": true,
+                "originalName": "VF_vMee 0",
+                "vnfStoreKey": "VF_vMee 0",
+                "trackById": "p3wk448m5do",
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+                "lcpCloudRegionId": null,
+                "tenantId": null,
+                "lineOfBusiness": null,
+                "platformName": null,
+                "modelInfo": {
+                  "modelType": "VF",
+                  "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+                  "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+                  "modelName": "VF_vMee",
+                  "modelVersion": "2.0",
+                  "modelCustomizationName": "VF_vMee 0"
+                }
+              }
+            },
+            "instanceParams": [
+              {}
+            ],
+            "validationCounter": 1,
+            "existingNames": {},
+            "existingVNFCounterMap": {
+              "d6557200-ecf2-4641-8094-5393ae3aae60": 1
+            },
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": "hvf6",
+            "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "aicZoneId": "JAG1",
+            "projectName": "x1",
+            "rollbackOnFailure": "true",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "ComplexService",
+              "modelVersion": "1.0",
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+            },
+            "isALaCarte": false,
+            "name": "ComplexService",
+            "version": "1.0",
+            "description": "ComplexService",
+            "category": "Emanuel",
+            "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          }
+        },
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [
+            {
+              "id": "JANET25",
+              "name": "JANET25",
+              "isPermitted": true
+            },
+            {
+              "id": "hvf6",
+              "name": "hvf6",
+              "isPermitted": true
+            }
+          ],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [
+              {
+                "id": "092eb9e8e4b7412e8787dd091bc58e86",
+                "name": "USP-SIP-IC-24335-T-01",
+                "isPermitted": true
+              }
+            ],
+            "hvf6": [
+              {
+                "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "name": "AIN Web Tool-15-D-testalexandria",
+                "isPermitted": true
+              },
+              {
+                "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "name": "AIN Web Tool-15-D-STTest2",
+                "isPermitted": true
+              },
+              {
+                "id": "1178612d2b394be4834ad77f567c0af2",
+                "name": "AIN Web Tool-15-D-SSPtestcustome",
+                "isPermitted": true
+              },
+              {
+                "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+                "name": "AIN Web Tool-15-D-UncheckedEcopm",
+                "isPermitted": true
+              },
+              {
+                "id": "de007636e25249238447264a988a927b",
+                "name": "AIN Web Tool-15-D-dfsdf",
+                "isPermitted": true
+              },
+              {
+                "id": "62f29b3613634ca6a3065cbe0e020c44",
+                "name": "AIN/SMS-16-D-Multiservices1",
+                "isPermitted": true
+              },
+              {
+                "id": "649289e30d3244e0b48098114d63c2aa",
+                "name": "AIN Web Tool-15-D-SSPST66",
+                "isPermitted": true
+              },
+              {
+                "id": "3f21eeea6c2c486bba31dab816c05a32",
+                "name": "AIN Web Tool-15-D-ASSPST47",
+                "isPermitted": true
+              },
+              {
+                "id": "f60ce21d3ee6427586cff0d22b03b773",
+                "name": "CESAR-100-D-sspjg67246",
+                "isPermitted": true
+              },
+              {
+                "id": "8774659e425f479895ae091bb5d46560",
+                "name": "CESAR-100-D-sspjg68359",
+                "isPermitted": true
+              },
+              {
+                "id": "624eb554b0d147c19ff8885341760481",
+                "name": "AINWebTool-15-D-iftach",
+                "isPermitted": true
+              },
+              {
+                "id": "214f55f5fc414c678059c383b03e4962",
+                "name": "CESAR-100-D-sspjg612401",
+                "isPermitted": true
+              },
+              {
+                "id": "c90666c291664841bb98e4d981ff1db5",
+                "name": "CESAR-100-D-sspjg621340",
+                "isPermitted": true
+              },
+              {
+                "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+                "name": "sspjg621351cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "b386b768a3f24c8e953abbe0b3488c02",
+                "name": "AINWebTool-15-D-eteancomp",
+                "isPermitted": true
+              },
+              {
+                "id": "dc6c4dbfd225474e9deaadd34968646c",
+                "name": "AINWebTool-15-T-SPFET",
+                "isPermitted": true
+              },
+              {
+                "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+                "name": "AINWebTool-15-X-eeweww",
+                "isPermitted": true
+              },
+              {
+                "id": "f2f3830e4c984d45bcd00e1a04158a79",
+                "name": "CESAR-100-D-spjg61909",
+                "isPermitted": true
+              },
+              {
+                "id": "05b91bd5137f4929878edd965755c06d",
+                "name": "CESAR-100-D-sspjg621512cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "7002fbe8482d4a989ddf445b1ce336e0",
+                "name": "AINWebTool-15-X-vdr",
+                "isPermitted": true
+              },
+              {
+                "id": "4008522be43741dcb1f5422022a2aa0b",
+                "name": "AINWebTool-15-D-ssasa",
+                "isPermitted": true
+              },
+              {
+                "id": "f44e2e96a1b6476abfda2fa407b00169",
+                "name": "AINWebTool-15-D-PFNPT",
+                "isPermitted": true
+              },
+              {
+                "id": "b69a52bec8a84669a37a1e8b72708be7",
+                "name": "AINWebTool-15-X-vdre",
+                "isPermitted": true
+              },
+              {
+                "id": "fac7d9fd56154caeb9332202dcf2969f",
+                "name": "AINWebTool-15-X-NONPODECOMP",
+                "isPermitted": true
+              },
+              {
+                "id": "2d34d8396e194eb49969fd61ffbff961",
+                "name": "DN5242-Nov16-T5",
+                "isPermitted": true
+              },
+              {
+                "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+                "name": "ro-T11",
+                "isPermitted": true
+              },
+              {
+                "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+                "name": "ro-T112",
+                "isPermitted": true
+              },
+              {
+                "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+                "name": "DN5242-Nov21-T1",
+                "isPermitted": true
+              },
+              {
+                "id": "d0a3e3f2964542259d155a81c41aadc3",
+                "name": "test-hvf6-09",
+                "isPermitted": true
+              },
+              {
+                "id": "cbb99fe4ada84631b7baf046b6fd2044",
+                "name": "DN5242-Nov16-T3",
+                "isPermitted": true
+              }
+            ]
+          }
+        },
+        "productFamilies": [
+          {
+            "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+            "name": "SCOTTIE",
+            "isPermitted": true
+          },
+          {
+            "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "name": "IGNACIO",
+            "isPermitted": true
+          },
+          {
+            "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "name": "Christie",
+            "isPermitted": true
+          },
+          {
+            "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+            "name": "Enhanced Services",
+            "isPermitted": true
+          },
+          {
+            "id": "vTerrance",
+            "name": "vTerrance",
+            "isPermitted": true
+          },
+          {
+            "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+            "name": "vSCP",
+            "isPermitted": true
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": true
+          },
+          {
+            "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+            "name": "BVOIP",
+            "isPermitted": true
+          },
+          {
+            "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+            "name": "LINDSEY",
+            "isPermitted": true
+          },
+          {
+            "id": "LRSI-OSPF",
+            "name": "LRSI-OSPF",
+            "isPermitted": true
+          },
+          {
+            "id": "vRosemarie",
+            "name": "HNGATEWAY",
+            "isPermitted": true
+          },
+          {
+            "id": "vHNPaas",
+            "name": "WILKINS",
+            "isPermitted": true
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "TYLER SILVIA",
+            "isPermitted": true
+          },
+          {
+            "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+            "name": "VROUTER",
+            "isPermitted": true
+          },
+          {
+            "id": "Cisneros",
+            "name": "vMuriel",
+            "isPermitted": true
+          },
+          {
+            "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+            "name": "CARA Griffin",
+            "isPermitted": true
+          },
+          {
+            "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          },
+          {
+            "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+            "name": "Transport",
+            "isPermitted": true
+          },
+          {
+            "id": "vSalvatore",
+            "name": "vSalvatore",
+            "isPermitted": true
+          },
+          {
+            "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+            "name": "Josefina",
+            "isPermitted": true
+          },
+          {
+            "id": "vHubbard",
+            "name": "vHubbard",
+            "isPermitted": true
+          },
+          {
+            "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          }
+        ],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [
+            {
+              "id": "0",
+              "name": "vRichardson",
+              "isPermitted": false
+            },
+            {
+              "id": "1",
+              "name": "TYLER SILVIA",
+              "isPermitted": true
+            },
+            {
+              "id": "2",
+              "name": "Emanuel",
+              "isPermitted": false
+            },
+            {
+              "id": "3",
+              "name": "vJamie",
+              "isPermitted": false
+            },
+            {
+              "id": "4",
+              "name": "vVoiceMail",
+              "isPermitted": false
+            },
+            {
+              "id": "5",
+              "name": "Kennedy",
+              "isPermitted": false
+            },
+            {
+              "id": "6",
+              "name": "vSEGW",
+              "isPermitted": false
+            },
+            {
+              "id": "7",
+              "name": "vVM",
+              "isPermitted": false
+            },
+            {
+              "id": "8",
+              "name": "vOTA",
+              "isPermitted": false
+            },
+            {
+              "id": "9",
+              "name": "vMME",
+              "isPermitted": false
+            },
+            {
+              "id": "10",
+              "name": "vMNS",
+              "isPermitted": false
+            },
+            {
+              "id": "11",
+              "name": "vSCP",
+              "isPermitted": false
+            },
+            {
+              "id": "12",
+              "name": "VPMS",
+              "isPermitted": false
+            },
+            {
+              "id": "13",
+              "name": "vMMSC",
+              "isPermitted": false
+            },
+            {
+              "id": "14",
+              "name": "SSD",
+              "isPermitted": false
+            },
+            {
+              "id": "15",
+              "name": "vMOG",
+              "isPermitted": false
+            },
+            {
+              "id": "16",
+              "name": "LINDSEY",
+              "isPermitted": false
+            },
+            {
+              "id": "17",
+              "name": "JOHANNA_SANTOS",
+              "isPermitted": false
+            },
+            {
+              "id": "18",
+              "name": "vCarroll",
+              "isPermitted": false
+            }
+          ]
+        },
+        "aicZones": [
+          {
+            "id": "NFT1",
+            "name": "NFTJSSSS-NFT1"
+          },
+          {
+            "id": "JAG1",
+            "name": "YUDFJULP-JAG1"
+          },
+          {
+            "id": "YYY1",
+            "name": "UUUAIAAI-YYY1"
+          },
+          {
+            "id": "BAN1",
+            "name": "VSDKYUTP-BAN1"
+          },
+          {
+            "id": "DKJ1",
+            "name": "DKJSJDKA-DKJ1"
+          },
+          {
+            "id": "MCS1",
+            "name": "ASACMAMS-MCS1"
+          },
+          {
+            "id": "UIO1",
+            "name": "uioclli1-UIO1"
+          },
+          {
+            "id": "RAJ1",
+            "name": "YGBIJNLQ-RAJ1"
+          },
+          {
+            "id": "OPA1",
+            "name": "opaclli1-OPA1"
+          },
+          {
+            "id": "SDE1",
+            "name": "ZXCVBNMA-SDE1"
+          },
+          {
+            "id": "VEN2",
+            "name": "FGHJUHIL-VEN2"
+          },
+          {
+            "id": "ORL1",
+            "name": "ORLDFLMA-ORL1"
+          },
+          {
+            "id": "JAD1",
+            "name": "JADECLLI-JAD1"
+          },
+          {
+            "id": "ZXL1",
+            "name": "LWLWCANN-ZXL1"
+          },
+          {
+            "id": "CKL1",
+            "name": "CLKSKCKK-CKL1"
+          },
+          {
+            "id": "SDF1",
+            "name": "sdfclli1-SDF1"
+          },
+          {
+            "id": "RAD1",
+            "name": "RADICAL1-RAD1"
+          },
+          {
+            "id": "KIT1",
+            "name": "BHYJFGLN-KIT1"
+          },
+          {
+            "id": "REL1",
+            "name": "INGERFGT-REL1"
+          },
+          {
+            "id": "JNL1",
+            "name": "CJALSDAC-JNL1"
+          },
+          {
+            "id": "OLK1",
+            "name": "OLKOLKLS-OLK1"
+          },
+          {
+            "id": "CHI1",
+            "name": "CHILLIWE-CHI1"
+          },
+          {
+            "id": "UUU4",
+            "name": "UUUAAAUU-UUU4"
+          },
+          {
+            "id": "TUF1",
+            "name": "TUFCLLI1-TUF1"
+          },
+          {
+            "id": "KJN1",
+            "name": "CKALDKSA-KJN1"
+          },
+          {
+            "id": "SAM1",
+            "name": "SNDGCA64-SAN1"
+          },
+          {
+            "id": "SCK1",
+            "name": "SCKSCKSK-SCK1"
+          },
+          {
+            "id": "HJH1",
+            "name": "AOEEQQQD-HJH1"
+          },
+          {
+            "id": "HGD1",
+            "name": "SDFQWHGD-HGD1"
+          },
+          {
+            "id": "KOR1",
+            "name": "HYFLNBVT-KOR1"
+          },
+          {
+            "id": "ATL43",
+            "name": "AICLOCID-ATL43"
+          },
+          {
+            "id": "ATL54",
+            "name": "AICFTAAI-ATL54"
+          },
+          {
+            "id": "ATL66",
+            "name": "CLLIAAII-ATL66"
+          },
+          {
+            "id": "VEL1",
+            "name": "BNMLKUIK-VEL1"
+          },
+          {
+            "id": "ICC1",
+            "name": "SANJITAT-ICC1"
+          },
+          {
+            "id": "MNT11",
+            "name": "WSXEFBTH-MNT11"
+          },
+          {
+            "id": "DEF2",
+            "name": "WSBHGTYL-DEF2"
+          },
+          {
+            "id": "MAD11",
+            "name": "SDFQWGKL-MAD11"
+          },
+          {
+            "id": "OLG1",
+            "name": "OLHOLHOL-OLG1"
+          },
+          {
+            "id": "GAR1",
+            "name": "NGFVSJKO-GAR1"
+          },
+          {
+            "id": "SAN22",
+            "name": "GNVLSCTL-SAN22"
+          },
+          {
+            "id": "HRG1",
+            "name": "HRGHRGGS-HRG1"
+          },
+          {
+            "id": "JCS1",
+            "name": "JCSJSCJS-JCS1"
+          },
+          {
+            "id": "DHA12",
+            "name": "WSXEDECF-DHA12"
+          },
+          {
+            "id": "HJE1",
+            "name": "AOEEWWWD-HJE1"
+          },
+          {
+            "id": "NCA1",
+            "name": "NCANCANN-NCA1"
+          },
+          {
+            "id": "IOP1",
+            "name": "iopclli1-IOP1"
+          },
+          {
+            "id": "RTY1",
+            "name": "rtyclli1-RTY1"
+          },
+          {
+            "id": "KAP1",
+            "name": "HIOUYTRQ-KAP1"
+          },
+          {
+            "id": "ZEN1",
+            "name": "ZENCLLI1-ZEN1"
+          },
+          {
+            "id": "HKA1",
+            "name": "JAKHLASS-HKA1"
+          },
+          {
+            "id": "CQK1",
+            "name": "CQKSCAKK-CQK1"
+          },
+          {
+            "id": "SAI1",
+            "name": "UBEKQLPD-SAI1"
+          },
+          {
+            "id": "ERT1",
+            "name": "ertclli1-ERT1"
+          },
+          {
+            "id": "IBB1",
+            "name": "PLMKOIJU-IBB1"
+          },
+          {
+            "id": "TIR2",
+            "name": "PLKINHYI-TIR2"
+          },
+          {
+            "id": "HSD1",
+            "name": "CHASKCDS-HSD1"
+          },
+          {
+            "id": "SLF78",
+            "name": "SDCTLFN1-SLF78"
+          },
+          {
+            "id": "SEE78",
+            "name": "SDCTEEE4-SEE78"
+          },
+          {
+            "id": "SAN13",
+            "name": "TOKYJPFA-SAN13"
+          },
+          {
+            "id": "SAA78",
+            "name": "SDCTAAA1-SAA78"
+          },
+          {
+            "id": "LUC1",
+            "name": "ATLDFGYC-LUC1"
+          },
+          {
+            "id": "AMD13",
+            "name": "MEMATLAN-AMD13"
+          },
+          {
+            "id": "TOR1",
+            "name": "TOROONXN-TOR1"
+          },
+          {
+            "id": "QWE1",
+            "name": "QWECLLI1-QWE1"
+          },
+          {
+            "id": "ZOG1",
+            "name": "ZOGASTRO-ZOG1"
+          },
+          {
+            "id": "CAL33",
+            "name": "CALIFORN-CAL33"
+          },
+          {
+            "id": "SHH78",
+            "name": "SDIT1HHH-SHH78"
+          },
+          {
+            "id": "DSA1",
+            "name": "LKJHGFDS-DSA1"
+          },
+          {
+            "id": "CLG1",
+            "name": "CLGRABAD-CLG1"
+          },
+          {
+            "id": "BNA1",
+            "name": "BNARAGBK-BNA1"
+          },
+          {
+            "id": "ATL84",
+            "name": "CANTTCOC-ATL84"
+          },
+          {
+            "id": "APP1",
+            "name": "WBHGTYUI-APP1"
+          },
+          {
+            "id": "RJN1",
+            "name": "RJNRBZAW-RJN1"
+          },
+          {
+            "id": "EHH78",
+            "name": "SDCSHHH5-EHH78"
+          },
+          {
+            "id": "mac10",
+            "name": "PKGTESTF-mac10"
+          },
+          {
+            "id": "SXB78",
+            "name": "SDCTGXB1-SXB78"
+          },
+          {
+            "id": "SAX78",
+            "name": "SDCTAXG1-SAX78"
+          },
+          {
+            "id": "SYD1",
+            "name": "SYDNAUBV-SYD1"
+          },
+          {
+            "id": "TOK1",
+            "name": "TOKYJPFA-TOK1"
+          },
+          {
+            "id": "KGM2",
+            "name": "KGMTNC20-KGM2"
+          },
+          {
+            "id": "DCC1b",
+            "name": "POIUYTGH-DCC1b"
+          },
+          {
+            "id": "SKK78",
+            "name": "SDCTKKK1-SKK78"
+          },
+          {
+            "id": "SGG78",
+            "name": "SDCTGGG1-SGG78"
+          },
+          {
+            "id": "SJJ78",
+            "name": "SDCTJJJ1-SJJ78"
+          },
+          {
+            "id": "SBX78",
+            "name": "SDCTBXG1-SBX78"
+          },
+          {
+            "id": "LAG1",
+            "name": "LARGIZON-LAG1"
+          },
+          {
+            "id": "IAA1",
+            "name": "QAZXSWED-IAA1"
+          },
+          {
+            "id": "POI1",
+            "name": "PLMNJKIU-POI1"
+          },
+          {
+            "id": "LAG1a",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "PBL1",
+            "name": "PBLAPBAI-PBL1"
+          },
+          {
+            "id": "LAG45",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "MAR1",
+            "name": "MNBVCXZM-MAR1"
+          },
+          {
+            "id": "HST70",
+            "name": "HSTNTX70-HST70"
+          },
+          {
+            "id": "DCC1a",
+            "name": "POIUYTGH-DCC1a"
+          },
+          {
+            "id": "TOL1",
+            "name": "TOLDOH21-TOL1"
+          },
+          {
+            "id": "LON1",
+            "name": "LONEENCO-LON1"
+          },
+          {
+            "id": "SJU78",
+            "name": "SDIT1JUB-SJU78"
+          },
+          {
+            "id": "STN27",
+            "name": "HSTNTX01-STN27"
+          },
+          {
+            "id": "SSW56",
+            "name": "ss8126GT-SSW56"
+          },
+          {
+            "id": "SBB78",
+            "name": "SDIT1BBB-SBB78"
+          },
+          {
+            "id": "DCC3",
+            "name": "POIUYTGH-DCC3"
+          },
+          {
+            "id": "GNV1",
+            "name": "GNVLSCTL-GNV1"
+          },
+          {
+            "id": "WAS1",
+            "name": "WASHDCSW-WAS1"
+          },
+          {
+            "id": "TOY1",
+            "name": "TORYONNZ-TOY1"
+          },
+          {
+            "id": "STT1",
+            "name": "STTLWA02-STT1"
+          },
+          {
+            "id": "STG1",
+            "name": "STTGGE62-STG1"
+          },
+          {
+            "id": "SLL78",
+            "name": "SDCTLLL1-SLL78"
+          },
+          {
+            "id": "SBU78",
+            "name": "SDIT1BUB-SBU78"
+          },
+          {
+            "id": "ATL2",
+            "name": "ATLNGANW-ATL2"
+          },
+          {
+            "id": "BOT1",
+            "name": "BOTHWAKY-BOT1"
+          },
+          {
+            "id": "SNG1",
+            "name": "SNGPSIAU-SNG1"
+          },
+          {
+            "id": "NYC1",
+            "name": "NYCMNY54-NYC1"
+          },
+          {
+            "id": "LAG1b",
+            "name": "LARGIZON-LAG1b"
+          },
+          {
+            "id": "AMD15",
+            "name": "AMDFAA01-AMD15"
+          },
+          {
+            "id": "SNA1",
+            "name": "SNANTXCA-SNA1"
+          },
+          {
+            "id": "PLT1",
+            "name": "PLTNCA60-PLT1"
+          },
+          {
+            "id": "TLP1",
+            "name": "TLPNXM18-TLP1"
+          },
+          {
+            "id": "SDD81",
+            "name": "SAIT1DD6-SDD81"
+          },
+          {
+            "id": "DCC1",
+            "name": "POIUYTGH-DCC1"
+          },
+          {
+            "id": "DCC2",
+            "name": "POIUYTGH-DCC2"
+          },
+          {
+            "id": "OKC1",
+            "name": "OKCBOK55-OKC1"
+          },
+          {
+            "id": "PAR1",
+            "name": "PARSFRCG-PAR1"
+          },
+          {
+            "id": "TES36",
+            "name": "ABCEETES-TES36"
+          },
+          {
+            "id": "COM1",
+            "name": "PLMKOPIU-COM1"
+          },
+          {
+            "id": "ANI1",
+            "name": "ATLNGTRE-ANI1"
+          },
+          {
+            "id": "SDG78",
+            "name": "SDIT1BDG-SDG78"
+          },
+          {
+            "id": "mac20",
+            "name": "PKGTESTF-mac20"
+          },
+          {
+            "id": "DSF45",
+            "name": "DSFBG123-DSF45"
+          },
+          {
+            "id": "HST25",
+            "name": "HSTNTX01-HST25"
+          },
+          {
+            "id": "AMD18",
+            "name": "AUDIMA01-AMD18"
+          },
+          {
+            "id": "SAA80",
+            "name": "SAIT9AA3-SAA80"
+          },
+          {
+            "id": "SSA56",
+            "name": "SSIT2AA7-SSA56"
+          },
+          {
+            "id": "SDD82",
+            "name": "SAIT1DD9-SDD82"
+          },
+          {
+            "id": "JCV1",
+            "name": "JCVLFLBW-JCV1"
+          },
+          {
+            "id": "SUL2",
+            "name": "WERTYUJK-SUL2"
+          },
+          {
+            "id": "PUR1",
+            "name": "purelyde-PUR1"
+          },
+          {
+            "id": "FDE55",
+            "name": "FDERT555-FDE55"
+          },
+          {
+            "id": "SITE",
+            "name": "LONEENCO-SITE"
+          },
+          {
+            "id": "ATL1",
+            "name": "ATLNGAMA-ATL1"
+          },
+          {
+            "id": "JUL1",
+            "name": "ZXCVBNMM-JUL1"
+          },
+          {
+            "id": "TAT34",
+            "name": "TESAAISB-TAT34"
+          },
+          {
+            "id": "XCP12",
+            "name": "CHKGH123-XCP12"
+          },
+          {
+            "id": "RAI1",
+            "name": "poiuytre-RAI1"
+          },
+          {
+            "id": "HPO1",
+            "name": "ATLNGAUP-HPO1"
+          },
+          {
+            "id": "KJF12",
+            "name": "KJFDH123-KJF12"
+          },
+          {
+            "id": "SCC80",
+            "name": "SAIT9CC3-SCC80"
+          },
+          {
+            "id": "SAA12",
+            "name": "SAIT9AF8-SAA12"
+          },
+          {
+            "id": "SAA14",
+            "name": "SAIT1AA9-SAA14"
+          },
+          {
+            "id": "ATL35",
+            "name": "TTESSAAI-ATL35"
+          },
+          {
+            "id": "CWY1",
+            "name": "CWYMOWBS-CWY1"
+          },
+          {
+            "id": "ATL76",
+            "name": "TELEPAAI-ATL76"
+          },
+          {
+            "id": "DSL12",
+            "name": "DSLFK242-DSL12"
+          },
+          {
+            "id": "ATL53",
+            "name": "AAIATLTE-ATL53"
+          },
+          {
+            "id": "SAA11",
+            "name": "SAIT9AA2-SAA11"
+          },
+          {
+            "id": "ATL62",
+            "name": "TESSASCH-ATL62"
+          },
+          {
+            "id": "AUG1",
+            "name": "ASDFGHJK-AUG1"
+          },
+          {
+            "id": "POI22",
+            "name": "POIUY123-POI22"
+          },
+          {
+            "id": "SAA13",
+            "name": "SAIT1AA9-SAA13"
+          },
+          {
+            "id": "BHY17",
+            "name": "BHYTFRF3-BHY17"
+          },
+          {
+            "id": "LIS1",
+            "name": "HOSTPROF-LIS1"
+          },
+          {
+            "id": "SIP1",
+            "name": "ZXCVBNMK-SIP1"
+          },
+          {
+            "id": "ATL99",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "ATL64",
+            "name": "FORLOAAJ-ATL64"
+          },
+          {
+            "id": "TAT33",
+            "name": "TESAAISA-TAT33"
+          },
+          {
+            "id": "RAD10",
+            "name": "INDIPUNE-RAD10"
+          },
+          {
+            "id": "RTW5",
+            "name": "BHYTFRY4-RTW5"
+          },
+          {
+            "id": "JGS1",
+            "name": "KSJKKKKK-JGS1"
+          },
+          {
+            "id": "ATL98",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "WAN1",
+            "name": "LEIWANGW-WAN1"
+          },
+          {
+            "id": "ATL44",
+            "name": "ATLSANAB-ATL44"
+          },
+          {
+            "id": "RTD2",
+            "name": "BHYTFRk4-RTD2"
+          },
+          {
+            "id": "NIR1",
+            "name": "ORFLMANA-NIR1"
+          },
+          {
+            "id": "ATL75",
+            "name": "SANAAIRE-ATL75"
+          },
+          {
+            "id": "NUM1",
+            "name": "QWERTYUI-NUM1"
+          },
+          {
+            "id": "MTN32",
+            "name": "MDTWNJ21-MTN32"
+          },
+          {
+            "id": "RTZ4",
+            "name": "BHYTFRZ6-RTZ4"
+          },
+          {
+            "id": "ATL56",
+            "name": "ATLSANAC-ATL56"
+          },
+          {
+            "id": "AMS1",
+            "name": "AMSTNLBW-AMS1"
+          },
+          {
+            "id": "RCT1",
+            "name": "AMSTERNL-RCT1"
+          },
+          {
+            "id": "JAN1",
+            "name": "ORFLMATT-JAN1"
+          },
+          {
+            "id": "ABC14",
+            "name": "TESAAISA-ABC14"
+          },
+          {
+            "id": "TAT37",
+            "name": "TESAAISD-TAT37"
+          },
+          {
+            "id": "MIC54",
+            "name": "MICHIGAN-MIC54"
+          },
+          {
+            "id": "ABC11",
+            "name": "ATLSANAI-ABC11"
+          },
+          {
+            "id": "AMF11",
+            "name": "AMDOCS01-AMF11"
+          },
+          {
+            "id": "ATL63",
+            "name": "ATLSANEW-ATL63"
+          },
+          {
+            "id": "ABC12",
+            "name": "ATLSECIA-ABC12"
+          },
+          {
+            "id": "MTN20",
+            "name": "MDTWNJ21-MTN20"
+          },
+          {
+            "id": "ABC15",
+            "name": "AAITESAN-ABC15"
+          },
+          {
+            "id": "AVT1",
+            "name": "AVTRFLHD-AVT1"
+          },
+          {
+            "id": "ATL34",
+            "name": "ATLSANAI-ATL34"
+          }
+        ],
+        "categoryParameters": {
+          "owningEntityList": [
+            {
+              "id": "aaa1",
+              "name": "aaa1"
+            },
+            {
+              "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+              "name": "WayneHolland"
+            },
+            {
+              "id": "Melissa",
+              "name": "Melissa"
+            }
+          ],
+          "projectList": [
+            {
+              "id": "WATKINS",
+              "name": "WATKINS"
+            },
+            {
+              "id": "x1",
+              "name": "x1"
+            },
+            {
+              "id": "yyy1",
+              "name": "yyy1"
+            }
+          ],
+          "lineOfBusinessList": [
+            {
+              "id": "ONAP",
+              "name": "ONAP"
+            },
+            {
+              "id": "zzz1",
+              "name": "zzz1"
+            }
+          ],
+          "platformList": [
+            {
+              "id": "platform",
+              "name": "platform"
+            },
+            {
+              "id": "xxx1",
+              "name": "xxx1"
+            }
+          ]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [
+          {
+            "id": "CAR_2020_ER",
+            "name": "CAR_2020_ER",
+            "isPermitted": true
+          },
+          {
+            "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+            "name": "JULIO ERICKSON",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-2",
+            "name": "DALE BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-1",
+            "name": "LLOYD BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example",
+            "name": "JimmyExampleCust-20161102",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example2",
+            "name": "JimmyExampleCust-20161103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-102",
+            "name": "ERICA5779-TestSub-PWT-102",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-101",
+            "name": "ERICA5779-TestSub-PWT-101",
+            "isPermitted": false
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-4",
+            "name": "ERICA5779-Subscriber-5",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-103",
+            "name": "ERICA5779-TestSub-PWT-103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-2",
+            "name": "ERICA5779-Subscriber-2",
+            "isPermitted": false
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "SILVIA ROBBINS",
+            "isPermitted": true
+          },
+          {
+            "id": "ERICA5779-Subscriber-3",
+            "name": "ERICA5779-Subscriber-3",
+            "isPermitted": false
+          },
+          {
+            "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+            "name": "CRAIG/ROBERTS",
+            "isPermitted": false
+          }
+        ]
+      }
+    }
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('VNF Control Generator', () => {
+  let injector;
+  let service: VnfControlGenerator;
+  let httpMock: HttpTestingController;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [VnfControlGenerator,
+        GenericFormService,
+        BasicControlGenerator,
+        AaiService,
+        FormBuilder,
+        LogService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockAppStore}]
+    });
+    await TestBed.compileComponents();
+
+
+    injector = getTestBed();
+    service = injector.get(VnfControlGenerator);
+    httpMock = injector.get(HttpTestingController);
+
+  })().then(done).catch(done.fail));
+
+
+  test('getMacroFormControls check for mandatory controls', () => {
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfName : string = "VF_vMee 0";
+    const vnfStoreKey : string = "VF_vMee 0";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vnfName, []);
+
+    const mandatoryControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      FormControlNames.TENANT_ID,
+      'platformName'
+    ];
+
+    for(let i = 0 ; i < mandatoryControls.length ; i++){
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+
+  test('should provide empty array on getMacroFormControls when serviceId, vnfName and vnfStoreKey equals to null', () => {
+
+    let vnfStoreKey = null;
+    const serviceId = null;
+    const vnfName : string = null;
+    const result:FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vnfName, []);
+    expect(result).toEqual([]);
+  });
+
+  test('should provide empty array on getAlaCarteFormControls when serviceId, vnfName and vnfStoreKey equals to null', () => {
+    let vnfStoreKey = null;
+    const serviceId = null;
+    const vnfName : string = null;
+    const result:FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfStoreKey, vnfName, []);
+    expect(result).toEqual([]);
+  });
+
+  function getALaCarteFormControls(vnfStoreKey: string): FormControlModel[] {
+    const serviceId: string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfName: string = "VF_vMee 0";
+    const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfStoreKey, vnfName, []);
+    return controls;
+  }
+
+  test('getMacroFormControls should return the correct order of controls', () => {
+    const serviceId : string = "6e59c5de-f052-46fa-aa7e-2fca9d674c44";
+    const vnfName : string = "VF_vMee 0";
+    const vnfStoreKey : string = null;
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfStoreKey, vnfName, []);
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.PRODUCT_FAMILY_ID,
+      FormControlNames.LCPCLOUD_REGION_ID ,
+      'legacyRegion',
+      'tenantId',
+      'platformName',
+      'lineOfBusiness'];
+
+    expect(controls.length).toEqual(7);
+    for(let i = 0 ; i < controls.length ; i++){
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+  test('getAlacartFormControls should return the correct order of controls', () => {
+    const controls = getALaCarteFormControls(null);
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.PRODUCT_FAMILY_ID,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      'legacyRegion',
+      'tenantId',
+      'platformName',
+      'lineOfBusiness',
+      'rollbackOnFailure'];
+    expect(controls.length).toEqual(8);
+    for(let i = 0 ; i < controls.length ; i++) {
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+
+  test('getAlacartFormControls check for mandatory controls', () => {
+    const controls = getALaCarteFormControls("VF_vMee 0");
+    const mandatoryControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      FormControlNames.LCPCLOUD_REGION_ID,
+      'tenantId',
+      'platformName',
+      'rollbackOnFailure'
+    ];
+    for(let i = 0 ; i < mandatoryControls.length ; i++){
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+
+  test('getAlacartFormControls instance name control validator shall have the expected regex', () => {
+    const controls:FormControlModel[] = getALaCarteFormControls("VF_vMee 0");
+
+    const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME);
+    const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern);
+    expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/);
+  });
+
+  test('rollback should return observable of true, false', () => {
+    let result : Observable<SelectOption[]> = service.getRollBackOnFailureOptions();
+    result.subscribe((val)=>{
+      expect(val).toEqual([
+        new SelectOption({id: 'true', name: 'Rollback'}),
+        new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+      ]);
+    });
+  });
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts
new file mode 100644
index 0000000..3484038
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator.ts
@@ -0,0 +1,243 @@
+import {Injectable} from "@angular/core";
+import {GenericFormService} from "../../generic-form.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {NgRedux} from "@angular-redux/store";
+import {HttpClient} from "@angular/common/http";
+import {BasicControlGenerator} from "../basic.control.generator";
+import {
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {LogService} from "../../../../utils/log/log.service";
+import {VNFModel} from "../../../../models/vnfModel";
+import {AppState} from "../../../../store/reducers";
+import {FormGroup} from "@angular/forms";
+import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model";
+import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum";
+import {InputFormControl} from "../../../../models/formControlModels/inputFormControl.model";
+import {Observable, of} from "rxjs";
+import {SelectOption} from "../../../../models/selectOption";
+import * as _ from 'lodash';
+import {Constants} from "../../../../utils/constants";
+
+export enum FormControlNames {
+  INSTANCE_NAME = 'instanceName',
+  GLOBAL_SUBSCRIBER_ID = 'globalSubscriberId',
+  SUBSCRIPTION_SERVICE_TYPE = 'subscriptionServiceType',
+  PRODUCT_FAMILY_ID = 'productFamilyId',
+  LCPCLOUD_REGION_ID = 'lcpCloudRegionId',
+  TENANT_ID = 'tenantId',
+  AICZONE_ID = 'aicZoneId',
+  PROJECT_NAME = 'projectName',
+  OWNING_ENTITY_ID = 'owningEntityId',
+  ROLLBACK_ON_FAILURE = 'rollbackOnFailure',
+  PAUSE = 'pause'
+}
+
+enum InputType {
+  LCP_REGION = "lcpCloudRegionId",
+  TENANT = "tenantId",
+  LOB = "lineOfBusiness",
+  PLATFORM = "platformName",
+  ROLLBACK = "rollbackOnFailure",
+  PRODUCT_FAMILY = "productFamilyId",
+  VG = "volumeGroupName"
+}
+
+@Injectable()
+export class VnfControlGenerator {
+  aaiService: AaiService;
+  constructor(private genericFormService: GenericFormService,
+              private _basicControlGenerator: BasicControlGenerator,
+              private store: NgRedux<AppState>,
+              private http: HttpClient,
+              private _aaiService: AaiService,
+              private _logService: LogService) {
+    this.aaiService = _aaiService;
+  }
+
+  getVnfInstance = (serviceId: string, vnfStoreKey: string): any => {
+    let vnfInstance = null;
+    if (this.store.getState().service.serviceInstance[serviceId] && _.has(this.store.getState().service.serviceInstance[serviceId].vnfs, vnfStoreKey)) {
+      vnfInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey]);
+    }
+    return vnfInstance;
+  };
+
+  getMacroFormControls(serviceId: string, vnfStoreKey: string, vnfName: string, dynamicInputs?: any[]): FormControlModel[] {
+    vnfStoreKey = _.isNil(vnfStoreKey) ? vnfName : vnfStoreKey;
+
+    if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vnfName)) {
+      this._logService.error('should provide serviceId, vnfName, vnfStoreKey', serviceId);
+      return [];
+    }
+
+    const vnfInstance = this.getVnfInstance(serviceId, vnfStoreKey);
+    const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName]);
+    let result: FormControlModel[] = [];
+
+    if (!_.isNil(vnfModel)) {
+      result.push(this.getInstanceName(vnfInstance, serviceId, vnfName, vnfModel.isEcompGeneratedNaming));
+      result.push(this._basicControlGenerator.getProductFamilyControl(vnfInstance, result, false));
+      result.push(this.getLcpRegionControl(serviceId, vnfInstance, result));
+      result.push(this._basicControlGenerator.getLegacyRegion(vnfInstance));
+      result.push(this.getTenantControl(serviceId, vnfInstance, result));
+      result.push(this.getPlatformControl(vnfInstance, result));
+      result.push(this.getLineOfBusinessControl(vnfInstance, result));
+    }
+    return result;
+  }
+
+  getAlaCarteFormControls(serviceId: string, vnfStoreKey: string, vnfName: string, dynamicInputs?: any[]): FormControlModel[] {
+    vnfStoreKey = _.isNil(vnfStoreKey) ? vnfName : vnfStoreKey;
+    if (_.isNil(serviceId) || _.isNil(vnfStoreKey) || _.isNil(vnfName)) {
+      this._logService.error('should provide serviceId, vnfName, vnfStoreKey', serviceId);
+      return [];
+    }
+
+    let result: FormControlModel[] = [];
+    const vnfInstance = this.getVnfInstance(serviceId, vnfStoreKey);
+    const vnfModel = new VNFModel(this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName]);
+
+    if (!_.isNil(vnfModel)) {
+      result.push(this.getInstanceName(vnfInstance, serviceId, vnfName, vnfModel.isEcompGeneratedNaming));
+      result.push(this._basicControlGenerator.getProductFamilyControl(vnfInstance, result, false));
+      result.push(this.getLcpRegionControl(serviceId, vnfInstance, result));
+      result.push(this._basicControlGenerator.getLegacyRegion(vnfInstance));
+      result.push(this.getTenantControl(serviceId, vnfInstance, result));
+      result.push(this.getPlatformControl(vnfInstance, result));
+      result.push(this.getLineOfBusinessControl(vnfInstance, result));
+      result.push(this.getRollbackOnFailureControl(vnfInstance, result));
+    }
+    return result;
+  }
+
+  isInputShouldBeShown = (inputType: any): boolean => {
+    let vnfInputs = [InputType.LCP_REGION, InputType.LOB, InputType.TENANT, InputType.PRODUCT_FAMILY, InputType.PLATFORM, InputType.ROLLBACK];
+    return vnfInputs.indexOf(inputType) > -1;
+  };
+
+  getInstanceName(instance : any, serviceId : string, vnfName : string, isEcompGeneratedNaming: boolean): FormControlModel {
+    const vnfModel : VNFModel = this.store.getState().service.serviceHierarchy[serviceId].vnfs[vnfName];
+    return this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, vnfModel);
+  }
+
+  getLineOfBusinessControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: 'lineOfBusiness',
+      displayName: 'Line of business',
+      dataTestId: 'lineOfBusiness',
+      placeHolder: 'Select Line Of Business',
+      isDisabled: false,
+      name: "lineOfBusiness",
+      value: instance ? instance.lineOfBusiness : null,
+      validations: [],
+      onInitSelectedField: ['lineOfBusinessList'],
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
+    })
+  };
+
+  getPlatformControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: 'platformName',
+      displayName: 'Platform',
+      dataTestId: 'platform',
+      placeHolder: 'Select Platform',
+      isDisabled: false,
+      name: "platform",
+      value: instance ? instance.platformName : null,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInitSelectedField: ['platformList'],
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this._aaiService.getCategoryParameters)
+    })
+  };
+
+  getTenantControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    const service = this.store.getState().service.serviceInstance[serviceId];
+    const globalCustomerId: string = service.globalSubscriberId;
+    const serviceType: string = service.subscriptionServiceType;
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: FormControlNames.TENANT_ID,
+      displayName: 'Tenant',
+      dataTestId: 'tenant',
+      placeHolder: 'Select Tenant',
+      name: "tenant",
+      isDisabled: _.isNil(instance) || _.isNil(instance.lcpCloudRegionId),
+      onInitSelectedField: instance ? ['lcpRegionsTenantsMap', instance.lcpCloudRegionId] : null,
+      value: instance ? instance.tenantId : null,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInit : instance ? this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this.aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)) : ()=>{},
+    })
+  };
+
+  getLcpRegionControl = (serviceId: string, instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    const service = this.store.getState().service.serviceInstance[serviceId];
+    const globalCustomerId: string = service.globalSubscriberId;
+    const serviceType: string = service.subscriptionServiceType;
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: 'lcpCloudRegionId',
+      displayName: 'LCP region',
+      dataTestId: 'lcpRegion',
+      placeHolder: 'Select LCP Region',
+      name: "lcpRegion",
+      isDisabled: false,
+      value: instance ? instance.lcpCloudRegionId : null,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      onInitSelectedField: ['lcpRegionList'],
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(
+        this._aaiService,
+        this._aaiService.getLcpRegionsAndTenants.bind(this, globalCustomerId, serviceType)),
+      onChange: (param: string, form: FormGroup) => {
+        form.controls[FormControlNames.TENANT_ID].enable();
+        form.controls[FormControlNames.TENANT_ID].reset();
+        if (!_.isNil(globalCustomerId) && !_.isNil(serviceType)) {
+          this._basicControlGenerator.getSubscribeResult.bind(this, this._aaiService.getLcpRegionsAndTenants(globalCustomerId, serviceType).subscribe(res => {
+            controls.find(item => item.controlName === FormControlNames.TENANT_ID)['options$'] = res.lcpRegionsTenantsMap[param];
+            if(res.lcpRegionsTenantsMap[param]){
+              controls.find(item => item.controlName === FormControlNames.TENANT_ID)['hasEmptyOptions'] = res.lcpRegionsTenantsMap[param].length === 0;
+            }
+          }));
+        }
+
+        if (Constants.LegacyRegion.MEGA_REGION.indexOf(param) !== -1) {
+          form.controls['legacyRegion'].enable();
+          controls.find(item => item.controlName === 'legacyRegion').isVisible = true;
+
+        } else {
+          controls.find(item => item.controlName === 'legacyRegion').isVisible = false;
+          form.controls['legacyRegion'].setValue(null);
+          form.controls['legacyRegion'].reset();
+          form.controls['legacyRegion'].disable();
+        }
+      }
+    })
+  };
+
+  getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: FormControlNames.ROLLBACK_ON_FAILURE,
+      displayName: 'Rollback on failure',
+      dataTestId: 'rollback',
+      placeHolder: 'Rollback on failure',
+      isDisabled: false,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      value: instance ? instance.rollbackOnFailure : 'true',
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions)
+    })
+  };
+
+  getRollBackOnFailureOptions = (): Observable<SelectOption[]> => {
+    return of([
+      new SelectOption({id: 'true', name: 'Rollback'}),
+      new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+    ]);
+  };
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.spec.ts
new file mode 100644
index 0000000..6dcaa82
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.spec.ts
@@ -0,0 +1,364 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {NgRedux} from '@angular-redux/store';
+import {FormControlNames} from "../service.control.generator";
+import {BasicControlGenerator} from "../basic.control.generator";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {GenericFormService} from "../../generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {LogService} from "../../../../utils/log/log.service";
+import {VnfGroupControlGenerator} from "./vnfGroup.control.generator";
+import {Observable} from "rxjs";
+import {SelectOption} from "../../../../models/selectOption";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+
+class MockAppStore<T> {
+  getState(){
+    return {
+      "global": {
+        "name": null,
+        "type": "UPDATE_DRAWING_BOARD_STATUS",
+        "drawingBoardStatus": "CREATE",
+        "flags": {
+          "CREATE_INSTANCE_TEST": false,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true,
+          "FLAG_UNASSIGN_SERVICE": false,
+          "FLAG_SERVICE_MODEL_CACHE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_DEFAULT_VNF": true,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": true,
+          "FLAG_A_LA_CARTE_AUDIT_INFO": true,
+          "FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST": true,
+          "FLAG_PRESENT_PROVIDER_NETWORKS_ASSOCIATIONS": true,
+          "FLAG_1810_CR_SOFT_DELETE_ALACARTE_VF_MODULE": true,
+          "FLAG_1902_NEW_VIEW_EDIT": true
+        }
+      },
+      "service": {
+        "serviceHierarchy": {
+          "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": {
+            "service": {
+              "vidNotions": {
+                "instantiationUI": "serviceWithVnfGrouping",
+                "modelCategory": "other",
+                "viewEditUI": "serviceWithVnfGrouping"
+              },
+              "uuid": "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc",
+              "invariantUuid": "7ee41ce4-4827-44b0-a48e-2707a59905d2",
+              "name": "Grouping Service for Test",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Network L4+",
+              "serviceType": "INFRASTRUCTURE",
+              "serviceRole": "GROUPING",
+              "description": "xxx",
+              "serviceEcompNaming": "false",
+              "instantiationType": "A-La-Carte",
+              "inputs": {}
+            },
+            "vnfs": {},
+            "networks": {},
+            "collectionResource": {},
+            "configurations": {},
+            "fabricConfigurations": {},
+            "serviceProxies": {
+              "vdbe_svc_vprs_proxy 0": {
+                "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
+                "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
+                "description": "A Proxy for Service vDBE_Svc_vPRS",
+                "name": "vDBE_Svc_vPRS Service Proxy",
+                "version": "1.0",
+                "customizationUuid": "bdb63d23-e132-4ce7-af2c-a493b4cafac9",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Service Proxy",
+                "sourceModelUuid": "da7827a2-366d-4be6-8c68-a69153c61274",
+                "sourceModelInvariant": "24632e6b-584b-4f45-80d4-fefd75fd9f14",
+                "sourceModelName": "vDBE_Svc_vPRS"
+              },
+              "tsbc0001vm001_svc_proxy 0": {
+                "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
+                "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
+                "description": "A Proxy for Service tsbc0001vm001_Svc",
+                "name": "tsbc0001vm001_Svc Service Proxy",
+                "version": "1.0",
+                "customizationUuid": "3d814462-30fb-4c62-b997-9aa360d27ead",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Service Proxy",
+                "sourceModelUuid": "28aeb8f6-5620-4148-8bfb-a5fb406f0309",
+                "sourceModelInvariant": "c989ab9a-33c7-46ec-b521-1b2daef5f047",
+                "sourceModelName": "tsbc0001vm001_Svc"
+              }
+            },
+            "vfModules": {},
+            "volumeGroups": {},
+            "pnfs": {},
+            "vnfGroups": {
+              "groupingservicefortest..ResourceInstanceGroup..0": {
+                "type": "VnfGroup",
+                "invariantUuid": "4bb2e27e-ddab-4790-9c6d-1f731bc14a45",
+                "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48",
+                "version": "1",
+                "name": "groupingservicefortest..ResourceInstanceGroup..0",
+                "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..0",
+                "properties": {
+                  "ecomp_generated_naming": "false",
+                  "contained_resource_type": "VF",
+                  "role": "SERVICE-ACCESS",
+                  "function": "DATA",
+                  "description": "DDD0",
+                  "type": "LOAD-GROUP"
+                },
+                "members": {
+                  "vdbe_svc_vprs_proxy 0": {
+                    "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
+                    "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
+                    "description": "A Proxy for Service vDBE_Svc_vPRS",
+                    "name": "vDBE_Svc_vPRS Service Proxy",
+                    "version": "1.0",
+                    "customizationUuid": "bdb63d23-e132-4ce7-af2c-a493b4cafac9",
+                    "inputs": {},
+                    "commands": {},
+                    "properties": {},
+                    "type": "Service Proxy",
+                    "sourceModelUuid": "da7827a2-366d-4be6-8c68-a69153c61274",
+                    "sourceModelInvariant": "24632e6b-584b-4f45-80d4-fefd75fd9f14",
+                    "sourceModelName": "vDBE_Svc_vPRS"
+                  }
+                }
+              },
+              "groupingservicefortest..ResourceInstanceGroup..1": {
+                "type": "VnfGroup",
+                "invariantUuid": "a704112d-dbc6-4e56-8d4e-aec57e95ef9a",
+                "uuid": "c2b300e6-45de-4e5e-abda-3032bee2de56",
+                "version": "1",
+                "name": "groupingservicefortest..ResourceInstanceGroup..1",
+                "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..1",
+                "properties": {
+                  "ecomp_generated_naming": "true",
+                  "contained_resource_type": "VF",
+                  "role": "SERVICE-ACCESS",
+                  "function": "SIGNALING",
+                  "description": "DDD1",
+                  "type": "LOAD-GROUP"
+                },
+                "members": {
+                  "tsbc0001vm001_svc_proxy 0": {
+                    "uuid": "65fadfa8-a0d9-443f-95ad-836cd044e26c",
+                    "invariantUuid": "f4baae0c-b3a5-4ca1-a777-afbffe7010bc",
+                    "description": "A Proxy for Service tsbc0001vm001_Svc",
+                    "name": "tsbc0001vm001_Svc Service Proxy",
+                    "version": "1.0",
+                    "customizationUuid": "3d814462-30fb-4c62-b997-9aa360d27ead",
+                    "inputs": {},
+                    "commands": {},
+                    "properties": {},
+                    "type": "Service Proxy",
+                    "sourceModelUuid": "28aeb8f6-5620-4148-8bfb-a5fb406f0309",
+                    "sourceModelInvariant": "c989ab9a-33c7-46ec-b521-1b2daef5f047",
+                    "sourceModelName": "tsbc0001vm001_Svc"
+                  }
+                }
+              }
+            }
+          }
+        },
+        "serviceInstance": {
+          "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc": {
+            "existingVNFCounterMap": {},
+            "existingVnfGroupCounterMap": {
+              "daeb6568-cef8-417f-9075-ed259ce59f48": 1,
+              "c2b300e6-45de-4e5e-abda-3032bee2de56": 0
+              },
+              "existingNetworksCounterMap": {},
+              "vnfs": {},
+              "vnfGroups": {
+                "groupingservicefortest..ResourceInstanceGroup..0": {
+                  "inMaint": false,
+                  "rollbackOnFailure": "true",
+                  "originalName": "groupingservicefortest..ResourceInstanceGroup..0",
+                  "isMissingData": false,
+                  "trackById": "johjmxpmrlk",
+                  "vnfGroupStoreKey": "groupingservicefortest..ResourceInstanceGroup..0",
+                  "instanceName": "groupingservicefortestResourceInstanceGroup0",
+                  "instanceParams": [
+                    {}
+                  ],
+                  "modelInfo": {
+                    "modelInvariantId": "4bb2e27e-ddab-4790-9c6d-1f731bc14a45",
+                    "modelVersionId": "daeb6568-cef8-417f-9075-ed259ce59f48",
+                    "modelName": "groupingservicefortest..ResourceInstanceGroup..0",
+                    "modelVersion": "1",
+                    "modelCustomizationName": "groupingservicefortest..ResourceInstanceGroup..0",
+                    "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48"
+                  },
+                  "uuid": "daeb6568-cef8-417f-9075-ed259ce59f48"
+                }
+              },
+              "isEcompGeneratedNaming": false,
+            "existingNames": {}
+          }
+        }
+      }
+    }
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('VNF Group Control Generator', () => {
+  let injector;
+  let service: VnfGroupControlGenerator;
+  let httpMock: HttpTestingController;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [VnfGroupControlGenerator,
+        GenericFormService,
+        BasicControlGenerator,
+        AaiService,
+        FormBuilder,
+        LogService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockAppStore}]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(VnfGroupControlGenerator);
+    httpMock = injector.get(HttpTestingController);
+
+  })().then(done).catch(done.fail));
+
+
+
+  test('getMacroFormControls check for mandatory controls', () => {
+    const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
+    const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0";
+    const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..0";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []);
+
+    const mandatoryControls : string[] = [
+      FormControlNames.INSTANCE_NAME
+    ];
+
+    for(let i = 0 ; i < mandatoryControls.length ; i++){
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+
+  test('getMacroFormControls should return the correct order of controls', () => {
+    const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
+    const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0";
+    const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..0";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []);
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      'rollbackOnFailure'];
+
+    expect(controls.length).toEqual(1);
+    for(let i = 0 ; i < controls.length ; i++){
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+  test('getMacroFormControls check for mandatory controls when ecomp naming = true', () => {
+    const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
+    const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..1";
+    const vnfGroupStoreKey : string = "groupingservicefortest..ResourceInstanceGroup..1";
+    const controls :FormControlModel[] = service.getMacroFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []);
+
+    let isOptional = controls.find(ctrl => ctrl.controlName === 'instanceName').validations.find(item => item.validatorName !== 'required');
+    expect(isOptional).toBeTruthy();
+  });
+
+  test('getAlacartFormControls should return the correct order of controls', () => {
+    const controls:FormControlModel[] = getALaCarteFormControls();
+
+    const controlsOrderNames = [
+      FormControlNames.INSTANCE_NAME,
+      'rollbackOnFailure'];
+    expect(controls.length).toEqual(2);
+    for(let i = 0 ; i < controls.length ; i++) {
+      expect(controls[i].controlName).toEqual(controlsOrderNames[i]);
+    }
+  });
+
+
+  test('getAlacartFormControls check for mandatory controls', () => {
+    const controls:FormControlModel[] = getALaCarteFormControls();
+
+    const mandatoryControls : string[] = [
+      FormControlNames.INSTANCE_NAME,
+      'rollbackOnFailure'
+    ];
+    for(let i = 0 ; i < mandatoryControls.length ; i++){
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+
+  test('getAlacartFormControls with ecomp_naming true check for mandatory controls', () => {
+    const controls:FormControlModel[] = getALaCarteFormControls();
+
+    const mandatoryControls : string[] = [
+      'rollbackOnFailure'
+    ];
+    for(let i = 0 ; i < mandatoryControls.length ; i++){
+      let requiredExist = controls.find(ctrl => ctrl.controlName === mandatoryControls[i]).validations.find(item => item.validatorName === 'required');
+      expect(requiredExist).toBeDefined();
+    }
+  });
+
+  test('default instanceName', () => {
+    const serviceId : string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
+    const vnfGroupName : string = "groupingservicefortest..ResourceInstanceGroup..0";
+    let result:FormControlModel  = service.getInstanceName(null, serviceId, vnfGroupName, false);
+    expect(result.value).toEqual("groupingservicefortest..ResourceInstanceGroup..0");
+  });
+
+  test('rollbackOnFailure', () => {
+    let result : Observable<SelectOption[]> = service.getRollBackOnFailureOptions();
+    result.subscribe((val)=>{
+      expect(val).toEqual([
+        new SelectOption({id: 'true', name: 'Rollback'}),
+        new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+      ]);
+    });
+  });
+
+  test('getAlacartFormControls instance name control validator shall have the expected regex', () => {
+    const controls:FormControlModel[] = getALaCarteFormControls();
+
+    const instanceNameControl: FormControlModel = <FormControlModel>controls.find(item => item.controlName === FormControlNames.INSTANCE_NAME);
+    const instanceNameValidator: ValidatorModel = instanceNameControl.validations.find(val => val.validatorName === ValidatorOptions.pattern);
+    expect(instanceNameValidator.validatorArg).toEqual(/^[a-zA-Z0-9._-]*$/);
+  });
+
+  function getALaCarteFormControls():FormControlModel[] {
+    const serviceId: string = "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc";
+    const vnfGroupName: string = "groupingservicefortest..ResourceInstanceGroup..0";
+    const vnfGroupStoreKey: string = "groupingservicefortest..ResourceInstanceGroup..0";
+    const controls: FormControlModel[] = service.getAlaCarteFormControls(serviceId, vnfGroupStoreKey, vnfGroupName, []);
+    return controls;
+  }
+});
+
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.ts b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.ts
new file mode 100644
index 0000000..e503f4d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator.ts
@@ -0,0 +1,118 @@
+import {Injectable} from "@angular/core";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {NgRedux} from "@angular-redux/store";
+import {BasicControlGenerator} from "../basic.control.generator";
+import {
+  FormControlModel,
+  ValidatorModel,
+  ValidatorOptions
+} from "../../../../models/formControlModels/formControl.model";
+import {LogService} from "../../../../utils/log/log.service";
+import {AppState} from "../../../../store/reducers";
+import {DropdownFormControl} from "../../../../models/formControlModels/dropdownFormControl.model";
+import {FormControlType} from "../../../../models/formControlModels/formControlTypes.enum";
+import {SelectOption} from "../../../../models/selectOption";
+import {VnfGroupModel} from "../../../../models/vnfGroupModel";
+import * as _ from 'lodash';
+import {Observable, of} from "rxjs";
+
+
+export enum FormControlNames {
+  INSTANCE_NAME = 'instanceName',
+  ROLLBACK_ON_FAILURE = 'rollbackOnFailure',
+}
+
+enum InputType {
+  ROLLBACK = "rollbackOnFailure"
+}
+
+@Injectable()
+export class VnfGroupControlGenerator {
+  aaiService: AaiService;
+  constructor(private _basicControlGenerator: BasicControlGenerator,
+              private store: NgRedux<AppState>,
+              private _aaiService: AaiService,
+              private _logService: LogService) {
+    this.aaiService = _aaiService;
+  }
+
+  getVnfGroupInstance = (serviceId: string, vnfGroupStoreKey: string): any => {
+    let vnfGroupInstance = null;
+    if (this.store.getState().service.serviceInstance[serviceId] && _.has(this.store.getState().service.serviceInstance[serviceId].vnfGroups, vnfGroupStoreKey)) {
+      vnfGroupInstance = Object.assign({}, this.store.getState().service.serviceInstance[serviceId].vnfGroups[vnfGroupStoreKey]);
+    }
+    return vnfGroupInstance;
+  };
+
+  getMacroFormControls(serviceId: string, vnfGroupStoreKey: string, vnfGroupName: string, dynamicInputs?: Array<any>): Array<FormControlModel> {
+    vnfGroupStoreKey = _.isNil(vnfGroupStoreKey) ? vnfGroupName : vnfGroupStoreKey;
+
+    if (_.isNil(serviceId) || _.isNil(vnfGroupStoreKey) || _.isNil(vnfGroupName)) {
+      this._logService.error('should provide serviceId, vnfGroupName, vnfGroupStoreKey', serviceId);
+      return [];
+    }
+
+    const vnfGroupInstance = this.getVnfGroupInstance(serviceId, vnfGroupStoreKey);
+    const vnfGroupModel = new VnfGroupModel(this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName]);
+    let result: FormControlModel[] = [];
+
+    if (!_.isNil(vnfGroupModel)) {
+      result.push(this.getInstanceName(vnfGroupInstance, serviceId, vnfGroupName, vnfGroupModel.isEcompGeneratedNaming));
+    }
+    return result;
+  }
+
+  getAlaCarteFormControls(serviceId: string, vnfGroupStoreKey: string, vnfGroupName: string, dynamicInputs?: any[]): FormControlModel[] {
+    vnfGroupStoreKey = _.isNil(vnfGroupStoreKey) ? vnfGroupName : vnfGroupStoreKey;
+    if (_.isNil(serviceId) || _.isNil(vnfGroupStoreKey) || _.isNil(vnfGroupName)) {
+      this._logService.error('should provide serviceId, vnfGroupName, vnfGroupStoreKey', serviceId);
+      return [];
+    }
+
+    let result: FormControlModel[] = [];
+    const vnfGroupInstance = this.getVnfGroupInstance(serviceId, vnfGroupStoreKey);
+    const vnfGroupModel = new VnfGroupModel(this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName]);
+
+    if (!_.isNil(vnfGroupModel)) {
+      result.push(this.getInstanceName(vnfGroupInstance, serviceId, vnfGroupName, vnfGroupModel.isEcompGeneratedNaming));
+      result.push(this.getRollbackOnFailureControl(vnfGroupInstance, result));
+    }
+    return result;
+  }
+
+  isInputShouldBeShown = (inputType: any): boolean => {
+    let vnfGroupInputs = [InputType.ROLLBACK];
+    return vnfGroupInputs.indexOf(inputType) > -1;
+  };
+
+  getDefaultInstanceName(instance : any, serviceId : string, vnfGroupName : string) : string {
+    const vnfGroupModel: VnfGroupModel = this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName];
+    return this._basicControlGenerator.getDefaultInstanceName(instance, vnfGroupModel);
+  }
+
+  getInstanceName(instance : any, serviceId : string, vnfGroupName : string, isEcompGeneratedNaming: boolean): FormControlModel {
+    const vnfGroupModel : VnfGroupModel = this.store.getState().service.serviceHierarchy[serviceId].vnfGroups[vnfGroupName];
+    return this._basicControlGenerator.getInstanceNameController(instance, serviceId, isEcompGeneratedNaming, vnfGroupModel);
+  }
+
+  getRollbackOnFailureControl = (instance: any, controls: FormControlModel[]): DropdownFormControl => {
+    return new DropdownFormControl({
+      type: FormControlType.DROPDOWN,
+      controlName: FormControlNames.ROLLBACK_ON_FAILURE,
+      displayName: 'Rollback on failure',
+      dataTestId: 'rollback',
+      placeHolder: 'Rollback on failure',
+      isDisabled: false,
+      validations: [new ValidatorModel(ValidatorOptions.required, 'is required')],
+      value: instance ? instance.rollbackOnFailure : 'true',
+      onInit: this._basicControlGenerator.getSubscribeInitResult.bind(null, this.getRollBackOnFailureOptions)
+    })
+  };
+
+  getRollBackOnFailureOptions = (): Observable<SelectOption[]> => {
+    return of([
+      new SelectOption({id: 'true', name: 'Rollback'}),
+      new SelectOption({id: 'false', name: 'Don\'t Rollback'})
+    ]);
+  };
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.html b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.html
new file mode 100644
index 0000000..d4c5118
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.html
@@ -0,0 +1,29 @@
+<div id="form-details"  *ngIf="formControls != null && dynamicFormGroup != null">
+  <form [formGroup]="dynamicFormGroup">
+    <div *ngFor="let formControl of formControls" class="form-conrtols">
+      <div [ngSwitch]="formControl.type">
+        <form-control-input  *ngSwitchCase="'INPUT'"   [data]="formControl" [form]="dynamicFormGroup"></form-control-input>
+        <checkbox-form-control *ngSwitchCase="'CHECKBOX'"  [data]="formControl" [form]="dynamicFormGroup" ></checkbox-form-control>
+        <dropdown-form-control *ngSwitchCase="'DROPDOWN'" [data]="formControl" [form]="dynamicFormGroup" ></dropdown-form-control>
+        <file-form-control *ngSwitchCase="'FILE'" [data]="formControl" [form]="dynamicFormGroup"></file-form-control>
+      </div>
+      <div  *ngIf="dynamicFormGroup != null && formControl != null && dynamicFormGroup.controls[formControl.controlName]?.errors">
+        <div *ngFor="let validatorModel of formControl?.validations">
+          <form-control-error *ngIf="validatorModel?.validatorName != 'required' && dynamicFormGroup.controls[formControl?.controlName]?.errors[validatorModel?.validatorName]" [message]="validatorModel?.errorMsg"></form-control-error>
+        </div>
+      </div>
+    </div>
+    <div *ngFor="let dynamicInputs of dynamicInputs" class="form-conrtols">
+      <div [ngSwitch]="dynamicInputs.type">
+        <form-control-input  *ngSwitchCase="'INPUT'"   [data]="dynamicInputs" [form]="dynamicFormGroup.controls['instanceParams']"></form-control-input>
+        <checkbox-form-control *ngSwitchCase="'CHECKBOX'"  [data]="dynamicInputs" [form]="dynamicFormGroup.controls['instanceParams']" ></checkbox-form-control>
+        <dropdown-form-control *ngSwitchCase="'DROPDOWN'" [data]="dynamicInputs" [form]="dynamicFormGroup.controls['instanceParams']" ></dropdown-form-control>
+      </div>
+      <div  *ngIf="dynamicFormGroup?.controls['instanceParams'] != null && dynamicInputs != null && dynamicFormGroup.controls['instanceParams'].controls[dynamicInputs.controlName]?.errors">
+        <div *ngFor="let validatorModel of dynamicInputs?.validations">
+          <form-control-error *ngIf="validatorModel?.validatorName != 'required' && dynamicFormGroup.controls['instanceParams'].controls[dynamicInputs?.controlName]?.errors[validatorModel?.validatorName]" [message]="validatorModel?.errorMsg"></form-control-error>
+        </div>
+      </div>
+    </div>
+  </form>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.scss b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.scss
new file mode 100644
index 0000000..b8f26d8
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.scss
@@ -0,0 +1,68 @@
+#form-details {
+  position: relative;
+
+  #notification-area {
+    color: #959595;
+    font-size: 12px;
+    position: absolute;
+    top: 3px;
+    left: 30px;
+  }
+
+  height: 100%;
+  overflow: auto;
+  padding: 30px;
+
+  /deep/ {
+    .form-control {
+      border-radius: 2px;
+      box-shadow: none;
+      border-color: #D2D2D2;
+    }
+
+    label {
+      font-family: OpenSans-Semibold;
+      font-size: 12px;
+    }
+
+    select {
+      @extend .form-control;
+      -webkit-appearance: none;
+      -moz-appearance: none;
+      appearance: none;
+      background: url('../../../../assets/img/chevron.svg') 0 0 no-repeat;
+      background-size: 24px;
+      background-position-x: right;
+      background-position-y: center;
+      font-family: OpenSans-Italic;
+      font-size: 14px;
+      color: #959595;
+      height: 38px;
+    }
+
+    input:not([type='checkbox']) {
+      @extend .form-control;
+      height: 38px;
+    }
+
+    .form-control[disabled], fieldset[disabled] .form-control {
+      opacity: 0.5;
+    }
+    .input-text {
+      border: 1px solid #D2D2D2;
+      border-radius: 2px;
+      color: black;
+    }
+
+    .form-conrtols {
+      margin-top: 20px;
+      &:first-child{
+        margin-top: 0px;
+      }
+    }
+  }
+
+  .checkbox-label {
+    font-family: OpenSans-Regular;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.ts b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.ts
new file mode 100644
index 0000000..6febd66
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.component.ts
@@ -0,0 +1,45 @@
+import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';
+import {GenericFormService} from "./generic-form.service";
+import {FormControlModel} from "../../models/formControlModels/formControl.model";
+import {FormGroup} from "@angular/forms";
+import * as _ from 'lodash';
+
+@Component({
+  selector : 'generic-form',
+  templateUrl : './generic-form.component.html',
+  styleUrls : ['./generic-form.component.scss']
+})
+
+export class GenericFormComponent implements OnChanges{
+  genericFormService: GenericFormService = null;
+  dynamicFormGroup: FormGroup = null;
+
+  @Input() formControls : FormControlModel[] = null;
+  @Input() dynamicInputs : FormControlModel[] = null;
+  @Input() isValidForm : boolean = false;
+  @Output() onFormChanged  = new EventEmitter();
+
+  constructor(private _genericFormService: GenericFormService){
+    this.genericFormService = _genericFormService;
+  }
+
+  ngOnChanges(changes: SimpleChanges): void {
+    if (changes["formControls"] !== undefined && changes["formControls"].currentValue !== changes["formControls"].previousValue) {
+      this.dynamicFormGroup = this._genericFormService.generateFormBuilder(this.formControls, this.dynamicInputs);
+      this.onFormChanged.next(this.dynamicFormGroup);
+      this.dynamicFormGroup.valueChanges.subscribe(() => {
+        this.onFormChanged.next(this.dynamicFormGroup);
+      })
+    }
+  }
+
+  hasApiError(controlName: string, data: any[], form: FormGroup) {
+    if (!_.isNil(data)) {
+      if (!form.controls[controlName].disabled && data.length === 0) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.spec.ts
new file mode 100644
index 0000000..7a993cf
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.spec.ts
@@ -0,0 +1,140 @@
+
+import { TestBed, getTestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {GenericFormService} from './generic-form.service';
+import {FormBuilder, FormGroup} from '@angular/forms';
+import {FormControlModel, ValidatorModel, ValidatorOptions} from "../../models/formControlModels/formControl.model";
+import {FormControlType} from "../../models/formControlModels/formControlTypes.enum";
+
+describe('Generic Form  Service', () => {
+
+  let injector;
+  let service: GenericFormService;
+  let httpMock: HttpTestingController;
+  let form : FormGroup;
+  let fb : FormBuilder;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [GenericFormService, FormBuilder]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(GenericFormService);
+    httpMock = injector.get(HttpTestingController);
+    fb = injector.get(FormBuilder);
+
+  })().then(done).catch(done.fail));
+
+  let controls : FormControlModel[] = [
+    generateFormControlModel(FormControlType.INPUT, 'InputControlName','Test Value', false, generateFormValidators([ValidatorOptions.required])),
+    generateFormControlModel(FormControlType.INPUT, 'InputControlName_1', 'Test InputControlName_1', true, generateFormValidators([ValidatorOptions.required])),
+    generateFormControlModel(FormControlType.INPUT, 'InputControlName_2', 'Test InputControlName_2', false, [generateFormValidatorWithArg(ValidatorOptions.minLength, 4)]),
+    generateFormControlModel(FormControlType.INPUT, 'InputControlName_3', 'Exact 14 chars', false, [generateFormValidatorWithArg(ValidatorOptions.maxLength, 14)]),
+    generateFormControlModel(FormControlType.INPUT, 'InputControlName_4', 'Test pattern', false, [generateFormValidatorWithArg(ValidatorOptions.pattern, '^[a-zA-Z]+$')])
+  ];
+
+  describe('generateFormBuilder', ()=> {
+    test('validators should work correct', () => {
+      const controlName: string = 'InputControlName';
+      let form : FormGroup = service.generateFormBuilder(controls, []);
+
+      expect(form instanceof FormGroup).toBeTruthy();
+      expect(form.controls[controlName]).toBeDefined();
+      expect(form.controls[controlName].value).toEqual('Test Value');
+      expect(form.controls[controlName].disabled).toBeFalsy();
+      expect(form.controls[controlName].valid).toBeTruthy();
+      expect(form.controls[controlName].errors).toBeNull();
+
+      form.controls[controlName].setValue('');
+      expect(form.controls[controlName].valid).toBeFalsy();
+      expect(form.controls[controlName].errors.required).toBeTruthy();
+    });
+
+    test('validators should prevent the value to appear', () => {
+      const controlName: string = 'InputControlName_1';
+      let form : FormGroup = service.generateFormBuilder(controls, []);
+
+      expect(form instanceof FormGroup).toBeTruthy();
+      expect(form.controls[controlName]).toBeDefined();
+      expect(form.controls[controlName].disabled).toBeTruthy();
+      expect(form.controls[controlName].value).toEqual('Test InputControlName_1');
+      expect(form.controls[controlName].errors).toBeNull();
+    });
+
+    test('validators with minimum length args', () => {
+      const controlName: string = 'InputControlName_2';
+      let form : FormGroup = service.generateFormBuilder(controls, []);
+
+      expect(form instanceof FormGroup).toBeTruthy();
+      expect(form.controls[controlName]).toBeDefined();
+      expect(form.controls[controlName].disabled).toBeFalsy();
+      expect(form.controls[controlName].value).toEqual('Test InputControlName_2');
+      expect(form.controls[controlName].errors).toBeNull();
+
+      form.controls[controlName].setValue('123'); // less then 4 characters. -> error
+      expect(form.controls[controlName].errors.minlength).toBeDefined();
+      form.controls[controlName].setValue('1234');
+      expect(form.controls[controlName].errors).toBeNull();
+    });
+
+    test('validators with maximum length args', () => {
+      const controlName: string = 'InputControlName_3';
+      let form : FormGroup = service.generateFormBuilder(controls, []);
+
+      expect(form instanceof FormGroup).toBeTruthy();
+      expect(form.controls[controlName]).toBeDefined();
+      expect(form.controls[controlName].disabled).toBeFalsy();
+      expect(form.controls[controlName].value).toEqual('Exact 14 chars');
+      expect(form.controls[controlName].errors).toBeNull();
+
+      form.controls[controlName].setValue('More than max length'); // more than max characters. -> error
+      expect(form.controls[controlName].errors.maxlength).toBeDefined();
+      form.controls[controlName].setValue('Exact 14 chars');
+      expect(form.controls[controlName].errors).toBeNull();
+    });
+
+    test('pattern validator letters only', () => {
+      const controlName: string = 'InputControlName_4';
+      let form : FormGroup = service.generateFormBuilder(controls, []);
+
+
+      expect(form.controls[controlName].errors.pattern).toBeDefined();
+      form.controls[controlName].setValue('AAAAAAAA');
+      expect(form.controls[controlName].errors).toBeNull();
+    });
+  });
+
+
+
+  function generateFormValidators(validatorsNames :ValidatorOptions[]){
+    let validators : ValidatorModel[] = [];
+    for(let validatorName of validatorsNames){
+      validators.push(new ValidatorModel(validatorName, 'error ' + validatorName));
+    }
+    return validators;
+  }
+
+  function generateFormValidatorWithArg(validatorName :ValidatorOptions, arg : any){
+    return new ValidatorModel(validatorName, 'error ' + validatorName, arg);
+  }
+
+  function generateFormControlModel(type : FormControlType,
+                                    controlName: string,
+                                    value: any,
+                                    isDisabled: boolean,
+                                    validations: ValidatorModel[]){
+    let data : any = {
+      type : type,
+      isDisabled : isDisabled,
+      validations : validations,
+      value : value,
+      controlName :controlName
+    };
+
+    return new FormControlModel(data);
+  }
+});
diff --git a/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.ts b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.ts
new file mode 100644
index 0000000..15089ca
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericForm/generic-form.service.ts
@@ -0,0 +1,54 @@
+import {Injectable} from '@angular/core';
+import {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';
+import {FormControlModel} from "../../models/formControlModels/formControl.model";
+import * as _ from 'lodash';
+
+@Injectable()
+export class GenericFormService {
+    constructor(private _formBuilder: FormBuilder){}
+
+  generateFormBuilder(controls : FormControlModel[], dynamicInputs : FormControlModel[]) : FormGroup {
+    let controlsList = {};
+    if(!_.isNil(controls)){
+      for(let control  of controls){
+        controlsList[control.controlName] =  new FormControl(
+          {
+            value: _.isNil(control.value) ? null :control.value,
+            disabled: control.isDisabled
+          }, Validators.compose(control.validations.map(item => item.validator)));
+      }
+    }
+
+    if(!_.isNil(dynamicInputs)){
+      let dynamicControlsList = {};
+      if(!_.isNil(dynamicInputs)){
+        for(let control  of dynamicInputs){
+          dynamicControlsList[control.controlName] =  new FormControl(
+            {
+              value: control.value ? control.value : null,
+              disabled: control.isDisabled
+            }, Validators.compose(control.validations.map(item => item.validator)));
+        }
+      }
+      controlsList['instanceParams'] = this._formBuilder.group(dynamicControlsList);
+    }
+
+
+    return this._formBuilder.group(controlsList);
+  }
+
+  shouldDisplayValidationError(form: FormGroup, controlName : string): boolean{
+      if(!_.isNil(form) && !_.isNil(form.controls[controlName])){
+        if(!form.controls[controlName].touched){
+          return false;
+        } else if(form.controls[controlName].disabled) {
+          return false
+        }else if(_.isNil(form.controls[controlName].errors)){
+          return false;
+        }else {
+          return true;
+        }
+      }
+      return false;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.html b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.html
new file mode 100644
index 0000000..57064f6
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.html
@@ -0,0 +1,70 @@
+<div id="instance-popup" class="modal-dialog">
+  <div class="modal-content">
+    <div class="modal-header">
+      <button type="button"
+              class="close"
+              (click)="formPopupDetails?.onCancel(formPopupDetails.that,dynamicForm)" >&times;
+      </button>
+      <span [attr.data-tests-id]="'create-modal-title'"
+            class="modal-title">{{formPopupDetails?.title}}
+      </span>
+    </div>
+    <div class="modal-body popup-content">
+
+      <div class="header-left">
+        <div>MODEL: <span>"{{formPopupDetails?.leftSubTitle}}"</span></div>
+      </div>
+
+      <div class="header-right">
+        {{formPopupDetails?.rightSubTitle}}
+      </div>
+
+
+      <label class="quantity-label" *ngIf="formPopupDetails?.UUIDData['type'] == 'service'">Qty:</label>
+      <div class="quantity" *ngIf="formPopupDetails?.UUIDData['type'] == 'service'">
+        <select [disabled]="formPopupDetails?.UUIDData['isMacro'] !== true"
+                class="quantity-select"
+                [(ngModel)]="formPopupDetails.UUIDData['bulkSize']"
+                name="quantity"
+                id="quantity-select"
+                required>
+          <option *ngFor="let qty of quantityOptions" [value]="qty">{{qty}}</option>
+        </select>
+      </div>
+
+      <div class="model-information">
+        <model-information [modelInformationItems]="formPopupDetails?.modelInformationItems"></model-information>
+      </div>
+
+      <div  class="instance-form">
+        <div style="position: relative;height: 100%;overflow: auto;">
+          <label id="notification-area"  *ngIf="shouldShowNotification() == true" style="color: #959595;font-size: 12px;left: 30px;margin-left: 30px;">Data entered will apply to all service instances</label>
+          <generic-form  [formControls]="formPopupDetails?.formControlList"
+                         [dynamicInputs]="formPopupDetails?.dynamicInputsControlList"
+                         (onFormChanged)="dynamicForm = $event" ></generic-form>
+        </div>
+      </div>
+
+    </div>
+    <div class="modal-footer row" style="padding: 0">
+      <div class="col-md-6">
+        <div *ngIf="hasSomeError(formPopupDetails, dynamicForm) == true">
+          <form-general-error [message]="errorMsg"></form-general-error>
+        </div>
+      </div>
+      <div class="col-md-6" style="padding: 15px;padding-right: 35px;">
+        <button
+          [attr.data-tests-id]="'cancelButton'"
+          type="button" class="btn btn-default cancel"
+          (click)="formPopupDetails.onCancel(formPopupDetails.that, dynamicForm)"><span>Cancel</span></button>
+
+        <input type="submit"
+               value="Set"
+               data-tests-id="form-set"
+               class="btn btn-success submit"
+               [disabled]="!dynamicForm?.valid"
+               (click)="formPopupDetails.onSubmit(formPopupDetails.that, dynamicForm, servicesQty)">
+      </div>
+    </div>
+  </div>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.scss b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.scss
new file mode 100644
index 0000000..5057b44
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.scss
@@ -0,0 +1,182 @@
+$grid-border: 1px #d2d2d2 solid;
+
+#instance-popup {
+  color: #191919;
+
+  .left-panel {
+    background: #f2f2f2;
+    border-right: $grid-border;
+  }
+
+  .header-common {
+    height: 100%;
+    align-items: center;
+    display: flex;
+    font-family: OpenSans-Semibold;
+    font-size: 12px;
+  }
+
+  .header-text {
+    padding-left: 30px;
+    @extend .header-common;
+  }
+
+  .header-left {
+    grid-area: header-left;
+    @extend .header-text;
+    @extend .left-panel;
+    border-bottom: $grid-border;
+
+    span {
+      font-family: OpenSans-Regular;
+      font-size: 14px;
+    };
+  }
+
+  .header-right {
+    grid-area: header-right;
+
+    @extend .header-text;
+  }
+
+  .quantity-label {
+    grid-area: quantity-label;
+    @extend .header-common;
+    height: 100%;
+    font-family: OpenSans-Regular;
+  }
+  .quantity {
+    grid-area: quantity;
+    border-left: $grid-border;
+    border-top-style: none;
+    font-family: OpenSans-Semibold;
+    text-align: start;
+    text-indent: 10px;
+    .quantity-select {
+      width: 78px;
+      height: 100%;
+      border: 0;
+      background: white;
+      outline: none;
+      -webkit-appearance: none;
+      -moz-appearance: none;
+      appearance: none;
+      background: url('../../../../assets/img/chevron.svg') 0 0 no-repeat;
+      background-size: 24px;
+      background-position-x: right;
+      background-position-y: center;
+    }
+  }
+
+  input[type="number"]:hover::-webkit-inner-spin-button {
+    height: 20px;
+  }
+
+  .model-information {
+    grid-area: model-information;
+    border-top: $grid-border;
+    padding: 30px;
+    overflow: auto;
+    @extend .left-panel;
+  }
+
+  .instance-form {
+    border-top: $grid-border;
+    grid-area: instance-form;
+  }
+
+  .popup-content {
+    display: grid;
+    grid-template-columns: 400px auto 30px 93px;
+    grid-template-rows: 50px calc(100vh - 180px);
+    grid-template-areas:
+      "header-left header-right quantity-label quantity"
+      "model-information instance-form instance-form instance-form";
+    padding: 0;
+  }
+}
+
+.modal {
+  background-color: #191919;
+  opacity: 0.8;
+}
+
+.modal-dialog {
+  position: relative;
+  width: auto;
+  margin: 0;
+}
+@media (min-width: 1150px) {
+  .popup-content {
+    grid-template-rows: 30px 680px;
+  }
+}
+
+.modal-content {
+  border-radius: 0;
+  box-shadow: none;
+  border: none;
+}
+
+.modal-footer {
+  .cancel {
+    width: 120px;
+    height: 36px;
+    background: #ffffff;
+    border: 1px solid  #009fdb;
+    border-radius: 2px;
+    span {
+      font-family: OpenSans-Regular;
+      font-size: 14px;
+      color: #009fdb;
+      line-height: 16px;
+    }
+  }
+
+  .submit {
+    width: 120px;
+    height: 36px;
+    background: #009fdb;
+    border-radius: 2px;
+    border-color: #009fdb;
+    span {
+      font-family: OpenSans-Regular;
+      font-size: 14px;
+      color: #FFFFFF;
+      line-height: 16px;
+    }
+  }
+}
+
+.modal-header {
+  background-color: #009fdb;
+
+  padding-bottom: 13px;
+  padding-top: 13px;
+  padding-left: 29px;
+  padding-right: 21px;
+
+  .close {
+    font-size: 32px;
+    font-weight: 200;
+    color: #d8d8d8;
+    text-shadow: none;
+    filter: none;
+    opacity: 1;
+  }
+
+  .modal-title {
+    font-family: OpenSans-Regular;
+    font-size: 24px;
+    color: #fff;
+    line-height: 34px;
+  }
+}
+//
+//@media (min-width: 1200px) {
+//  .service-model,
+//  .service-instance {
+//    width: 1050px;
+//    margin: 30px auto;
+//  }
+//}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts
new file mode 100644
index 0000000..2b6417e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.component.ts
@@ -0,0 +1,145 @@
+import {Component, OnChanges, OnDestroy, OnInit} from '@angular/core';
+import {FormPopupDetails} from "../../models/formControlModels/formPopupDetails.model";
+import {DialogComponent, DialogService} from "ng2-bootstrap-modal";
+import {FormGroup} from "@angular/forms";
+import {IframeService} from "../../utils/iframe.service";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import * as _ from "lodash";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {ServicePopupService} from "./genericFormServices/service/service.popup.service";
+import {ActivatedRoute} from "@angular/router";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {GenericFormPopupService} from "./generic-form-popup.service";
+import {FormControlModel} from "../../models/formControlModels/formControl.model";
+import {FormGeneralErrorsService} from "../formGeneralErrors/formGeneralErrors.service";
+
+
+export interface PopupModel {
+  type : PopupType;
+  uuidData : UUIDData;
+  node : ITreeNode;
+  isUpdateMode : boolean;
+}
+
+export enum PopupType{
+  SERVICE = 'service',
+  VNF = 'vnf',
+  NETWORK = 'network',
+  VF_MODULE = 'vf_module',
+  VNF_GROUP = 'vnf_group'
+}
+
+
+@Component({
+  selector : 'generic-form-popup',
+  templateUrl : 'generic-form-popup.component.html',
+  styleUrls : ['generic-form-popup.component.scss']
+})
+
+export class GenericFormPopupComponent extends DialogComponent<PopupModel, boolean> implements OnInit, OnDestroy{
+  formPopupDetails : FormPopupDetails = null;
+  dynamicForm : FormGroup;
+  type : PopupType;
+  uuidData : UUIDData;
+  isUpdateMode : boolean;
+  node : ITreeNode = null;
+  hasGeneralApiError : boolean = false;
+  parentElementClassName = 'content';
+  errorMsg = 'Page contains errors. Please see details next to the relevant fields.';
+
+  servicesQty = 1;
+  quantityOptions = _.range(1, 51)
+  constructor(dialogService:  DialogService ,
+              private _iframeService : IframeService,
+              private _store: NgRedux<AppState>,
+              private _servicePopupService : ServicePopupService,
+              private _activatedRoute : ActivatedRoute,
+              private _aaiService : AaiService,
+              private _route: ActivatedRoute,
+              private _genericFormPopupService : GenericFormPopupService){
+    super(dialogService);
+  }
+
+  closeDialog(that) : void{
+    this._iframeService.removeClassCloseModal(that.parentElementClassName);
+    this.dialogService.removeDialog(this);
+    setTimeout(() => {
+      window.parent.postMessage("closeIframe", "*");
+    }, 15);
+  }
+
+  shouldShowNotification() : boolean {
+    return this.formPopupDetails && this.formPopupDetails.UUIDData['bulkSize'] > 1
+  }
+
+  ngOnInit(): void {
+    this._route
+      .queryParams
+      .subscribe(params => {
+        console.log('changed');
+        if(params['serviceModelId'] && params['isCreate']=="true"){
+          this._genericFormPopupService.initReduxOnCreateNewService().then((serviceModelId : string)=>{
+            this.uuidData = <any>{
+              bulkSize : 1,
+              isMacro : this._store.getState().service.serviceHierarchy[serviceModelId].service.instantiationType === 'Macro',
+              type : PopupType.SERVICE,
+              serviceId: serviceModelId,
+              popupService: this._servicePopupService,
+            };
+
+            this.uuidData.popupService.closeDialogEvent.subscribe((that)=>{
+              this.closeDialog(that);
+            });
+
+            this.formPopupDetails = this.uuidData.popupService.getGenericFormPopupDetails(
+              this.uuidData['serviceId'],
+              null,
+              null,
+              this.node,
+              this.uuidData,
+              false
+            );
+          });
+        }
+      });
+
+    FormGeneralErrorsService.checkForErrorTrigger.subscribe(()=>{
+      this.hasSomeError(this.formPopupDetails, this.dynamicForm);
+    });
+    
+    if(!_.isNil(this.uuidData)){
+      this.uuidData.popupService.closeDialogEvent.subscribe((that)=>{
+        this.closeDialog(that);
+      });
+
+      this.uuidData['isMacro'] = this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].service.instantiationType === 'Macro';
+      this.formPopupDetails = this._genericFormPopupService.getGenericFormDetails(this.uuidData, this.node, this.isUpdateMode);
+    }
+  }
+
+  hasSomeError(formPopupDetails : FormPopupDetails, form : FormGroup) : boolean{
+    if(_.isNil(formPopupDetails)) return false;
+    else {
+      for(let controlName in form.controls){
+        if(form.controls[controlName].errors){
+          let error: string[] = Object.keys(form.controls[controlName].errors);
+          if(error.length === 1 && error[0] === 'required'){
+            continue;
+          }else if(Object.keys(form.controls[controlName].errors).length > 0  ){
+            return true;
+          }
+        }
+      }
+    }
+
+    return formPopupDetails.formControlList.filter((item : FormControlModel) =>item.type === 'DROPDOWN' && item['hasEmptyOptions']).length > 0
+  }
+}
+
+
+export class UUIDData extends Object{
+  type : string;
+  popupService : any;
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.spec.ts
new file mode 100644
index 0000000..02e5455
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.spec.ts
@@ -0,0 +1,1938 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {FormBuilder, FormGroup} from '@angular/forms';
+import {GenericFormPopupService} from "./generic-form-popup.service";
+import {IframeService} from "../../utils/iframe.service";
+import {NgRedux} from "@angular-redux/store";
+import {ServicePopupService} from "./genericFormServices/service/service.popup.service";
+import {BasicControlGenerator} from "../genericForm/formControlsServices/basic.control.generator";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {ServiceControlGenerator} from "../genericForm/formControlsServices/service.control.generator";
+import {GenericFormService} from "../genericForm/generic-form.service";
+import {LogService} from "../../utils/log/log.service";
+import {DefaultDataGeneratorService} from "../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {BasicPopupService} from "./genericFormServices/basic.popup.service";
+import {ActivatedRoute} from "@angular/router";
+import {UUIDData} from "./generic-form-popup.component";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {NetworkPopupService} from "./genericFormServices/network/network.popup.service";
+import {NetworkControlGenerator} from "../genericForm/formControlsServices/networkGenerator/network.control.generator";
+import {VfModulePopuopService} from "./genericFormServices/vfModule/vfModule.popuop.service";
+import {VfModuleControlGenerator} from "../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator";
+import {FeatureFlagsService} from "../../services/featureFlag/feature-flags.service";
+
+class MockAppStore<T>{
+  getState() {
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {}
+            },
+            "vnfs": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "serviceEcompNaming" : "true",
+                "properties": {
+                  "ecomp_generated_naming": "false",
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VF",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "ecomp_generated_naming": "false",
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "networks": {},
+            "vnfs": {
+              "VF_vMee 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                      "isMissingData": false,
+                      "sdncPreReload": null,
+                      "modelInfo": {
+                        "modelType": "VFmodule",
+                        "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                        "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                        "modelName": "VfVmee..base_vmme..module-0",
+                        "modelVersion": "2",
+                        "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                        "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                      },
+                      "instanceParams": [
+                        {}
+                      ],
+                      "trackById": "wmtm6sy2uj"
+                    }
+                  }
+                },
+                "isMissingData": true,
+                "originalName": "VF_vMee 0",
+                "vnfStoreKey": "VF_vMee 0",
+                "trackById": "p3wk448m5do",
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+                "lcpCloudRegionId": null,
+                "tenantId": null,
+                "lineOfBusiness": null,
+                "platformName": null,
+                "modelInfo": {
+                  "modelType": "VF",
+                  "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+                  "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+                  "modelName": "VF_vMee",
+                  "modelVersion": "2.0",
+                  "modelCustomizationName": "VF_vMee 0"
+                }
+              }
+            },
+            "instanceParams": [
+              {}
+            ],
+            "validationCounter": 1,
+            "existingNames": {},
+            "existingVNFCounterMap": {
+              "d6557200-ecf2-4641-8094-5393ae3aae60": 1
+            },
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": "hvf6",
+            "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "aicZoneId": "JAG1",
+            "projectName": "x1",
+            "rollbackOnFailure": "true",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "ComplexService",
+              "modelVersion": "1.0",
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+            },
+            "isALaCarte": false,
+            "name": "ComplexService",
+            "version": "1.0",
+            "description": "ComplexService",
+            "category": "Emanuel",
+            "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isEcompGeneratedNaming": true,
+            "isMultiStepDesign": false
+          }
+        },
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [
+            {
+              "id": "JANET25",
+              "name": "JANET25",
+              "isPermitted": true
+            },
+            {
+              "id": "hvf6",
+              "name": "hvf6",
+              "isPermitted": true
+            }
+          ],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [
+              {
+                "id": "092eb9e8e4b7412e8787dd091bc58e86",
+                "name": "USP-SIP-IC-24335-T-01",
+                "isPermitted": true
+              }
+            ],
+            "hvf6": [
+              {
+                "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "name": "AIN Web Tool-15-D-testalexandria",
+                "isPermitted": true
+              },
+              {
+                "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "name": "AIN Web Tool-15-D-STTest2",
+                "isPermitted": true
+              },
+              {
+                "id": "1178612d2b394be4834ad77f567c0af2",
+                "name": "AIN Web Tool-15-D-SSPtestcustome",
+                "isPermitted": true
+              },
+              {
+                "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+                "name": "AIN Web Tool-15-D-UncheckedEcopm",
+                "isPermitted": true
+              },
+              {
+                "id": "de007636e25249238447264a988a927b",
+                "name": "AIN Web Tool-15-D-dfsdf",
+                "isPermitted": true
+              },
+              {
+                "id": "62f29b3613634ca6a3065cbe0e020c44",
+                "name": "AIN/SMS-16-D-Multiservices1",
+                "isPermitted": true
+              },
+              {
+                "id": "649289e30d3244e0b48098114d63c2aa",
+                "name": "AIN Web Tool-15-D-SSPST66",
+                "isPermitted": true
+              },
+              {
+                "id": "3f21eeea6c2c486bba31dab816c05a32",
+                "name": "AIN Web Tool-15-D-ASSPST47",
+                "isPermitted": true
+              },
+              {
+                "id": "f60ce21d3ee6427586cff0d22b03b773",
+                "name": "CESAR-100-D-sspjg67246",
+                "isPermitted": true
+              },
+              {
+                "id": "8774659e425f479895ae091bb5d46560",
+                "name": "CESAR-100-D-sspjg68359",
+                "isPermitted": true
+              },
+              {
+                "id": "624eb554b0d147c19ff8885341760481",
+                "name": "AINWebTool-15-D-iftach",
+                "isPermitted": true
+              },
+              {
+                "id": "214f55f5fc414c678059c383b03e4962",
+                "name": "CESAR-100-D-sspjg612401",
+                "isPermitted": true
+              },
+              {
+                "id": "c90666c291664841bb98e4d981ff1db5",
+                "name": "CESAR-100-D-sspjg621340",
+                "isPermitted": true
+              },
+              {
+                "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+                "name": "sspjg621351cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "b386b768a3f24c8e953abbe0b3488c02",
+                "name": "AINWebTool-15-D-eteancomp",
+                "isPermitted": true
+              },
+              {
+                "id": "dc6c4dbfd225474e9deaadd34968646c",
+                "name": "AINWebTool-15-T-SPFET",
+                "isPermitted": true
+              },
+              {
+                "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+                "name": "AINWebTool-15-X-eeweww",
+                "isPermitted": true
+              },
+              {
+                "id": "f2f3830e4c984d45bcd00e1a04158a79",
+                "name": "CESAR-100-D-spjg61909",
+                "isPermitted": true
+              },
+              {
+                "id": "05b91bd5137f4929878edd965755c06d",
+                "name": "CESAR-100-D-sspjg621512cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "7002fbe8482d4a989ddf445b1ce336e0",
+                "name": "AINWebTool-15-X-vdr",
+                "isPermitted": true
+              },
+              {
+                "id": "4008522be43741dcb1f5422022a2aa0b",
+                "name": "AINWebTool-15-D-ssasa",
+                "isPermitted": true
+              },
+              {
+                "id": "f44e2e96a1b6476abfda2fa407b00169",
+                "name": "AINWebTool-15-D-PFNPT",
+                "isPermitted": true
+              },
+              {
+                "id": "b69a52bec8a84669a37a1e8b72708be7",
+                "name": "AINWebTool-15-X-vdre",
+                "isPermitted": true
+              },
+              {
+                "id": "fac7d9fd56154caeb9332202dcf2969f",
+                "name": "AINWebTool-15-X-NONPODECOMP",
+                "isPermitted": true
+              },
+              {
+                "id": "2d34d8396e194eb49969fd61ffbff961",
+                "name": "DN5242-Nov16-T5",
+                "isPermitted": true
+              },
+              {
+                "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+                "name": "ro-T11",
+                "isPermitted": true
+              },
+              {
+                "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+                "name": "ro-T112",
+                "isPermitted": true
+              },
+              {
+                "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+                "name": "DN5242-Nov21-T1",
+                "isPermitted": true
+              },
+              {
+                "id": "d0a3e3f2964542259d155a81c41aadc3",
+                "name": "test-hvf6-09",
+                "isPermitted": true
+              },
+              {
+                "id": "cbb99fe4ada84631b7baf046b6fd2044",
+                "name": "DN5242-Nov16-T3",
+                "isPermitted": true
+              }
+            ]
+          }
+        },
+        "productFamilies": [
+          {
+            "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+            "name": "SCOTTIE",
+            "isPermitted": true
+          },
+          {
+            "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "name": "IGNACIO",
+            "isPermitted": true
+          },
+          {
+            "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "name": "Christie",
+            "isPermitted": true
+          },
+          {
+            "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+            "name": "Enhanced Services",
+            "isPermitted": true
+          },
+          {
+            "id": "vTerrance",
+            "name": "vTerrance",
+            "isPermitted": true
+          },
+          {
+            "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+            "name": "vSCP",
+            "isPermitted": true
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": true
+          },
+          {
+            "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+            "name": "BVOIP",
+            "isPermitted": true
+          },
+          {
+            "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+            "name": "LINDSEY",
+            "isPermitted": true
+          },
+          {
+            "id": "LRSI-OSPF",
+            "name": "LRSI-OSPF",
+            "isPermitted": true
+          },
+          {
+            "id": "vRosemarie",
+            "name": "HNGATEWAY",
+            "isPermitted": true
+          },
+          {
+            "id": "vHNPaas",
+            "name": "WILKINS",
+            "isPermitted": true
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "TYLER SILVIA",
+            "isPermitted": true
+          },
+          {
+            "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+            "name": "VROUTER",
+            "isPermitted": true
+          },
+          {
+            "id": "Cisneros",
+            "name": "vMuriel",
+            "isPermitted": true
+          },
+          {
+            "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+            "name": "CARA Griffin",
+            "isPermitted": true
+          },
+          {
+            "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          },
+          {
+            "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+            "name": "Transport",
+            "isPermitted": true
+          },
+          {
+            "id": "vSalvatore",
+            "name": "vSalvatore",
+            "isPermitted": true
+          },
+          {
+            "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+            "name": "Josefina",
+            "isPermitted": true
+          },
+          {
+            "id": "vHubbard",
+            "name": "vHubbard",
+            "isPermitted": true
+          },
+          {
+            "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          }
+        ],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [
+            {
+              "id": "0",
+              "name": "vRichardson",
+              "isPermitted": false
+            },
+            {
+              "id": "1",
+              "name": "TYLER SILVIA",
+              "isPermitted": true
+            },
+            {
+              "id": "2",
+              "name": "Emanuel",
+              "isPermitted": false
+            },
+            {
+              "id": "3",
+              "name": "vJamie",
+              "isPermitted": false
+            },
+            {
+              "id": "4",
+              "name": "vVoiceMail",
+              "isPermitted": false
+            },
+            {
+              "id": "5",
+              "name": "Kennedy",
+              "isPermitted": false
+            },
+            {
+              "id": "6",
+              "name": "vSEGW",
+              "isPermitted": false
+            },
+            {
+              "id": "7",
+              "name": "vVM",
+              "isPermitted": false
+            },
+            {
+              "id": "8",
+              "name": "vOTA",
+              "isPermitted": false
+            },
+            {
+              "id": "9",
+              "name": "vMME",
+              "isPermitted": false
+            },
+            {
+              "id": "10",
+              "name": "vMNS",
+              "isPermitted": false
+            },
+            {
+              "id": "11",
+              "name": "vSCP",
+              "isPermitted": false
+            },
+            {
+              "id": "12",
+              "name": "VPMS",
+              "isPermitted": false
+            },
+            {
+              "id": "13",
+              "name": "vMMSC",
+              "isPermitted": false
+            },
+            {
+              "id": "14",
+              "name": "SSD",
+              "isPermitted": false
+            },
+            {
+              "id": "15",
+              "name": "vMOG",
+              "isPermitted": false
+            },
+            {
+              "id": "16",
+              "name": "LINDSEY",
+              "isPermitted": false
+            },
+            {
+              "id": "17",
+              "name": "JOHANNA_SANTOS",
+              "isPermitted": false
+            },
+            {
+              "id": "18",
+              "name": "vCarroll",
+              "isPermitted": false
+            }
+          ]
+        },
+        "aicZones": [
+          {
+            "id": "NFT1",
+            "name": "NFTJSSSS-NFT1"
+          },
+          {
+            "id": "JAG1",
+            "name": "YUDFJULP-JAG1"
+          },
+          {
+            "id": "YYY1",
+            "name": "UUUAIAAI-YYY1"
+          },
+          {
+            "id": "BAN1",
+            "name": "VSDKYUTP-BAN1"
+          },
+          {
+            "id": "DKJ1",
+            "name": "DKJSJDKA-DKJ1"
+          },
+          {
+            "id": "MCS1",
+            "name": "ASACMAMS-MCS1"
+          },
+          {
+            "id": "UIO1",
+            "name": "uioclli1-UIO1"
+          },
+          {
+            "id": "RAJ1",
+            "name": "YGBIJNLQ-RAJ1"
+          },
+          {
+            "id": "OPA1",
+            "name": "opaclli1-OPA1"
+          },
+          {
+            "id": "SDE1",
+            "name": "ZXCVBNMA-SDE1"
+          },
+          {
+            "id": "VEN2",
+            "name": "FGHJUHIL-VEN2"
+          },
+          {
+            "id": "ORL1",
+            "name": "ORLDFLMA-ORL1"
+          },
+          {
+            "id": "JAD1",
+            "name": "JADECLLI-JAD1"
+          },
+          {
+            "id": "ZXL1",
+            "name": "LWLWCANN-ZXL1"
+          },
+          {
+            "id": "CKL1",
+            "name": "CLKSKCKK-CKL1"
+          },
+          {
+            "id": "SDF1",
+            "name": "sdfclli1-SDF1"
+          },
+          {
+            "id": "RAD1",
+            "name": "RADICAL1-RAD1"
+          },
+          {
+            "id": "KIT1",
+            "name": "BHYJFGLN-KIT1"
+          },
+          {
+            "id": "REL1",
+            "name": "INGERFGT-REL1"
+          },
+          {
+            "id": "JNL1",
+            "name": "CJALSDAC-JNL1"
+          },
+          {
+            "id": "OLK1",
+            "name": "OLKOLKLS-OLK1"
+          },
+          {
+            "id": "CHI1",
+            "name": "CHILLIWE-CHI1"
+          },
+          {
+            "id": "UUU4",
+            "name": "UUUAAAUU-UUU4"
+          },
+          {
+            "id": "TUF1",
+            "name": "TUFCLLI1-TUF1"
+          },
+          {
+            "id": "KJN1",
+            "name": "CKALDKSA-KJN1"
+          },
+          {
+            "id": "SAM1",
+            "name": "SNDGCA64-SAN1"
+          },
+          {
+            "id": "SCK1",
+            "name": "SCKSCKSK-SCK1"
+          },
+          {
+            "id": "HJH1",
+            "name": "AOEEQQQD-HJH1"
+          },
+          {
+            "id": "HGD1",
+            "name": "SDFQWHGD-HGD1"
+          },
+          {
+            "id": "KOR1",
+            "name": "HYFLNBVT-KOR1"
+          },
+          {
+            "id": "ATL43",
+            "name": "AICLOCID-ATL43"
+          },
+          {
+            "id": "ATL54",
+            "name": "AICFTAAI-ATL54"
+          },
+          {
+            "id": "ATL66",
+            "name": "CLLIAAII-ATL66"
+          },
+          {
+            "id": "VEL1",
+            "name": "BNMLKUIK-VEL1"
+          },
+          {
+            "id": "ICC1",
+            "name": "SANJITAT-ICC1"
+          },
+          {
+            "id": "MNT11",
+            "name": "WSXEFBTH-MNT11"
+          },
+          {
+            "id": "DEF2",
+            "name": "WSBHGTYL-DEF2"
+          },
+          {
+            "id": "MAD11",
+            "name": "SDFQWGKL-MAD11"
+          },
+          {
+            "id": "OLG1",
+            "name": "OLHOLHOL-OLG1"
+          },
+          {
+            "id": "GAR1",
+            "name": "NGFVSJKO-GAR1"
+          },
+          {
+            "id": "SAN22",
+            "name": "GNVLSCTL-SAN22"
+          },
+          {
+            "id": "HRG1",
+            "name": "HRGHRGGS-HRG1"
+          },
+          {
+            "id": "JCS1",
+            "name": "JCSJSCJS-JCS1"
+          },
+          {
+            "id": "DHA12",
+            "name": "WSXEDECF-DHA12"
+          },
+          {
+            "id": "HJE1",
+            "name": "AOEEWWWD-HJE1"
+          },
+          {
+            "id": "NCA1",
+            "name": "NCANCANN-NCA1"
+          },
+          {
+            "id": "IOP1",
+            "name": "iopclli1-IOP1"
+          },
+          {
+            "id": "RTY1",
+            "name": "rtyclli1-RTY1"
+          },
+          {
+            "id": "KAP1",
+            "name": "HIOUYTRQ-KAP1"
+          },
+          {
+            "id": "ZEN1",
+            "name": "ZENCLLI1-ZEN1"
+          },
+          {
+            "id": "HKA1",
+            "name": "JAKHLASS-HKA1"
+          },
+          {
+            "id": "CQK1",
+            "name": "CQKSCAKK-CQK1"
+          },
+          {
+            "id": "SAI1",
+            "name": "UBEKQLPD-SAI1"
+          },
+          {
+            "id": "ERT1",
+            "name": "ertclli1-ERT1"
+          },
+          {
+            "id": "IBB1",
+            "name": "PLMKOIJU-IBB1"
+          },
+          {
+            "id": "TIR2",
+            "name": "PLKINHYI-TIR2"
+          },
+          {
+            "id": "HSD1",
+            "name": "CHASKCDS-HSD1"
+          },
+          {
+            "id": "SLF78",
+            "name": "SDCTLFN1-SLF78"
+          },
+          {
+            "id": "SEE78",
+            "name": "SDCTEEE4-SEE78"
+          },
+          {
+            "id": "SAN13",
+            "name": "TOKYJPFA-SAN13"
+          },
+          {
+            "id": "SAA78",
+            "name": "SDCTAAA1-SAA78"
+          },
+          {
+            "id": "LUC1",
+            "name": "ATLDFGYC-LUC1"
+          },
+          {
+            "id": "AMD13",
+            "name": "MEMATLAN-AMD13"
+          },
+          {
+            "id": "TOR1",
+            "name": "TOROONXN-TOR1"
+          },
+          {
+            "id": "QWE1",
+            "name": "QWECLLI1-QWE1"
+          },
+          {
+            "id": "ZOG1",
+            "name": "ZOGASTRO-ZOG1"
+          },
+          {
+            "id": "CAL33",
+            "name": "CALIFORN-CAL33"
+          },
+          {
+            "id": "SHH78",
+            "name": "SDIT1HHH-SHH78"
+          },
+          {
+            "id": "DSA1",
+            "name": "LKJHGFDS-DSA1"
+          },
+          {
+            "id": "CLG1",
+            "name": "CLGRABAD-CLG1"
+          },
+          {
+            "id": "BNA1",
+            "name": "BNARAGBK-BNA1"
+          },
+          {
+            "id": "ATL84",
+            "name": "CANTTCOC-ATL84"
+          },
+          {
+            "id": "APP1",
+            "name": "WBHGTYUI-APP1"
+          },
+          {
+            "id": "RJN1",
+            "name": "RJNRBZAW-RJN1"
+          },
+          {
+            "id": "EHH78",
+            "name": "SDCSHHH5-EHH78"
+          },
+          {
+            "id": "mac10",
+            "name": "PKGTESTF-mac10"
+          },
+          {
+            "id": "SXB78",
+            "name": "SDCTGXB1-SXB78"
+          },
+          {
+            "id": "SAX78",
+            "name": "SDCTAXG1-SAX78"
+          },
+          {
+            "id": "SYD1",
+            "name": "SYDNAUBV-SYD1"
+          },
+          {
+            "id": "TOK1",
+            "name": "TOKYJPFA-TOK1"
+          },
+          {
+            "id": "KGM2",
+            "name": "KGMTNC20-KGM2"
+          },
+          {
+            "id": "DCC1b",
+            "name": "POIUYTGH-DCC1b"
+          },
+          {
+            "id": "SKK78",
+            "name": "SDCTKKK1-SKK78"
+          },
+          {
+            "id": "SGG78",
+            "name": "SDCTGGG1-SGG78"
+          },
+          {
+            "id": "SJJ78",
+            "name": "SDCTJJJ1-SJJ78"
+          },
+          {
+            "id": "SBX78",
+            "name": "SDCTBXG1-SBX78"
+          },
+          {
+            "id": "LAG1",
+            "name": "LARGIZON-LAG1"
+          },
+          {
+            "id": "IAA1",
+            "name": "QAZXSWED-IAA1"
+          },
+          {
+            "id": "POI1",
+            "name": "PLMNJKIU-POI1"
+          },
+          {
+            "id": "LAG1a",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "PBL1",
+            "name": "PBLAPBAI-PBL1"
+          },
+          {
+            "id": "LAG45",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "MAR1",
+            "name": "MNBVCXZM-MAR1"
+          },
+          {
+            "id": "HST70",
+            "name": "HSTNTX70-HST70"
+          },
+          {
+            "id": "DCC1a",
+            "name": "POIUYTGH-DCC1a"
+          },
+          {
+            "id": "TOL1",
+            "name": "TOLDOH21-TOL1"
+          },
+          {
+            "id": "LON1",
+            "name": "LONEENCO-LON1"
+          },
+          {
+            "id": "SJU78",
+            "name": "SDIT1JUB-SJU78"
+          },
+          {
+            "id": "STN27",
+            "name": "HSTNTX01-STN27"
+          },
+          {
+            "id": "SSW56",
+            "name": "ss8126GT-SSW56"
+          },
+          {
+            "id": "SBB78",
+            "name": "SDIT1BBB-SBB78"
+          },
+          {
+            "id": "DCC3",
+            "name": "POIUYTGH-DCC3"
+          },
+          {
+            "id": "GNV1",
+            "name": "GNVLSCTL-GNV1"
+          },
+          {
+            "id": "WAS1",
+            "name": "WASHDCSW-WAS1"
+          },
+          {
+            "id": "TOY1",
+            "name": "TORYONNZ-TOY1"
+          },
+          {
+            "id": "STT1",
+            "name": "STTLWA02-STT1"
+          },
+          {
+            "id": "STG1",
+            "name": "STTGGE62-STG1"
+          },
+          {
+            "id": "SLL78",
+            "name": "SDCTLLL1-SLL78"
+          },
+          {
+            "id": "SBU78",
+            "name": "SDIT1BUB-SBU78"
+          },
+          {
+            "id": "ATL2",
+            "name": "ATLNGANW-ATL2"
+          },
+          {
+            "id": "BOT1",
+            "name": "BOTHWAKY-BOT1"
+          },
+          {
+            "id": "SNG1",
+            "name": "SNGPSIAU-SNG1"
+          },
+          {
+            "id": "NYC1",
+            "name": "NYCMNY54-NYC1"
+          },
+          {
+            "id": "LAG1b",
+            "name": "LARGIZON-LAG1b"
+          },
+          {
+            "id": "AMD15",
+            "name": "AMDFAA01-AMD15"
+          },
+          {
+            "id": "SNA1",
+            "name": "SNANTXCA-SNA1"
+          },
+          {
+            "id": "PLT1",
+            "name": "PLTNCA60-PLT1"
+          },
+          {
+            "id": "TLP1",
+            "name": "TLPNXM18-TLP1"
+          },
+          {
+            "id": "SDD81",
+            "name": "SAIT1DD6-SDD81"
+          },
+          {
+            "id": "DCC1",
+            "name": "POIUYTGH-DCC1"
+          },
+          {
+            "id": "DCC2",
+            "name": "POIUYTGH-DCC2"
+          },
+          {
+            "id": "OKC1",
+            "name": "OKCBOK55-OKC1"
+          },
+          {
+            "id": "PAR1",
+            "name": "PARSFRCG-PAR1"
+          },
+          {
+            "id": "TES36",
+            "name": "ABCEETES-TES36"
+          },
+          {
+            "id": "COM1",
+            "name": "PLMKOPIU-COM1"
+          },
+          {
+            "id": "ANI1",
+            "name": "ATLNGTRE-ANI1"
+          },
+          {
+            "id": "SDG78",
+            "name": "SDIT1BDG-SDG78"
+          },
+          {
+            "id": "mac20",
+            "name": "PKGTESTF-mac20"
+          },
+          {
+            "id": "DSF45",
+            "name": "DSFBG123-DSF45"
+          },
+          {
+            "id": "HST25",
+            "name": "HSTNTX01-HST25"
+          },
+          {
+            "id": "AMD18",
+            "name": "AUDIMA01-AMD18"
+          },
+          {
+            "id": "SAA80",
+            "name": "SAIT9AA3-SAA80"
+          },
+          {
+            "id": "SSA56",
+            "name": "SSIT2AA7-SSA56"
+          },
+          {
+            "id": "SDD82",
+            "name": "SAIT1DD9-SDD82"
+          },
+          {
+            "id": "JCV1",
+            "name": "JCVLFLBW-JCV1"
+          },
+          {
+            "id": "SUL2",
+            "name": "WERTYUJK-SUL2"
+          },
+          {
+            "id": "PUR1",
+            "name": "purelyde-PUR1"
+          },
+          {
+            "id": "FDE55",
+            "name": "FDERT555-FDE55"
+          },
+          {
+            "id": "SITE",
+            "name": "LONEENCO-SITE"
+          },
+          {
+            "id": "ATL1",
+            "name": "ATLNGAMA-ATL1"
+          },
+          {
+            "id": "JUL1",
+            "name": "ZXCVBNMM-JUL1"
+          },
+          {
+            "id": "TAT34",
+            "name": "TESAAISB-TAT34"
+          },
+          {
+            "id": "XCP12",
+            "name": "CHKGH123-XCP12"
+          },
+          {
+            "id": "RAI1",
+            "name": "poiuytre-RAI1"
+          },
+          {
+            "id": "HPO1",
+            "name": "ATLNGAUP-HPO1"
+          },
+          {
+            "id": "KJF12",
+            "name": "KJFDH123-KJF12"
+          },
+          {
+            "id": "SCC80",
+            "name": "SAIT9CC3-SCC80"
+          },
+          {
+            "id": "SAA12",
+            "name": "SAIT9AF8-SAA12"
+          },
+          {
+            "id": "SAA14",
+            "name": "SAIT1AA9-SAA14"
+          },
+          {
+            "id": "ATL35",
+            "name": "TTESSAAI-ATL35"
+          },
+          {
+            "id": "CWY1",
+            "name": "CWYMOWBS-CWY1"
+          },
+          {
+            "id": "ATL76",
+            "name": "TELEPAAI-ATL76"
+          },
+          {
+            "id": "DSL12",
+            "name": "DSLFK242-DSL12"
+          },
+          {
+            "id": "ATL53",
+            "name": "AAIATLTE-ATL53"
+          },
+          {
+            "id": "SAA11",
+            "name": "SAIT9AA2-SAA11"
+          },
+          {
+            "id": "ATL62",
+            "name": "TESSASCH-ATL62"
+          },
+          {
+            "id": "AUG1",
+            "name": "ASDFGHJK-AUG1"
+          },
+          {
+            "id": "POI22",
+            "name": "POIUY123-POI22"
+          },
+          {
+            "id": "SAA13",
+            "name": "SAIT1AA9-SAA13"
+          },
+          {
+            "id": "BHY17",
+            "name": "BHYTFRF3-BHY17"
+          },
+          {
+            "id": "LIS1",
+            "name": "HOSTPROF-LIS1"
+          },
+          {
+            "id": "SIP1",
+            "name": "ZXCVBNMK-SIP1"
+          },
+          {
+            "id": "ATL99",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "ATL64",
+            "name": "FORLOAAJ-ATL64"
+          },
+          {
+            "id": "TAT33",
+            "name": "TESAAISA-TAT33"
+          },
+          {
+            "id": "RAD10",
+            "name": "INDIPUNE-RAD10"
+          },
+          {
+            "id": "RTW5",
+            "name": "BHYTFRY4-RTW5"
+          },
+          {
+            "id": "JGS1",
+            "name": "KSJKKKKK-JGS1"
+          },
+          {
+            "id": "ATL98",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "WAN1",
+            "name": "LEIWANGW-WAN1"
+          },
+          {
+            "id": "ATL44",
+            "name": "ATLSANAB-ATL44"
+          },
+          {
+            "id": "RTD2",
+            "name": "BHYTFRk4-RTD2"
+          },
+          {
+            "id": "NIR1",
+            "name": "ORFLMANA-NIR1"
+          },
+          {
+            "id": "ATL75",
+            "name": "SANAAIRE-ATL75"
+          },
+          {
+            "id": "NUM1",
+            "name": "QWERTYUI-NUM1"
+          },
+          {
+            "id": "MTN32",
+            "name": "MDTWNJ21-MTN32"
+          },
+          {
+            "id": "RTZ4",
+            "name": "BHYTFRZ6-RTZ4"
+          },
+          {
+            "id": "ATL56",
+            "name": "ATLSANAC-ATL56"
+          },
+          {
+            "id": "AMS1",
+            "name": "AMSTNLBW-AMS1"
+          },
+          {
+            "id": "RCT1",
+            "name": "AMSTERNL-RCT1"
+          },
+          {
+            "id": "JAN1",
+            "name": "ORFLMATT-JAN1"
+          },
+          {
+            "id": "ABC14",
+            "name": "TESAAISA-ABC14"
+          },
+          {
+            "id": "TAT37",
+            "name": "TESAAISD-TAT37"
+          },
+          {
+            "id": "MIC54",
+            "name": "MICHIGAN-MIC54"
+          },
+          {
+            "id": "ABC11",
+            "name": "ATLSANAI-ABC11"
+          },
+          {
+            "id": "AMF11",
+            "name": "AMDOCS01-AMF11"
+          },
+          {
+            "id": "ATL63",
+            "name": "ATLSANEW-ATL63"
+          },
+          {
+            "id": "ABC12",
+            "name": "ATLSECIA-ABC12"
+          },
+          {
+            "id": "MTN20",
+            "name": "MDTWNJ21-MTN20"
+          },
+          {
+            "id": "ABC15",
+            "name": "AAITESAN-ABC15"
+          },
+          {
+            "id": "AVT1",
+            "name": "AVTRFLHD-AVT1"
+          },
+          {
+            "id": "ATL34",
+            "name": "ATLSANAI-ATL34"
+          }
+        ],
+        "categoryParameters": {
+          "owningEntityList": [
+            {
+              "id": "aaa1",
+              "name": "aaa1"
+            },
+            {
+              "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+              "name": "WayneHolland"
+            },
+            {
+              "id": "Melissa",
+              "name": "Melissa"
+            }
+          ],
+          "projectList": [
+            {
+              "id": "WATKINS",
+              "name": "WATKINS"
+            },
+            {
+              "id": "x1",
+              "name": "x1"
+            },
+            {
+              "id": "yyy1",
+              "name": "yyy1"
+            }
+          ],
+          "lineOfBusinessList": [
+            {
+              "id": "ONAP",
+              "name": "ONAP"
+            },
+            {
+              "id": "zzz1",
+              "name": "zzz1"
+            }
+          ],
+          "platformList": [
+            {
+              "id": "platform",
+              "name": "platform"
+            },
+            {
+              "id": "xxx1",
+              "name": "xxx1"
+            }
+          ]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [
+          {
+            "id": "CAR_2020_ER",
+            "name": "CAR_2020_ER",
+            "isPermitted": true
+          },
+          {
+            "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+            "name": "JULIO ERICKSON",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-2",
+            "name": "DALE BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-1",
+            "name": "LLOYD BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example",
+            "name": "JimmyExampleCust-20161102",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example2",
+            "name": "JimmyExampleCust-20161103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-102",
+            "name": "ERICA5779-TestSub-PWT-102",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-101",
+            "name": "ERICA5779-TestSub-PWT-101",
+            "isPermitted": false
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-4",
+            "name": "ERICA5779-Subscriber-5",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-103",
+            "name": "ERICA5779-TestSub-PWT-103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-2",
+            "name": "ERICA5779-Subscriber-2",
+            "isPermitted": false
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "SILVIA ROBBINS",
+            "isPermitted": true
+          },
+          {
+            "id": "ERICA5779-Subscriber-3",
+            "name": "ERICA5779-Subscriber-3",
+            "isPermitted": false
+          },
+          {
+            "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+            "name": "CRAIG/ROBERTS",
+            "isPermitted": false
+          }
+        ]
+      }
+    }
+  }
+}
+class ActivatedRouteMock<T>{
+  queryParams() {
+    return {
+      serviceModelId : '6e59c5de-f052-46fa-aa7e-2fca9d674c44'
+    }
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('Generic Form popup Service', () => {
+  let injector;
+  let service: GenericFormPopupService;
+  let httpMock: HttpTestingController;
+  let form : FormGroup;
+  let fb : FormBuilder;
+  let netwokPopupService : NetworkPopupService;
+  let vfModulePopupService : VfModulePopuopService;
+  let servicePopupService : ServicePopupService;
+  let _aaiService : AaiService;
+  let _activatedRoute : ActivatedRoute;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [GenericFormPopupService,
+        FormBuilder,
+        IframeService,
+        ServicePopupService,
+        BasicControlGenerator,
+        ServiceControlGenerator,
+        GenericFormService,
+        LogService,
+        DefaultDataGeneratorService,
+        BasicPopupService,
+        AaiService,
+        NetworkPopupService,
+        NetworkControlGenerator,
+        VfModulePopuopService,
+        VfModuleControlGenerator,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: ActivatedRoute, useClass: ActivatedRouteMock},
+        {provide: NgRedux, useClass: MockAppStore}]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(GenericFormPopupService);
+    httpMock = injector.get(HttpTestingController);
+    fb = injector.get(FormBuilder);
+    netwokPopupService = injector.get(NetworkPopupService);
+    vfModulePopupService = injector.get(VfModulePopuopService);
+    servicePopupService = injector.get(ServicePopupService);
+    _aaiService = injector.get(AaiService);
+    _activatedRoute = injector.get(ActivatedRoute);
+
+  })().then(done).catch(done.fail));
+
+
+  test('VL: getGenericFormDetails should return FormPopupDetails', () => {
+    let uuidData : UUIDData = <any>{
+      type : 'VL',
+      serviceId : '6e59c5de-f052-46fa-aa7e-2fca9d674c44',
+      networkId : 'ExtVL 0',
+      networkStoreKey : 'ExtVL 0',
+      popupService : netwokPopupService
+    };
+    let node : ITreeNode = <any>{data : {} };
+
+    jest.spyOn(uuidData.popupService ,'getGenericFormPopupDetails');
+    service.getGenericFormDetails(uuidData, node,true);
+
+    expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledTimes(1);
+    expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledWith(uuidData['serviceId'],
+      uuidData['networkId'],
+      uuidData['networkStoreKey'],
+      node,
+      uuidData,
+      true
+    );
+  });
+
+  test('VFmodule: getGenericFormDetails should return FormPopupDetails', () => {
+    let uuidData : UUIDData = <any>{
+      type : 'VFmodule',
+      serviceId : '6e59c5de-f052-46fa-aa7e-2fca9d674c44',
+      vnfStoreKey : 'VF_vMee 0',
+      vFModuleStoreKey : 'vf_vmee0..VfVmee..vmme_vlc..module-1',
+      popupService : vfModulePopupService
+    };
+    let node : ITreeNode = <any>{data : {}};
+
+    spyOn(uuidData.popupService ,'getGenericFormPopupDetails');
+    service.getGenericFormDetails(uuidData, node,true);
+
+    expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledTimes(1)
+    expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledWith(
+      uuidData['serviceId'],
+      uuidData['vnfStoreKey'],
+      uuidData['vFModuleStoreKey'],
+      node,
+      uuidData,
+      true
+    );
+  });
+
+
+  test('service: getGenericFormDetails should return FormPopupDetails', () => {
+    let uuidData : UUIDData = <any>{
+      type : 'service',
+      serviceId : '6e59c5de-f052-46fa-aa7e-2fca9d674c44',
+      popupService : servicePopupService
+    };
+    let node : ITreeNode = <any>{data : {}};
+
+    jest.spyOn(uuidData.popupService ,'getGenericFormPopupDetails');
+    service.getGenericFormDetails(uuidData, node,true);
+
+    expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledTimes(1);
+    expect(uuidData.popupService.getGenericFormPopupDetails).toHaveBeenCalledWith(
+      uuidData['serviceId'],
+      null,
+      null,
+      node,
+      uuidData,
+      true
+    );
+  });
+
+
+  test('initReduxOnCreateNewService',() => {
+    jest.spyOn(_aaiService, 'getServiceModelById');
+    service.initReduxOnCreateNewService();
+  })
+});
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.ts
new file mode 100644
index 0000000..6636a54
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/generic-form-popup.service.ts
@@ -0,0 +1,93 @@
+import {Injectable} from "@angular/core";
+import {IframeService} from "../../utils/iframe.service";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {ServicePopupService} from "./genericFormServices/service/service.popup.service";
+import {ActivatedRoute} from "@angular/router";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {UUIDData} from "./generic-form-popup.component";
+import {FormPopupDetails} from "../../models/formControlModels/formPopupDetails.model";
+import {Subject} from "rxjs";
+import {deleteAllServiceInstances} from "../../storeUtil/utils/service/service.actions";
+
+@Injectable()
+export class GenericFormPopupService {
+  constructor(private _iframeService : IframeService,
+              private _store: NgRedux<AppState>,
+              private _servicePopupService : ServicePopupService,
+              public _activatedRoute : ActivatedRoute,
+              private _aaiService : AaiService){
+
+  }
+  getGenericFormDetails(uuidData : UUIDData, node : ITreeNode, isUpdateMode : boolean) : FormPopupDetails {
+    switch (uuidData.type){
+      case 'VL' : {
+        return uuidData.popupService.getGenericFormPopupDetails(
+          uuidData['serviceId'],
+          uuidData['networkId'],
+          uuidData['networkStoreKey'],
+          node,
+          uuidData,
+          isUpdateMode
+        );
+      }
+      case 'VFmodule' : {
+        return uuidData.popupService.getGenericFormPopupDetails(
+          uuidData['serviceId'],
+          uuidData['vnfStoreKey'],
+          uuidData['vFModuleStoreKey'],
+          node,
+          uuidData,
+          isUpdateMode
+        );
+      }
+      case 'VF' : {
+        return uuidData.popupService.getGenericFormPopupDetails(
+          uuidData['serviceId'],
+          uuidData['modelName'],
+          uuidData['vnfStoreKey'],
+          node,
+          uuidData,
+          isUpdateMode
+        );
+      }
+      case 'VnfGroup' : {
+        return uuidData.popupService.getGenericFormPopupDetails(
+          uuidData['serviceId'],
+          uuidData['modelName'],
+          uuidData['vnfGroupStoreKey'],
+          node,
+          uuidData,
+          isUpdateMode
+        );
+      }
+      case 'service' : {
+        uuidData['bulkSize'] = this._store.getState().service.serviceInstance[uuidData['serviceId']].bulkSize || 1;
+        return uuidData.popupService.getGenericFormPopupDetails(
+          uuidData['serviceId'],
+          null,
+          null,
+          node,
+          uuidData,
+          isUpdateMode
+        );
+      }
+    }
+  }
+
+  initReduxOnCreateNewService() : Promise<string> {
+    return new Promise((resolve, reject) => {
+      this._activatedRoute
+        .queryParams
+        .subscribe(params => {
+          this._store.dispatch(deleteAllServiceInstances());
+          this._aaiService.getServiceModelById(params.serviceModelId).subscribe(()=>{
+            resolve(params.serviceModelId);
+          });
+      });
+    });
+  }
+
+  refreshModalCheckForGeneralErrorTrigger : Subject<boolean> = new Subject<boolean>();
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.spec.ts
new file mode 100644
index 0000000..521e5fb
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.spec.ts
@@ -0,0 +1,92 @@
+import {NetworkPopupService} from "./network/network.popup.service";
+import {LogService} from "../../../utils/log/log.service";
+import {ReflectiveInjector} from "@angular/core";
+import {NgRedux} from "@angular-redux/store";
+import {BasicControlGenerator} from "../../genericForm/formControlsServices/basic.control.generator";
+import {AaiService} from "../../../services/aaiService/aai.service";
+import {HttpClient} from "@angular/common/http";
+import {NetworkControlGenerator} from "../../genericForm/formControlsServices/networkGenerator/network.control.generator";
+import {GenericFormService} from "../../genericForm/generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {IframeService} from "../../../utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {FormControlModel} from "../../../models/formControlModels/formControl.model";
+import {BasicPopupService} from "./basic.popup.service";
+import {SdcUiServices} from "onap-ui-angular";
+import {FeatureFlagsService} from "../../../services/featureFlag/feature-flags.service";
+import {getTestBed, TestBed} from "@angular/core/testing";
+
+class MockAppStore<T> {}
+
+class MockModalService<T> {}
+
+class MockFeatureFlagsService {}
+
+class MockReduxStore<T> {
+  getState() {
+    return {"global":{"name":null,"flags":{"FLAG_NETWORK_TO_ASYNC_INSTANTIATION":false,"FLAG_SHOW_ASSIGNMENTS":true,"FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS":true,"FLAG_UNASSIGN_SERVICE":true,"FLAG_SHOW_VERIFY_SERVICE":false,"FLAG_COLLECTION_RESOURCE_SUPPORT":true,"FLAG_DUPLICATE_VNF":true,"FLAG_SERVICE_MODEL_CACHE":true,"FLAG_ADVANCED_PORTS_FILTER":true,"CREATE_INSTANCE_TEST":false,"FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD":false,"FLAG_REGION_ID_FROM_REMOTE":true,"FLAG_ASYNC_INSTANTIATION":true,"FLAG_ASYNC_JOBS":true,"EMPTY_DRAWING_BOARD_TEST":false,"FLAG_ADD_MSO_TESTAPI_FIELD":true},"type":"[FLAGS] Update"},"service":{"serviceHierarchy":{"6e59c5de-f052-46fa-aa7e-2fca9d674c44":{"service":{"uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"ComplexService","version":"1.0","toscaModelURL":null,"category":"Emanuel","serviceType":"","serviceRole":"","description":"ComplexService","serviceEcompNaming":"false","instantiationType":"Macro","inputs":{}},"vnfs":{"VF_vMee 0":{"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","description":"VSP_vMee","name":"VF_vMee","version":"2.0","customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","inputs":{},"commands":{},"properties":{"max_instances":10,"min_instances":1,"gpb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_start_port":"0","sctp-a-ipv6-egress_rule_application":"any","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","sctp-a-egress_rule_application":"any","sctp-b-ingress_action":"pass","sctp-b-ingress_rule_protocol":"icmp","ncb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:11:22:EF:AC:DF","fsb_volume_size_0":"320.0","sctp-b-egress_src_addresses":"local","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-ingress_rule_protocol":"icmp","sctp-b-egress-src_start_port":"0.0","sctp-a-egress_src_addresses":"local","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-a-egress-src_start_port":"0.0","sctp-a-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","gpb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-egress_dst_subnet_prefix_len":"0.0","Internal2_net_cidr":"10.0.0.10","sctp-a-ingress-dst_start_port":"0.0","sctp-a-egress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-ipv6-egress_rule_application":"any","sctp-b-egress_action":"pass","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","fsb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-a-ipv6-ingress-src_start_port":"0.0","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"10.0.0.10","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","sctp-a-ipv6-ingress_rule_application":"any","ecomp_generated_naming":"false","sctp-a-IPv6_ethertype":"IPv6","vlc2_Internal1_mac":"00:11:22:EF:AC:DF","vlc_st_virtualization_type":"virtual-machine","sctp-b-ingress-dst_start_port":"0.0","sctp-b-ingress-dst_end_port":"65535.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","int2_sec_group_name":"int2-sec-group","vlc_flavor_name":"nd.c16r64d1","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress-dst_start_port":"0","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_shared":"false","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","sctp-a-ipv6-egress_dst_end_port":"65535","Internal2_forwarding_mode":"l2","fsb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-ingress_dst_addresses":"local","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_sctp_a":"left","vlc_st_interface_type_sctp_b":"right","sctp-a-src_subnet_prefix_v6":"::","vlc_st_version":"2","sctp-b-egress_ethertype":"IPv4","sctp-a-ingress_rule_application":"any","gpb1_Internal2_mac":"00:11:22:EF:AC:DF","instance_ip_family_v6":"v6","sctp-a-ipv6-egress_src_start_port":"0","sctp-b-ingress-src_start_port":"0.0","sctp-b-ingress_dst_addresses":"local","fsb1_Internal1_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_oam":"management","multi_stage_design":"true","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"10.0.0.10","sctp-a-ipv6-ingress-dst_end_port":"65535","sctp-b-ipv6-egress-dst_start_port":"0","Internal1_net_gateway":"10.0.0.10","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-a-egress_rule_protocol":"icmp","sctp-b-ipv6-egress_action":"pass","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-a-ingress_action":"pass","sctp-b-egress_rule_protocol":"icmp","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","sctp-b-ipv6-ingress-dst_start_port":"0","vlc2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_availability_zone":"true","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","Internal1_allow_transit":"true","gpb_flavor_name":"nv.c20r64d1","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-ingress_ethertype":"IPv4","vlc1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-egress_rule_application":"any","sctp-b-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"},"type":"VF","modelCustomizationName":"VF_vMee 0","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":true},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{},"commands":{},"properties":{"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{"Port Mirroring Configuration By Policy 0":{"uuid":"b4398538-e89d-4f13-b33d-ca323434ba50","invariantUuid":"6ef0ca40-f366-4897-951f-abd65d25f6f7","description":"A port mirroring configuration by policy object","name":"Port Mirroring Configuration By Policy","version":"27.0","customizationUuid":"3c3b7b8d-8669-4b3b-8664-61970041fad2","inputs":{},"commands":{},"properties":{},"type":"Configuration","modelCustomizationName":"Port Mirroring Configuration By Policy 0","sourceNodes":[],"collectorNodes":null,"configurationByPolicy":false}},"serviceProxies":{},"vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":true},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"pnfs":{}},"6b528779-44a3-4472-bdff-9cd15ec93450":{"service":{"uuid":"6b528779-44a3-4472-bdff-9cd15ec93450","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"action-data","version":"1.0","toscaModelURL":null,"category":"","serviceType":"","serviceRole":"","description":"","serviceEcompNaming":"false","instantiationType":"A-La-Carte","inputs":{"2017488_adiodvpe0_ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"}}},"vnfs":{"2017-388_ADIOD-vPE 1":{"uuid":"0903e1c0-8e03-4936-b5c2-260653b96413","invariantUuid":"00beb8f9-6d39-452f-816d-c709b9cbb87d","description":"Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM","name":"2017-388_ADIOD-vPE","version":"1.0","customizationUuid":"280dec31-f16d-488b-9668-4aae55d6648a","inputs":{"vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"17.2"},"bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"Gbps"},"bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"10"},"AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"ATLMY8GA"},"ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"},"vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"mtnj309me6"}},"commands":{"vnf_config_template_version":{"displayName":"vnf_config_template_version","command":"get_input","inputName":"2017488_adiodvpe0_vnf_config_template_version"},"bandwidth_units":{"displayName":"bandwidth_units","command":"get_input","inputName":"adiodvpe0_bandwidth_units"},"bandwidth":{"displayName":"bandwidth","command":"get_input","inputName":"adiodvpe0_bandwidth"},"AIC_CLLI":{"displayName":"AIC_CLLI","command":"get_input","inputName":"2017488_adiodvpe0_AIC_CLLI"},"ASN":{"displayName":"ASN","command":"get_input","inputName":"2017488_adiodvpe0_ASN"},"vnf_instance_name":{"displayName":"vnf_instance_name","command":"get_input","inputName":"2017488_adiodvpe0_vnf_instance_name"}},"properties":{"vmxvre_retype":"RE-VMX","vnf_config_template_version":"get_input:2017488_adiodvpe0_vnf_config_template_version","sriov44_net_id":"48d399b3-11ee-48a8-94d2-f0ea94d6be8d","int_ctl_net_id":"2f323477-6936-4d01-ac53-d849430281d9","vmxvpfe_sriov41_0_port_mac":"00:11:22:EF:AC:DF","int_ctl_net_name":"VMX-INTXI","vmx_int_ctl_prefix":"10.0.0.10","sriov43_net_id":"da349ca1-6de9-4548-be88-2d88e99bfef5","sriov42_net_id":"760669ba-013d-4d9b-b0e7-4151fe2e6279","sriov41_net_id":"25ad52d5-c165-40f8-b3b0-ddfc2373280a","nf_type":"vPE","vmxvpfe_int_ctl_ip_1":"10.0.0.10","is_AVPN_service":"false","vmx_RSG_name":"vREXI-affinity","vmx_int_ctl_forwarding":"l2","vmxvre_oam_ip_0":"10.0.0.10","vmxvpfe_sriov44_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_sriov41_0_port_vlanstrip":"false","vmxvpfe_sriov42_0_port_vlanfilter":"4001","vmxvpfe_sriov44_0_port_unknownunicastallow":"true","vmxvre_image_name_0":"VRE-ENGINE_17.2-S2.1.qcow2","vmxvre_instance":"0","vmxvpfe_sriov43_0_port_mac":"00:11:22:EF:AC:DF","vmxvre_flavor_name":"ns.c1r16d32.v5","vmxvpfe_volume_size_0":"40.0","vmxvpfe_sriov43_0_port_vlanfilter":"4001","nf_naming":"{ecomp_generated_naming=false}","nf_naming_code":"Navneet","vmxvre_name_0":"vREXI","vmxvpfe_sriov42_0_port_vlanstrip":"false","vmxvpfe_volume_name_0":"vPFEXI_FBVolume","vmx_RSG_id":"bd89a33c-13c3-4a04-8fde-1a57eb123141","vmxvpfe_image_name_0":"VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2","vmxvpfe_sriov43_0_port_unknownunicastallow":"true","vmxvpfe_sriov44_0_port_unknownmulticastallow":"true","vmxvre_console":"vidconsole","vmxvpfe_sriov44_0_port_vlanfilter":"4001","vmxvpfe_sriov42_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_volume_id_0":"47cede15-da2f-4397-a101-aa683220aff3","vmxvpfe_sriov42_0_port_unknownmulticastallow":"true","vmxvpfe_sriov44_0_port_vlanstrip":"false","vf_module_id":"123","nf_function":"JAI","vmxvpfe_sriov43_0_port_unknownmulticastallow":"true","vmxvre_int_ctl_ip_0":"10.0.0.10","ecomp_generated_naming":"false","AIC_CLLI":"get_input:2017488_adiodvpe0_AIC_CLLI","vnf_name":"mtnj309me6vre","vmxvpfe_sriov41_0_port_unknownunicastallow":"true","vmxvre_volume_type_1":"HITACHI","vmxvpfe_sriov44_0_port_broadcastallow":"true","vmxvre_volume_type_0":"HITACHI","vmxvpfe_volume_type_0":"HITACHI","vmxvpfe_sriov43_0_port_broadcastallow":"true","bandwidth_units":"get_input:adiodvpe0_bandwidth_units","vnf_id":"123","vmxvre_oam_prefix":"24","availability_zone_0":"mtpocfo-kvm-az01","ASN":"get_input:2017488_adiodvpe0_ASN","vmxvre_chassis_i2cid":"161","vmxvpfe_name_0":"vPFEXI","bandwidth":"get_input:adiodvpe0_bandwidth","availability_zone_max_count":"1","vmxvre_volume_size_0":"45.0","vmxvre_volume_size_1":"50.0","vmxvpfe_sriov42_0_port_broadcastallow":"true","vmxvre_oam_gateway":"10.0.0.10","vmxvre_volume_name_1":"vREXI_FAVolume","vmxvre_ore_present":"0","vmxvre_volume_name_0":"vREXI_FBVolume","vmxvre_type":"0","vnf_instance_name":"get_input:2017488_adiodvpe0_vnf_instance_name","vmxvpfe_sriov41_0_port_unknownmulticastallow":"true","oam_net_id":"b95eeb1d-d55d-4827-abb4-8ebb94941429","vmx_int_ctl_len":"24","vmxvpfe_sriov43_0_port_vlanstrip":"false","vmxvpfe_sriov41_0_port_broadcastallow":"true","vmxvre_volume_id_1":"6e86797e-03cd-4fdc-ba72-2957119c746d","vmxvpfe_sriov41_0_port_vlanfilter":"4001","nf_role":"Testing","vmxvre_volume_id_0":"f4eacb79-f687-4e9d-b760-21847c8bb15a","vmxvpfe_sriov42_0_port_unknownunicastallow":"true","vmxvpfe_flavor_name":"ns.c20r16d25.v5"},"type":"VF","modelCustomizationName":"2017-388_ADIOD-vPE 1","vfModules":{},"volumeGroups":{},"vfcInstanceGroups":{}},"2017-388_ADIOD-vPE 0":{"uuid":"afacccf6-397d-45d6-b5ae-94c39734b168","invariantUuid":"72e465fe-71b1-4e7b-b5ed-9496118ff7a8","description":"Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM","name":"2017-388_ADIOD-vPE","version":"4.0","customizationUuid":"b3c76f73-eeb5-4fb6-9d31-72a889f1811c","inputs":{"vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"17.2"},"bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"Gbps"},"bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"10"},"AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"ATLMY8GA"},"ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"},"vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"mtnj309me6"}},"commands":{"vnf_config_template_version":{"displayName":"vnf_config_template_version","command":"get_input","inputName":"2017488_adiodvpe0_vnf_config_template_version"},"bandwidth_units":{"displayName":"bandwidth_units","command":"get_input","inputName":"adiodvpe0_bandwidth_units"},"bandwidth":{"displayName":"bandwidth","command":"get_input","inputName":"adiodvpe0_bandwidth"},"AIC_CLLI":{"displayName":"AIC_CLLI","command":"get_input","inputName":"2017488_adiodvpe0_AIC_CLLI"},"ASN":{"displayName":"ASN","command":"get_input","inputName":"2017488_adiodvpe0_ASN"},"vnf_instance_name":{"displayName":"vnf_instance_name","command":"get_input","inputName":"2017488_adiodvpe0_vnf_instance_name"}},"properties":{"vmxvre_retype":"RE-VMX","vnf_config_template_version":"get_input:2017488_adiodvpe0_vnf_config_template_version","sriov44_net_id":"48d399b3-11ee-48a8-94d2-f0ea94d6be8d","int_ctl_net_id":"2f323477-6936-4d01-ac53-d849430281d9","vmxvpfe_sriov41_0_port_mac":"00:11:22:EF:AC:DF","int_ctl_net_name":"VMX-INTXI","vmx_int_ctl_prefix":"10.0.0.10","sriov43_net_id":"da349ca1-6de9-4548-be88-2d88e99bfef5","sriov42_net_id":"760669ba-013d-4d9b-b0e7-4151fe2e6279","sriov41_net_id":"25ad52d5-c165-40f8-b3b0-ddfc2373280a","nf_type":"vPE","vmxvpfe_int_ctl_ip_1":"10.0.0.10","is_AVPN_service":"false","vmx_RSG_name":"vREXI-affinity","vmx_int_ctl_forwarding":"l2","vmxvre_oam_ip_0":"10.0.0.10","vmxvpfe_sriov44_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_sriov41_0_port_vlanstrip":"false","vmxvpfe_sriov42_0_port_vlanfilter":"4001","vmxvpfe_sriov44_0_port_unknownunicastallow":"true","vmxvre_image_name_0":"VRE-ENGINE_17.2-S2.1.qcow2","vmxvre_instance":"0","vmxvpfe_sriov43_0_port_mac":"00:11:22:EF:AC:DF","vmxvre_flavor_name":"ns.c1r16d32.v5","vmxvpfe_volume_size_0":"40.0","vmxvpfe_sriov43_0_port_vlanfilter":"4001","nf_naming":"{ecomp_generated_naming=false}","nf_naming_code":"Navneet","vmxvre_name_0":"vREXI","vmxvpfe_sriov42_0_port_vlanstrip":"false","vmxvpfe_volume_name_0":"vPFEXI_FBVolume","vmx_RSG_id":"bd89a33c-13c3-4a04-8fde-1a57eb123141","vmxvpfe_image_name_0":"VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2","vmxvpfe_sriov43_0_port_unknownunicastallow":"true","vmxvpfe_sriov44_0_port_unknownmulticastallow":"true","vmxvre_console":"vidconsole","vmxvpfe_sriov44_0_port_vlanfilter":"4001","vmxvpfe_sriov42_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_volume_id_0":"47cede15-da2f-4397-a101-aa683220aff3","vmxvpfe_sriov42_0_port_unknownmulticastallow":"true","min_instances":"1","vmxvpfe_sriov44_0_port_vlanstrip":"false","vf_module_id":"123","nf_function":"JAI","vmxvpfe_sriov43_0_port_unknownmulticastallow":"true","vmxvre_int_ctl_ip_0":"10.0.0.10","ecomp_generated_naming":"false","AIC_CLLI":"get_input:2017488_adiodvpe0_AIC_CLLI","vnf_name":"mtnj309me6vre","vmxvpfe_sriov41_0_port_unknownunicastallow":"true","vmxvre_volume_type_1":"HITACHI","vmxvpfe_sriov44_0_port_broadcastallow":"true","vmxvre_volume_type_0":"HITACHI","vmxvpfe_volume_type_0":"HITACHI","vmxvpfe_sriov43_0_port_broadcastallow":"true","bandwidth_units":"get_input:adiodvpe0_bandwidth_units","vnf_id":"123","vmxvre_oam_prefix":"24","availability_zone_0":"mtpocfo-kvm-az01","ASN":"get_input:2017488_adiodvpe0_ASN","vmxvre_chassis_i2cid":"161","vmxvpfe_name_0":"vPFEXI","bandwidth":"get_input:adiodvpe0_bandwidth","availability_zone_max_count":"1","vmxvre_volume_size_0":"45.0","vmxvre_volume_size_1":"50.0","vmxvpfe_sriov42_0_port_broadcastallow":"true","vmxvre_oam_gateway":"10.0.0.10","vmxvre_volume_name_1":"vREXI_FAVolume","vmxvre_ore_present":"0","vmxvre_volume_name_0":"vREXI_FBVolume","vmxvre_type":"0","vnf_instance_name":"get_input:2017488_adiodvpe0_vnf_instance_name","vmxvpfe_sriov41_0_port_unknownmulticastallow":"true","oam_net_id":"b95eeb1d-d55d-4827-abb4-8ebb94941429","vmx_int_ctl_len":"24","vmxvpfe_sriov43_0_port_vlanstrip":"false","vmxvpfe_sriov41_0_port_broadcastallow":"true","vmxvre_volume_id_1":"6e86797e-03cd-4fdc-ba72-2957119c746d","vmxvpfe_sriov41_0_port_vlanfilter":"4001","nf_role":"Testing","vmxvre_volume_id_0":"f4eacb79-f687-4e9d-b760-21847c8bb15a","vmxvpfe_sriov42_0_port_unknownunicastallow":"true","vmxvpfe_flavor_name":"ns.c20r16d25.v5"},"type":"VF","modelCustomizationName":"2017-388_ADIOD-vPE 0","vfModules":{},"volumeGroups":{},"vfcInstanceGroups":{}},"2017-488_ADIOD-vPE 0":{"uuid":"69e09f68-8b63-4cc9-b9ff-860960b5db09","invariantUuid":"72e465fe-71b1-4e7b-b5ed-9496118ff7a8","description":"Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM","name":"2017-488_ADIOD-vPE","version":"5.0","customizationUuid":"1da7b585-5e61-4993-b95e-8e6606c81e45","inputs":{"vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"17.2"},"bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"Gbps"},"bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"10"},"AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"ATLMY8GA"},"ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"},"vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"mtnj309me6"}},"commands":{"vnf_config_template_version":{"displayName":"vnf_config_template_version","command":"get_input","inputName":"2017488_adiodvpe0_vnf_config_template_version"},"bandwidth_units":{"displayName":"bandwidth_units","command":"get_input","inputName":"adiodvpe0_bandwidth_units"},"bandwidth":{"displayName":"bandwidth","command":"get_input","inputName":"adiodvpe0_bandwidth"},"AIC_CLLI":{"displayName":"AIC_CLLI","command":"get_input","inputName":"2017488_adiodvpe0_AIC_CLLI"},"ASN":{"displayName":"ASN","command":"get_input","inputName":"2017488_adiodvpe0_ASN"},"vnf_instance_name":{"displayName":"vnf_instance_name","command":"get_input","inputName":"2017488_adiodvpe0_vnf_instance_name"}},"properties":{"vmxvre_retype":"RE-VMX","vnf_config_template_version":"get_input:2017488_adiodvpe0_vnf_config_template_version","sriov44_net_id":"48d399b3-11ee-48a8-94d2-f0ea94d6be8d","int_ctl_net_id":"2f323477-6936-4d01-ac53-d849430281d9","vmxvpfe_sriov41_0_port_mac":"00:11:22:EF:AC:DF","int_ctl_net_name":"VMX-INTXI","vmx_int_ctl_prefix":"10.0.0.10","sriov43_net_id":"da349ca1-6de9-4548-be88-2d88e99bfef5","sriov42_net_id":"760669ba-013d-4d9b-b0e7-4151fe2e6279","sriov41_net_id":"25ad52d5-c165-40f8-b3b0-ddfc2373280a","nf_type":"vPE","vmxvpfe_int_ctl_ip_1":"10.0.0.10","is_AVPN_service":"false","vmx_RSG_name":"vREXI-affinity","vmx_int_ctl_forwarding":"l2","vmxvre_oam_ip_0":"10.0.0.10","vmxvpfe_sriov44_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_sriov41_0_port_vlanstrip":"false","vmxvpfe_sriov42_0_port_vlanfilter":"4001","vmxvpfe_sriov44_0_port_unknownunicastallow":"true","vmxvre_image_name_0":"VRE-ENGINE_17.2-S2.1.qcow2","vmxvre_instance":"0","vmxvpfe_sriov43_0_port_mac":"00:11:22:EF:AC:DF","vmxvre_flavor_name":"ns.c1r16d32.v5","vmxvpfe_volume_size_0":"40.0","vmxvpfe_sriov43_0_port_vlanfilter":"4001","nf_naming":"{ecomp_generated_naming=false}","nf_naming_code":"Navneet","vmxvre_name_0":"vREXI","vmxvpfe_sriov42_0_port_vlanstrip":"false","vmxvpfe_volume_name_0":"vPFEXI_FBVolume","max_instances":"3","vmx_RSG_id":"bd89a33c-13c3-4a04-8fde-1a57eb123141","vmxvpfe_image_name_0":"VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2","vmxvpfe_sriov43_0_port_unknownunicastallow":"true","vmxvpfe_sriov44_0_port_unknownmulticastallow":"true","vmxvre_console":"vidconsole","vmxvpfe_sriov44_0_port_vlanfilter":"4001","vmxvpfe_sriov42_0_port_mac":"00:11:22:EF:AC:DF","vmxvpfe_volume_id_0":"47cede15-da2f-4397-a101-aa683220aff3","vmxvpfe_sriov42_0_port_unknownmulticastallow":"true","min_instances":"1","vmxvpfe_sriov44_0_port_vlanstrip":"false","vf_module_id":"123","nf_function":"JAI","vmxvpfe_sriov43_0_port_unknownmulticastallow":"true","vmxvre_int_ctl_ip_0":"10.0.0.10","ecomp_generated_naming":"false","AIC_CLLI":"get_input:2017488_adiodvpe0_AIC_CLLI","vnf_name":"mtnj309me6vre","vmxvpfe_sriov41_0_port_unknownunicastallow":"true","vmxvre_volume_type_1":"HITACHI","vmxvpfe_sriov44_0_port_broadcastallow":"true","vmxvre_volume_type_0":"HITACHI","vmxvpfe_volume_type_0":"HITACHI","vmxvpfe_sriov43_0_port_broadcastallow":"true","bandwidth_units":"get_input:adiodvpe0_bandwidth_units","vnf_id":"123","vmxvre_oam_prefix":"24","availability_zone_0":"mtpocfo-kvm-az01","ASN":"get_input:2017488_adiodvpe0_ASN","vmxvre_chassis_i2cid":"161","vmxvpfe_name_0":"vPFEXI","bandwidth":"get_input:adiodvpe0_bandwidth","availability_zone_max_count":"1","vmxvre_volume_size_0":"45.0","vmxvre_volume_size_1":"50.0","vmxvpfe_sriov42_0_port_broadcastallow":"true","vmxvre_oam_gateway":"10.0.0.10","vmxvre_volume_name_1":"vREXI_FAVolume","vmxvre_ore_present":"0","vmxvre_volume_name_0":"vREXI_FBVolume","vmxvre_type":"0","vnf_instance_name":"get_input:2017488_adiodvpe0_vnf_instance_name","vmxvpfe_sriov41_0_port_unknownmulticastallow":"true","oam_net_id":"b95eeb1d-d55d-4827-abb4-8ebb94941429","vmx_int_ctl_len":"24","vmxvpfe_sriov43_0_port_vlanstrip":"false","vmxvpfe_sriov41_0_port_broadcastallow":"true","vmxvre_volume_id_1":"6e86797e-03cd-4fdc-ba72-2957119c746d","vmxvpfe_sriov41_0_port_vlanfilter":"4001","nf_role":"Testing","vmxvre_volume_id_0":"f4eacb79-f687-4e9d-b760-21847c8bb15a","vmxvpfe_sriov42_0_port_unknownunicastallow":"true","vmxvpfe_flavor_name":"ns.c20r16d25.v5"},"type":"VF","modelCustomizationName":"2017-488_ADIOD-vPE 0","vfModules":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","invariantUuid":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","customizationUuid":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","description":null,"name":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vRE_BV"},"inputs":{"adiodvpe0_bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth"},"constraints":null,"required":true,"default":"10"},"2017488_adiodvpe0_vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_instance_name"},"constraints":null,"required":true,"default":"mtnj309me6"},"2017488_adiodvpe0_vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_config_template_version"},"constraints":null,"required":true,"default":"17.2"},"2017488_adiodvpe0_AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"AIC_CLLI"},"constraints":null,"required":true,"default":"ATLMY8GA"},"adiodvpe0_bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth_units"},"constraints":null,"required":true,"default":"Gbps"}},"volumeGroupAllowed":true},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0":{"uuid":"f8360508-3f17-4414-a2ed-6bc71161e8db","invariantUuid":"b34833bb-6aa9-4ad6-a831-70b06367a091","customizationUuid":"a55961b2-2065-4ab0-a5b7-2fcee1c227e3","description":null,"name":"2017488AdiodVpe..ADIOD_base_vPE_BV..module-0","version":"5","modelCustomizationName":"2017488AdiodVpe..ADIOD_base_vPE_BV..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"ADIOD_base_vPE_BV"},"inputs":{},"volumeGroupAllowed":false},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2":{"uuid":"0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a","invariantUuid":"eff8cc59-53a1-4101-aed7-8cf24ecf8339","customizationUuid":"3cd946bb-50e0-40d8-96d3-c9023520b557","description":null,"name":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vPFE_BV"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","invariantUuid":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","customizationUuid":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","description":null,"name":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vRE_BV"},"inputs":{"adiodvpe0_bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth"},"constraints":null,"required":true,"default":"10"},"2017488_adiodvpe0_vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_instance_name"},"constraints":null,"required":true,"default":"mtnj309me6"},"2017488_adiodvpe0_vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_config_template_version"},"constraints":null,"required":true,"default":"17.2"},"2017488_adiodvpe0_AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"AIC_CLLI"},"constraints":null,"required":true,"default":"ATLMY8GA"},"adiodvpe0_bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth_units"},"constraints":null,"required":true,"default":"Gbps"}}},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2":{"uuid":"0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a","invariantUuid":"eff8cc59-53a1-4101-aed7-8cf24ecf8339","customizationUuid":"3cd946bb-50e0-40d8-96d3-c9023520b557","description":null,"name":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vPFE_BV"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{"vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"17.2"},"bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"Gbps"},"bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"10"},"AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"ATLMY8GA"},"ASN":{"type":"string","description":"AV/PE","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"AV_vPE"},"vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":null,"constraints":[],"required":true,"default":"mtnj309me6"}},"commands":{},"properties":{"min_instances":1,"max_instances":10,"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{},"fabricConfigurations":{},"serviceProxies":{},"vfModules":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","invariantUuid":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","customizationUuid":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","description":null,"name":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vRE_BV"},"inputs":{"adiodvpe0_bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth"},"constraints":null,"required":true,"default":"10"},"2017488_adiodvpe0_vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_instance_name"},"constraints":null,"required":true,"default":"mtnj309me6"},"2017488_adiodvpe0_vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_config_template_version"},"constraints":null,"required":true,"default":"17.2"},"2017488_adiodvpe0_AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"AIC_CLLI"},"constraints":null,"required":true,"default":"ATLMY8GA"},"adiodvpe0_bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth_units"},"constraints":null,"required":true,"default":"Gbps"}},"volumeGroupAllowed":true},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0":{"uuid":"f8360508-3f17-4414-a2ed-6bc71161e8db","invariantUuid":"b34833bb-6aa9-4ad6-a831-70b06367a091","customizationUuid":"a55961b2-2065-4ab0-a5b7-2fcee1c227e3","description":null,"name":"2017488AdiodVpe..ADIOD_base_vPE_BV..module-0","version":"5","modelCustomizationName":"2017488AdiodVpe..ADIOD_base_vPE_BV..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"ADIOD_base_vPE_BV"},"inputs":{},"volumeGroupAllowed":false},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2":{"uuid":"0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a","invariantUuid":"eff8cc59-53a1-4101-aed7-8cf24ecf8339","customizationUuid":"3cd946bb-50e0-40d8-96d3-c9023520b557","description":null,"name":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vPFE_BV"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","invariantUuid":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","customizationUuid":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","description":null,"name":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vRE_BV"},"inputs":{"adiodvpe0_bandwidth":{"type":"string","description":"Requested VPE bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth"},"constraints":null,"required":true,"default":"10"},"2017488_adiodvpe0_vnf_instance_name":{"type":"string","description":"The hostname assigned to the vpe.","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_instance_name"},"constraints":null,"required":true,"default":"mtnj309me6"},"2017488_adiodvpe0_vnf_config_template_version":{"type":"string","description":"VPE Software Version","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"vnf_config_template_version"},"constraints":null,"required":true,"default":"17.2"},"2017488_adiodvpe0_AIC_CLLI":{"type":"string","description":"AIC Site CLLI","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"AIC_CLLI"},"constraints":null,"required":true,"default":"ATLMY8GA"},"adiodvpe0_bandwidth_units":{"type":"string","description":"Units of bandwidth","entry_schema":null,"inputProperties":{"sourceType":"HEAT","vfModuleLabel":"ADIOD_vRE_BV","paramName":"bandwidth_units"},"constraints":null,"required":true,"default":"Gbps"}}},"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2":{"uuid":"0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a","invariantUuid":"eff8cc59-53a1-4101-aed7-8cf24ecf8339","customizationUuid":"3cd946bb-50e0-40d8-96d3-c9023520b557","description":null,"name":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","version":"6","modelCustomizationName":"2017488AdiodVpe..ADIOD_vPFE_BV..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"ADIOD_vPFE_BV"},"inputs":{}}},"pnfs":{}}},"serviceInstance":{"6e59c5de-f052-46fa-aa7e-2fca9d674c44":{"vnfs":{"VF_vMee 0":{"rollbackOnFailure":"true","vfModules":{"vf_vmee0..VfVmee..base_vmme..module-0":{"vf_vmee0..VfVmee..base_vmme..module-0vmvzo":{"isMissingData":false,"sdncPreReload":null,"modelInfo":{"modelType":"VFmodule","modelInvariantId":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","modelVersionId":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","modelName":"VfVmee..base_vmme..module-0","modelVersion":"2","modelCustomizationId":"f8c040f1-7e51-4a11-aca8-acf256cfd861","modelCustomizationName":"VfVmee..base_vmme..module-0"},"instanceParams":[{}],"trackById":"wmtm6sy2uj"}}},"isMissingData":true,"originalName":"VF_vMee 0","vnfStoreKey":"VF_vMee 0","trackById":"p3wk448m5do","uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","productFamilyId":"36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e","lcpCloudRegionId":null,"tenantId":null,"lineOfBusiness":null,"platformName":null,"modelInfo":{"modelType":"VF","modelInvariantId":"4160458e-f648-4b30-a176-43881ffffe9e","modelVersionId":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","modelName":"VF_vMee","modelVersion":"2.0","modelCustomizationName":"VF_vMee 0"}}},"networks":{},"instanceParams":[{}],"validationCounter":1,"existingNames":{},"existingVNFCounterMap":{"d6557200-ecf2-4641-8094-5393ae3aae60":1},"globalSubscriberId":"e433710f-9217-458d-a79d-1c7aff376d89","subscriptionServiceType":"TYLER SILVIA","owningEntityId":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","productFamilyId":"36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e","lcpCloudRegionId":"hvf6","tenantId":"229bcdc6eaeb4ca59d55221141d01f8e","aicZoneId":"JAG1","projectName":"x1","rollbackOnFailure":"true","bulkSize":1,"modelInfo":{"modelInvariantId":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","modelVersionId":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","modelName":"ComplexService","modelVersion":"1.0","uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44"},"isALaCarte":false,"name":"ComplexService","version":"1.0","description":"ComplexService","category":"Emanuel","uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","serviceType":"","serviceRole":"","isEcompGeneratedNaming":true,"isMultiStepDesign":false},"6b528779-44a3-4472-bdff-9cd15ec93450":{"networks":{"ExtVL 0":{"rollbackOnFailure":"true","isMissingData":false,"originalName":"ExtVL 0","networkStoreKey":"ExtVL 0","trackById":"sf3zth68xjf","productFamilyId":"ebc3bc3d-62fd-4a3f-a037-f619df4ff034","lcpCloudRegionId":"hvf6","tenantId":"229bcdc6eaeb4ca59d55221141d01f8e","platformName":"xxx1","lineOfBusiness":"ONAP","instanceParams":[{}],"modelInfo":{"modelInvariantId":"379f816b-a7aa-422f-be30-17114ff50b7c","modelVersionId":"ddc3f20c-08b5-40fd-af72-c6d14636b986","modelName":"ExtVL","modelVersion":"37.0","modelCustomizationId":"94fdd893-4a36-4d70-b16a-ec29c54c184f","modelCustomizationName":"ExtVL 0","uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"ExtVL 0:0001":{"rollbackOnFailure":"true","isMissingData":false,"originalName":"ExtVL 0","networkStoreKey":"ExtVL 0","trackById":"2mdxioxca9h","productFamilyId":"ebc3bc3d-62fd-4a3f-a037-f619df4ff034","lcpCloudRegionId":"hvf6","tenantId":"229bcdc6eaeb4ca59d55221141d01f8e","platformName":"xxx1","lineOfBusiness":"ONAP","instanceParams":[{}],"modelInfo":{"modelInvariantId":"379f816b-a7aa-422f-be30-17114ff50b7c","modelVersionId":"ddc3f20c-08b5-40fd-af72-c6d14636b986","modelName":"ExtVL","modelVersion":"37.0","modelCustomizationId":"94fdd893-4a36-4d70-b16a-ec29c54c184f","modelCustomizationName":"ExtVL 0","uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"ExtVL 0_1":{"rollbackOnFailure":"true","isMissingData":false,"originalName":"ExtVL 0","networkStoreKey":"ExtVL 0_1","trackById":"z7vd1gmpbs","instanceName":"ExtVL","productFamilyId":"17cc1042-527b-11e6-beb8-9e71128cae77","lcpCloudRegionId":"hvf6","tenantId":"229bcdc6eaeb4ca59d55221141d01f8e","platformName":"xxx1","lineOfBusiness":"zzz1","instanceParams":[{"vnf_config_template_version":"17.2","bandwidth_units":"Gbps","bandwidth":"10","AIC_CLLI":"ATLMY8GA","ASN":"AV_vPE","vnf_instance_name":"yoav"}],"modelInfo":{"modelInvariantId":"379f816b-a7aa-422f-be30-17114ff50b7c","modelVersionId":"ddc3f20c-08b5-40fd-af72-c6d14636b986","modelName":"ExtVL","modelVersion":"37.0","modelCustomizationId":"94fdd893-4a36-4d70-b16a-ec29c54c184f","modelCustomizationName":"ExtVL 0","uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"},"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986"}},"vnfs":{"2017-488_ADIOD-vPE 0":{"rollbackOnFailure":"true","vfModules":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1":{"2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi":{"instanceName":"yoav","volumeGroupName":"123","modelInfo":{"modelInvariantId":"7253ff5c-97f0-4b8b-937c-77aeb4d79aa1","modelVersionId":"25284168-24bb-4698-8cb4-3f509146eca5","modelName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","modelVersion":"6","modelCustomizationId":"f7e7c365-60cf-49a9-9ebf-a1aa11b9d401","modelCustomizationName":"2017488AdiodVpe..ADIOD_vRE_BV..module-1","uuid":"25284168-24bb-4698-8cb4-3f509146eca5"},"uuid":"25284168-24bb-4698-8cb4-3f509146eca5","isMissingData":false,"instanceParams":[{"adiodvpe0_bandwidth":"10","2017488_adiodvpe0_vnf_instance_name":"mtnj309me6","2017488_adiodvpe0_vnf_config_template_version":"17.2","2017488_adiodvpe0_AIC_CLLI":"ATLMY8GA","adiodvpe0_bandwidth_units":"Gbps"}]}}},"isMissingData":false,"originalName":"2017-488_ADIOD-vPE 0","vnfStoreKey":"2017-488_ADIOD-vPE 0","trackById":"o65b26t2thj","instanceName":"2017488_ADIODvPE","productFamilyId":"ebc3bc3d-62fd-4a3f-a037-f619df4ff034","lcpCloudRegionId":"hvf6","tenantId":"bae71557c5bb4d5aac6743a4e5f1d054","platformName":"platform","lineOfBusiness":"ONAP","instanceParams":[{}],"modelInfo":{"modelInvariantId":"72e465fe-71b1-4e7b-b5ed-9496118ff7a8","modelVersionId":"69e09f68-8b63-4cc9-b9ff-860960b5db09","modelName":"2017-488_ADIOD-vPE","modelVersion":"5.0","modelCustomizationId":"1da7b585-5e61-4993-b95e-8e6606c81e45","modelCustomizationName":"2017-488_ADIOD-vPE 0","uuid":"69e09f68-8b63-4cc9-b9ff-860960b5db09"},"uuid":"69e09f68-8b63-4cc9-b9ff-860960b5db09"}},"instanceParams":[{"2017488_adiodvpe0_ASN":"AV_vPE"}],"validationCounter":0,"existingNames":{"123":"","instancename":"","yoav":"","extvl":""},"existingVNFCounterMap":{"69e09f68-8b63-4cc9-b9ff-860960b5db09":1},"existingNetworksCounterMap":{"ddc3f20c-08b5-40fd-af72-c6d14636b986":3},"instanceName":"InstanceName","globalSubscriberId":"e433710f-9217-458d-a79d-1c7aff376d89","subscriptionServiceType":"TYLER SILVIA","owningEntityId":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","productFamilyId":"17cc1042-527b-11e6-beb8-9e71128cae77","lcpCloudRegionId":"JANET25","tenantId":"092eb9e8e4b7412e8787dd091bc58e86","aicZoneId":"JAG1","projectName":null,"rollbackOnFailure":"true","aicZoneName":"YUDFJULP-JAG1","owningEntityName":"WayneHolland","testApi":"GR_API","isEcompGeneratedNaming":false,"tenantName":"USP-SIP-IC-24335-T-01","bulkSize":1,"modelInfo":{"modelInvariantId":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","modelVersionId":"6b528779-44a3-4472-bdff-9cd15ec93450","modelName":"action-data","modelVersion":"1.0","uuid":"6b528779-44a3-4472-bdff-9cd15ec93450"},"isALaCarte":false,"name":"action-data","version":"1.0","description":"","category":"","uuid":"6b528779-44a3-4472-bdff-9cd15ec93450","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","serviceType":"","serviceRole":"","isMultiStepDesign":false}},"lcpRegionsAndTenants":{"lcpRegionList":[{"id":"JANET25","name":"JANET25","isPermitted":true},{"id":"hvf6","name":"hvf6","isPermitted":true}],"lcpRegionsTenantsMap":{"JANET25":[{"id":"092eb9e8e4b7412e8787dd091bc58e86","name":"USP-SIP-IC-24335-T-01","isPermitted":true}],"hvf6":[{"id":"bae71557c5bb4d5aac6743a4e5f1d054","name":"AIN Web Tool-15-D-testalexandria","isPermitted":true},{"id":"229bcdc6eaeb4ca59d55221141d01f8e","name":"AIN Web Tool-15-D-STTest2","isPermitted":true},{"id":"1178612d2b394be4834ad77f567c0af2","name":"AIN Web Tool-15-D-SSPtestcustome","isPermitted":true},{"id":"19c5ade915eb461e8af52fb2fd8cd1f2","name":"AIN Web Tool-15-D-UncheckedEcopm","isPermitted":true},{"id":"de007636e25249238447264a988a927b","name":"AIN Web Tool-15-D-dfsdf","isPermitted":true},{"id":"62f29b3613634ca6a3065cbe0e020c44","name":"AIN/SMS-16-D-Multiservices1","isPermitted":true},{"id":"649289e30d3244e0b48098114d63c2aa","name":"AIN Web Tool-15-D-SSPST66","isPermitted":true},{"id":"3f21eeea6c2c486bba31dab816c05a32","name":"AIN Web Tool-15-D-ASSPST47","isPermitted":true},{"id":"f60ce21d3ee6427586cff0d22b03b773","name":"CESAR-100-D-sspjg67246","isPermitted":true},{"id":"8774659e425f479895ae091bb5d46560","name":"CESAR-100-D-sspjg68359","isPermitted":true},{"id":"624eb554b0d147c19ff8885341760481","name":"AINWebTool-15-D-iftach","isPermitted":true},{"id":"214f55f5fc414c678059c383b03e4962","name":"CESAR-100-D-sspjg612401","isPermitted":true},{"id":"c90666c291664841bb98e4d981ff1db5","name":"CESAR-100-D-sspjg621340","isPermitted":true},{"id":"ce5b6bc5c7b348e1bf4b91ac9a174278","name":"sspjg621351cloned","isPermitted":true},{"id":"b386b768a3f24c8e953abbe0b3488c02","name":"AINWebTool-15-D-eteancomp","isPermitted":true},{"id":"dc6c4dbfd225474e9deaadd34968646c","name":"AINWebTool-15-T-SPFET","isPermitted":true},{"id":"02cb5030e9914aa4be120bd9ed1e19eb","name":"AINWebTool-15-X-eeweww","isPermitted":true},{"id":"f2f3830e4c984d45bcd00e1a04158a79","name":"CESAR-100-D-spjg61909","isPermitted":true},{"id":"05b91bd5137f4929878edd965755c06d","name":"CESAR-100-D-sspjg621512cloned","isPermitted":true},{"id":"7002fbe8482d4a989ddf445b1ce336e0","name":"AINWebTool-15-X-vdr","isPermitted":true},{"id":"4008522be43741dcb1f5422022a2aa0b","name":"AINWebTool-15-D-ssasa","isPermitted":true},{"id":"f44e2e96a1b6476abfda2fa407b00169","name":"AINWebTool-15-D-PFNPT","isPermitted":true},{"id":"b69a52bec8a84669a37a1e8b72708be7","name":"AINWebTool-15-X-vdre","isPermitted":true},{"id":"fac7d9fd56154caeb9332202dcf2969f","name":"AINWebTool-15-X-NONPODECOMP","isPermitted":true},{"id":"2d34d8396e194eb49969fd61ffbff961","name":"DN5242-Nov16-T5","isPermitted":true},{"id":"cb42a77ff45b48a8b8deb83bb64acc74","name":"ro-T11","isPermitted":true},{"id":"fa45ca53c80b492fa8be5477cd84fc2b","name":"ro-T112","isPermitted":true},{"id":"4914ab0ab3a743e58f0eefdacc1dde77","name":"DN5242-Nov21-T1","isPermitted":true},{"id":"d0a3e3f2964542259d155a81c41aadc3","name":"test-hvf6-09","isPermitted":true},{"id":"cbb99fe4ada84631b7baf046b6fd2044","name":"DN5242-Nov16-T3","isPermitted":true}]}},"productFamilies":[{"id":"ebc3bc3d-62fd-4a3f-a037-f619df4ff034","name":"SCOTTIE","isPermitted":true},{"id":"17cc1042-527b-11e6-beb8-9e71128cae77","name":"IGNACIO","isPermitted":true},{"id":"36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e","name":"Christie","isPermitted":true},{"id":"a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7","name":"Enhanced Services","isPermitted":true},{"id":"vTerrance","name":"vTerrance","isPermitted":true},{"id":"323d69d9-2efe-4r45-ay0a-89ea7ard4e6f","name":"vSCP","isPermitted":true},{"id":"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb","name":"Emanuel","isPermitted":true},{"id":"d8a6ed93-251c-47ca-adc9-86671fd19f4c","name":"BVOIP","isPermitted":true},{"id":"db171b8f-115c-4992-a2e3-ee04cae357e0","name":"LINDSEY","isPermitted":true},{"id":"LRSI-OSPF","name":"LRSI-OSPF","isPermitted":true},{"id":"vRosemarie","name":"HNGATEWAY","isPermitted":true},{"id":"vHNPaas","name":"WILKINS","isPermitted":true},{"id":"e433710f-9217-458d-a79d-1c7aff376d89","name":"TYLER SILVIA","isPermitted":true},{"id":"b6a3f28c-eebf-494c-a900-055cc7c874ce","name":"VROUTER","isPermitted":true},{"id":"Cisneros","name":"vMuriel","isPermitted":true},{"id":"0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1","name":"CARA Griffin","isPermitted":true},{"id":"c7611ebe-c324-48f1-8085-94aef0c6ef3d","name":"DARREN MCGEE","isPermitted":true},{"id":"e30755dc-5673-4b6b-9dcf-9abdd96b93d1","name":"Transport","isPermitted":true},{"id":"vSalvatore","name":"vSalvatore","isPermitted":true},{"id":"d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4","name":"Josefina","isPermitted":true},{"id":"vHubbard","name":"vHubbard","isPermitted":true},{"id":"12a96a9d-4b4c-4349-a950-fe1159602621","name":"DARREN MCGEE","isPermitted":true}],"serviceTypes":{"e433710f-9217-458d-a79d-1c7aff376d89":[{"id":"0","name":"vRichardson","isPermitted":false},{"id":"1","name":"TYLER SILVIA","isPermitted":true},{"id":"2","name":"Emanuel","isPermitted":false},{"id":"3","name":"vJamie","isPermitted":false},{"id":"4","name":"vVoiceMail","isPermitted":false},{"id":"5","name":"Kennedy","isPermitted":false},{"id":"6","name":"vSEGW","isPermitted":false},{"id":"7","name":"vVM","isPermitted":false},{"id":"8","name":"vOTA","isPermitted":false},{"id":"9","name":"vMME","isPermitted":false},{"id":"10","name":"vMNS","isPermitted":false},{"id":"11","name":"vSCP","isPermitted":false},{"id":"12","name":"VPMS","isPermitted":false},{"id":"13","name":"vMMSC","isPermitted":false},{"id":"14","name":"SSD","isPermitted":false},{"id":"15","name":"vMOG","isPermitted":false},{"id":"16","name":"LINDSEY","isPermitted":false},{"id":"17","name":"JOHANNA_SANTOS","isPermitted":false},{"id":"18","name":"vCarroll","isPermitted":false}]},"aicZones":[{"id":"NFT1","name":"NFTJSSSS-NFT1"},{"id":"JAG1","name":"YUDFJULP-JAG1"},{"id":"YYY1","name":"UUUAIAAI-YYY1"},{"id":"BAN1","name":"VSDKYUTP-BAN1"},{"id":"DKJ1","name":"DKJSJDKA-DKJ1"},{"id":"MCS1","name":"ASACMAMS-MCS1"},{"id":"UIO1","name":"uioclli1-UIO1"},{"id":"RAJ1","name":"YGBIJNLQ-RAJ1"},{"id":"OPA1","name":"opaclli1-OPA1"},{"id":"SDE1","name":"ZXCVBNMA-SDE1"},{"id":"VEN2","name":"FGHJUHIL-VEN2"},{"id":"ORL1","name":"ORLDFLMA-ORL1"},{"id":"JAD1","name":"JADECLLI-JAD1"},{"id":"ZXL1","name":"LWLWCANN-ZXL1"},{"id":"CKL1","name":"CLKSKCKK-CKL1"},{"id":"SDF1","name":"sdfclli1-SDF1"},{"id":"RAD1","name":"RADICAL1-RAD1"},{"id":"KIT1","name":"BHYJFGLN-KIT1"},{"id":"REL1","name":"INGERFGT-REL1"},{"id":"JNL1","name":"CJALSDAC-JNL1"},{"id":"OLK1","name":"OLKOLKLS-OLK1"},{"id":"CHI1","name":"CHILLIWE-CHI1"},{"id":"UUU4","name":"UUUAAAUU-UUU4"},{"id":"TUF1","name":"TUFCLLI1-TUF1"},{"id":"KJN1","name":"CKALDKSA-KJN1"},{"id":"SAM1","name":"SNDGCA64-SAN1"},{"id":"SCK1","name":"SCKSCKSK-SCK1"},{"id":"HJH1","name":"AOEEQQQD-HJH1"},{"id":"HGD1","name":"SDFQWHGD-HGD1"},{"id":"KOR1","name":"HYFLNBVT-KOR1"},{"id":"ATL43","name":"AICLOCID-ATL43"},{"id":"ATL54","name":"AICFTAAI-ATL54"},{"id":"ATL66","name":"CLLIAAII-ATL66"},{"id":"VEL1","name":"BNMLKUIK-VEL1"},{"id":"ICC1","name":"SANJITAT-ICC1"},{"id":"MNT11","name":"WSXEFBTH-MNT11"},{"id":"DEF2","name":"WSBHGTYL-DEF2"},{"id":"MAD11","name":"SDFQWGKL-MAD11"},{"id":"OLG1","name":"OLHOLHOL-OLG1"},{"id":"GAR1","name":"NGFVSJKO-GAR1"},{"id":"SAN22","name":"GNVLSCTL-SAN22"},{"id":"HRG1","name":"HRGHRGGS-HRG1"},{"id":"JCS1","name":"JCSJSCJS-JCS1"},{"id":"DHA12","name":"WSXEDECF-DHA12"},{"id":"HJE1","name":"AOEEWWWD-HJE1"},{"id":"NCA1","name":"NCANCANN-NCA1"},{"id":"IOP1","name":"iopclli1-IOP1"},{"id":"RTY1","name":"rtyclli1-RTY1"},{"id":"KAP1","name":"HIOUYTRQ-KAP1"},{"id":"ZEN1","name":"ZENCLLI1-ZEN1"},{"id":"HKA1","name":"JAKHLASS-HKA1"},{"id":"CQK1","name":"CQKSCAKK-CQK1"},{"id":"SAI1","name":"UBEKQLPD-SAI1"},{"id":"ERT1","name":"ertclli1-ERT1"},{"id":"IBB1","name":"PLMKOIJU-IBB1"},{"id":"TIR2","name":"PLKINHYI-TIR2"},{"id":"HSD1","name":"CHASKCDS-HSD1"},{"id":"SLF78","name":"SDCTLFN1-SLF78"},{"id":"SEE78","name":"SDCTEEE4-SEE78"},{"id":"SAN13","name":"TOKYJPFA-SAN13"},{"id":"SAA78","name":"SDCTAAA1-SAA78"},{"id":"LUC1","name":"ATLDFGYC-LUC1"},{"id":"AMD13","name":"MEMATLAN-AMD13"},{"id":"TOR1","name":"TOROONXN-TOR1"},{"id":"QWE1","name":"QWECLLI1-QWE1"},{"id":"ZOG1","name":"ZOGASTRO-ZOG1"},{"id":"CAL33","name":"CALIFORN-CAL33"},{"id":"SHH78","name":"SDIT1HHH-SHH78"},{"id":"DSA1","name":"LKJHGFDS-DSA1"},{"id":"CLG1","name":"CLGRABAD-CLG1"},{"id":"BNA1","name":"BNARAGBK-BNA1"},{"id":"ATL84","name":"CANTTCOC-ATL84"},{"id":"APP1","name":"WBHGTYUI-APP1"},{"id":"RJN1","name":"RJNRBZAW-RJN1"},{"id":"EHH78","name":"SDCSHHH5-EHH78"},{"id":"mac10","name":"PKGTESTF-mac10"},{"id":"SXB78","name":"SDCTGXB1-SXB78"},{"id":"SAX78","name":"SDCTAXG1-SAX78"},{"id":"SYD1","name":"SYDNAUBV-SYD1"},{"id":"TOK1","name":"TOKYJPFA-TOK1"},{"id":"KGM2","name":"KGMTNC20-KGM2"},{"id":"DCC1b","name":"POIUYTGH-DCC1b"},{"id":"SKK78","name":"SDCTKKK1-SKK78"},{"id":"SGG78","name":"SDCTGGG1-SGG78"},{"id":"SJJ78","name":"SDCTJJJ1-SJJ78"},{"id":"SBX78","name":"SDCTBXG1-SBX78"},{"id":"LAG1","name":"LARGIZON-LAG1"},{"id":"IAA1","name":"QAZXSWED-IAA1"},{"id":"POI1","name":"PLMNJKIU-POI1"},{"id":"LAG1a","name":"LARGIZON-LAG1a"},{"id":"PBL1","name":"PBLAPBAI-PBL1"},{"id":"LAG45","name":"LARGIZON-LAG1a"},{"id":"MAR1","name":"MNBVCXZM-MAR1"},{"id":"HST70","name":"HSTNTX70-HST70"},{"id":"DCC1a","name":"POIUYTGH-DCC1a"},{"id":"TOL1","name":"TOLDOH21-TOL1"},{"id":"LON1","name":"LONEENCO-LON1"},{"id":"SJU78","name":"SDIT1JUB-SJU78"},{"id":"STN27","name":"HSTNTX01-STN27"},{"id":"SSW56","name":"ss8126GT-SSW56"},{"id":"SBB78","name":"SDIT1BBB-SBB78"},{"id":"DCC3","name":"POIUYTGH-DCC3"},{"id":"GNV1","name":"GNVLSCTL-GNV1"},{"id":"WAS1","name":"WASHDCSW-WAS1"},{"id":"TOY1","name":"TORYONNZ-TOY1"},{"id":"STT1","name":"STTLWA02-STT1"},{"id":"STG1","name":"STTGGE62-STG1"},{"id":"SLL78","name":"SDCTLLL1-SLL78"},{"id":"SBU78","name":"SDIT1BUB-SBU78"},{"id":"ATL2","name":"ATLNGANW-ATL2"},{"id":"BOT1","name":"BOTHWAKY-BOT1"},{"id":"SNG1","name":"SNGPSIAU-SNG1"},{"id":"NYC1","name":"NYCMNY54-NYC1"},{"id":"LAG1b","name":"LARGIZON-LAG1b"},{"id":"AMD15","name":"AMDFAA01-AMD15"},{"id":"SNA1","name":"SNANTXCA-SNA1"},{"id":"PLT1","name":"PLTNCA60-PLT1"},{"id":"TLP1","name":"TLPNXM18-TLP1"},{"id":"SDD81","name":"SAIT1DD6-SDD81"},{"id":"DCC1","name":"POIUYTGH-DCC1"},{"id":"DCC2","name":"POIUYTGH-DCC2"},{"id":"OKC1","name":"OKCBOK55-OKC1"},{"id":"PAR1","name":"PARSFRCG-PAR1"},{"id":"TES36","name":"ABCEETES-TES36"},{"id":"COM1","name":"PLMKOPIU-COM1"},{"id":"ANI1","name":"ATLNGTRE-ANI1"},{"id":"SDG78","name":"SDIT1BDG-SDG78"},{"id":"mac20","name":"PKGTESTF-mac20"},{"id":"DSF45","name":"DSFBG123-DSF45"},{"id":"HST25","name":"HSTNTX01-HST25"},{"id":"AMD18","name":"AUDIMA01-AMD18"},{"id":"SAA80","name":"SAIT9AA3-SAA80"},{"id":"SSA56","name":"SSIT2AA7-SSA56"},{"id":"SDD82","name":"SAIT1DD9-SDD82"},{"id":"JCV1","name":"JCVLFLBW-JCV1"},{"id":"SUL2","name":"WERTYUJK-SUL2"},{"id":"PUR1","name":"purelyde-PUR1"},{"id":"FDE55","name":"FDERT555-FDE55"},{"id":"SITE","name":"LONEENCO-SITE"},{"id":"ATL1","name":"ATLNGAMA-ATL1"},{"id":"JUL1","name":"ZXCVBNMM-JUL1"},{"id":"TAT34","name":"TESAAISB-TAT34"},{"id":"XCP12","name":"CHKGH123-XCP12"},{"id":"RAI1","name":"poiuytre-RAI1"},{"id":"HPO1","name":"ATLNGAUP-HPO1"},{"id":"KJF12","name":"KJFDH123-KJF12"},{"id":"SCC80","name":"SAIT9CC3-SCC80"},{"id":"SAA12","name":"SAIT9AF8-SAA12"},{"id":"SAA14","name":"SAIT1AA9-SAA14"},{"id":"ATL35","name":"TTESSAAI-ATL35"},{"id":"CWY1","name":"CWYMOWBS-CWY1"},{"id":"ATL76","name":"TELEPAAI-ATL76"},{"id":"DSL12","name":"DSLFK242-DSL12"},{"id":"ATL53","name":"AAIATLTE-ATL53"},{"id":"SAA11","name":"SAIT9AA2-SAA11"},{"id":"ATL62","name":"TESSASCH-ATL62"},{"id":"AUG1","name":"ASDFGHJK-AUG1"},{"id":"POI22","name":"POIUY123-POI22"},{"id":"SAA13","name":"SAIT1AA9-SAA13"},{"id":"BHY17","name":"BHYTFRF3-BHY17"},{"id":"LIS1","name":"HOSTPROF-LIS1"},{"id":"SIP1","name":"ZXCVBNMK-SIP1"},{"id":"ATL99","name":"TEESTAAI-ATL43"},{"id":"ATL64","name":"FORLOAAJ-ATL64"},{"id":"TAT33","name":"TESAAISA-TAT33"},{"id":"RAD10","name":"INDIPUNE-RAD10"},{"id":"RTW5","name":"BHYTFRY4-RTW5"},{"id":"JGS1","name":"KSJKKKKK-JGS1"},{"id":"ATL98","name":"TEESTAAI-ATL43"},{"id":"WAN1","name":"LEIWANGW-WAN1"},{"id":"ATL44","name":"ATLSANAB-ATL44"},{"id":"RTD2","name":"BHYTFRk4-RTD2"},{"id":"NIR1","name":"ORFLMANA-NIR1"},{"id":"ATL75","name":"SANAAIRE-ATL75"},{"id":"NUM1","name":"QWERTYUI-NUM1"},{"id":"MTN32","name":"MDTWNJ21-MTN32"},{"id":"RTZ4","name":"BHYTFRZ6-RTZ4"},{"id":"ATL56","name":"ATLSANAC-ATL56"},{"id":"AMS1","name":"AMSTNLBW-AMS1"},{"id":"RCT1","name":"AMSTERNL-RCT1"},{"id":"JAN1","name":"ORFLMATT-JAN1"},{"id":"ABC14","name":"TESAAISA-ABC14"},{"id":"TAT37","name":"TESAAISD-TAT37"},{"id":"MIC54","name":"MICHIGAN-MIC54"},{"id":"ABC11","name":"ATLSANAI-ABC11"},{"id":"AMF11","name":"AMDOCS01-AMF11"},{"id":"ATL63","name":"ATLSANEW-ATL63"},{"id":"ABC12","name":"ATLSECIA-ABC12"},{"id":"MTN20","name":"MDTWNJ21-MTN20"},{"id":"ABC15","name":"AAITESAN-ABC15"},{"id":"AVT1","name":"AVTRFLHD-AVT1"},{"id":"ATL34","name":"ATLSANAI-ATL34"}],"categoryParameters":{"owningEntityList":[{"id":"aaa1","name":"aaa1"},{"id":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","name":"WayneHolland"},{"id":"Melissa","name":"Melissa"}],"projectList":[{"id":"WATKINS","name":"WATKINS"},{"id":"x1","name":"x1"},{"id":"yyy1","name":"yyy1"}],"lineOfBusinessList":[{"id":"ONAP","name":"ONAP"},{"id":"zzz1","name":"zzz1"}],"platformList":[{"id":"platform","name":"platform"},{"id":"xxx1","name":"xxx1"}]},"type":"[LCP_REGIONS_AND_TENANTS] Update","subscribers":[{"id":"CAR_2020_ER","name":"CAR_2020_ER","isPermitted":true},{"id":"21014aa2-526b-11e6-beb8-9e71128cae77","name":"JULIO ERICKSON","isPermitted":false},{"id":"DHV1707-TestSubscriber-2","name":"DALE BRIDGES","isPermitted":false},{"id":"DHV1707-TestSubscriber-1","name":"LLOYD BRIDGES","isPermitted":false},{"id":"jimmy-example","name":"JimmyExampleCust-20161102","isPermitted":false},{"id":"jimmy-example2","name":"JimmyExampleCust-20161103","isPermitted":false},{"id":"ERICA5779-TestSub-PWT-102","name":"ERICA5779-TestSub-PWT-102","isPermitted":false},{"id":"ERICA5779-TestSub-PWT-101","name":"ERICA5779-TestSub-PWT-101","isPermitted":false},{"id":"a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb","name":"Emanuel","isPermitted":false},{"id":"ERICA5779-Subscriber-4","name":"ERICA5779-Subscriber-5","isPermitted":false},{"id":"ERICA5779-TestSub-PWT-103","name":"ERICA5779-TestSub-PWT-103","isPermitted":false},{"id":"ERICA5779-Subscriber-2","name":"ERICA5779-Subscriber-2","isPermitted":false},{"id":"e433710f-9217-458d-a79d-1c7aff376d89","name":"SILVIA ROBBINS","isPermitted":true},{"id":"ERICA5779-Subscriber-3","name":"ERICA5779-Subscriber-3","isPermitted":false},{"id":"31739f3e-526b-11e6-beb8-9e71128cae77","name":"CRAIG/ROBERTS","isPermitted":false}]}};
+  }
+}
+
+describe('Basic popup service', () => {
+  let injector;
+  let service: BasicPopupService;
+  let genericFormService : GenericFormService;
+  let defaultDataGeneratorService : DefaultDataGeneratorService;
+  let fb : FormBuilder;
+  let iframeService : IframeService;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      providers : [
+        NetworkPopupService,
+        BasicControlGenerator,
+        NetworkControlGenerator,
+        DefaultDataGeneratorService,
+        GenericFormService,
+        FormBuilder,
+        IframeService,
+        AaiService,
+        LogService,
+        BasicPopupService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockReduxStore},
+        {provide: HttpClient, useClass: MockAppStore},
+        {provide: SdcUiServices.ModalService, useClass: MockModalService}
+      ]
+    });
+    await TestBed.compileComponents();
+    injector = getTestBed();
+    service = injector.get(BasicPopupService);
+    genericFormService = injector.get(GenericFormService);
+    defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
+    fb = injector.get(FormBuilder);
+    iframeService = injector.get(IframeService);
+
+  })().then(done).catch(done.fail));
+
+
+
+
+  test('getDynamicInputs should list of formControl model', () => {
+    const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+    const networkModel : string = 'ExtVL 0';
+    const networkStoreKey : string = null;
+    const controls : FormControlModel[] = service.getDynamicInputs(serviceId, networkModel, networkStoreKey, 'networks');
+    expect(controls.length).toEqual(6);
+    for(let i = 0 ; i < controls.length ; i++){
+      expect(controls[i].type).toEqual('INPUT');
+      expect(controls[i].isVisible).toBeTruthy();
+    }
+  });
+
+  test('getModelFromResponse should return undefined if raw model not exist', () => {
+    const result= service.getModelFromResponse({
+      "modelType" : {
+        "modelName" : null
+      }
+    }, 'modelType', 'modelName');
+    expect(result).toBeUndefined();
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.ts
new file mode 100644
index 0000000..5d4d165
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/basic.popup.service.ts
@@ -0,0 +1,54 @@
+import {Injectable} from "@angular/core";
+import {Subscriber} from "../../../models/subscriber";
+import {NetworkModel} from "../../../models/networkModel";
+import {AppState} from "../../../store/reducers";
+import {NgRedux} from "@angular-redux/store";
+import {FormControlModel} from "../../../models/formControlModels/formControl.model";
+import {DefaultDataGeneratorService} from "../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {BasicControlGenerator} from "../../genericForm/formControlsServices/basic.control.generator";
+import * as _ from 'lodash';
+import {VfModule} from "../../../models/vfModule";
+import {VNFModel} from "../../../models/vnfModel";
+import {VnfGroupModel} from "../../../models/vnfGroupModel";
+
+@Injectable()
+export class BasicPopupService {
+  constructor(private _store: NgRedux<AppState>,
+              private _defaultDataGeneratorService : DefaultDataGeneratorService,
+              private _basicControlGenerator : BasicControlGenerator){}
+
+  extractSubscriberNameBySubscriberId(subsriberId: string) {
+    let result: string = null;
+    let filteredArray: any = _.filter(this._store.getState().service.subscribers, function (o: Subscriber) {
+      return o.id === subsriberId
+    });
+    if (filteredArray.length > 0) {
+      result = filteredArray[0].name;
+    }
+    return result;
+  }
+
+  getModelFromResponse(result: any, modelType: string, modelName: string) {
+    let rawModel = result[modelType][modelName];
+    if (!rawModel) return;
+    switch (modelType){
+      case 'vnfs' : {
+        return new VNFModel(rawModel);
+      }
+      case 'vfModules' : {
+        return new VfModule(rawModel);
+      }
+      case 'networks' : {
+        return new NetworkModel(rawModel);
+      }
+      case 'vnfGroups' : {
+        return new VnfGroupModel(rawModel);
+      }
+    }
+  }
+
+  getDynamicInputs(serviceId : string, modelName : string, storeKey : string, type : string) : FormControlModel[]{
+    let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[serviceId][type][modelName].inputs);
+      return this._basicControlGenerator.getDynamicInputsByType(dynamic, serviceId, storeKey, type );
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/generic-popup.interface.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/generic-popup.interface.ts
new file mode 100644
index 0000000..7324c64
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/generic-popup.interface.ts
@@ -0,0 +1,25 @@
+/***********************************************************
+ onSubmit : action when set button is clicked
+ onCancel : action when cancel/X button is clicked
+ getModelInformation : should generate the model information
+ getGenericFormPopupDetails : returns list of controls
+ getInstance :  returns exists instance (if exist)
+ getTitle :  returns generic popup title
+ getSubLeftTitle :  returns generic popup left sub title
+ getSubRightTitle :  returns generic popup right sub title
+ ***********************************************************/
+
+import {FormGroup} from "@angular/forms";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {FormPopupDetails} from "../../../models/formControlModels/formPopupDetails.model";
+
+export interface GenericPopupInterface {
+  onSubmit(that, form: FormGroup, ...args) : void;
+  onCancel(that, form) : void;
+  getModelInformation(serviceId : string, modelName : string) : void;
+  getGenericFormPopupDetails(serviceId : string, modelName : string , storeKey : string, node : ITreeNode, uuidData : Object, isUpdateMode : boolean) : FormPopupDetails;
+  getInstance(serviceId : string, modelName : string , storeKey : string) : any;
+  getTitle(isUpdateMode : boolean) : string;
+  getSubLeftTitle() : string;
+  getSubRightTitle() : string;
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.spec.ts
new file mode 100644
index 0000000..30164b8
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.spec.ts
@@ -0,0 +1,2395 @@
+import {NetworkPopupService} from "./network.popup.service";
+import {LogService} from "../../../../utils/log/log.service";
+import {SdcUiServices} from "onap-ui-angular";
+import {ReflectiveInjector} from "@angular/core";
+import {NgRedux} from "@angular-redux/store";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {HttpClient} from "@angular/common/http";
+import {NetworkControlGenerator} from "../../../genericForm/formControlsServices/networkGenerator/network.control.generator";
+import {GenericFormService} from "../../../genericForm/generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {IframeService} from "../../../../utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+import {getTestBed, TestBed} from "@angular/core/testing";
+
+class MockAppStore<T> {}
+
+class MockModalService<T> {}
+
+class MockReduxStore<T> {
+  getState() {
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "FLAG_ADVANCED_PORTS_FILTER": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_REGION_ID_FROM_REMOTE": true,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {}
+            },
+            "vnfs": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "ecomp_generated_naming": "false",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VF",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "netowrk_role": "role 1, role 2, role 3",
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "service": {
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "action-data",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "",
+              "serviceEcompNaming": "false",
+              "instantiationType": "A-La-Carte",
+              "inputs": {
+                "2017488_adiodvpe0_ASN": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": "AV_vPE"
+                }
+              }
+            },
+            "vnfs": {
+              "2017-388_ADIOD-vPE 1": {
+                "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+                "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "1.0",
+                "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-388_ADIOD-vPE 0": {
+                "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "4.0",
+                "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-488_ADIOD-vPE 0": {
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-488_ADIOD-vPE",
+                "version": "5.0",
+                "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "max_instances": "3",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    },
+                    "volumeGroupAllowed": true
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                    "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                    "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                    "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "version": "5",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "ADIOD_base_vPE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    }
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {},
+                "properties": {
+                  "network_role" : "network role 1, network role 2",
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {},
+            "fabricConfigurations": {},
+            "serviceProxies": {},
+            "vfModules": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"},
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                },
+                "volumeGroupAllowed": true
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "version": "5",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "ADIOD_base_vPE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"},
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                }
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "vnfs": {
+              "VF_vMee 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                      "isMissingData": false,
+                      "sdncPreReload": null,
+                      "modelInfo": {
+                        "modelType": "VFmodule",
+                        "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                        "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                        "modelName": "VfVmee..base_vmme..module-0",
+                        "modelVersion": "2",
+                        "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                        "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                      },
+                      "instanceParams": [{}],
+                      "trackById": "wmtm6sy2uj"
+                    }
+                  }
+                },
+                "isMissingData": true,
+                "originalName": "VF_vMee 0",
+                "vnfStoreKey": "VF_vMee 0",
+                "trackById": "p3wk448m5do",
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+                "lcpCloudRegionId": null,
+                "tenantId": null,
+                "lineOfBusiness": null,
+                "platformName": null,
+                "modelInfo": {
+                  "modelType": "VF",
+                  "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+                  "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+                  "modelName": "VF_vMee",
+                  "modelVersion": "2.0",
+                  "modelCustomizationName": "VF_vMee 0"
+                }
+              }
+            },
+            "networks": {},
+            "instanceParams": [{}],
+            "validationCounter": 1,
+            "existingNames": {},
+            "existingVNFCounterMap": {"d6557200-ecf2-4641-8094-5393ae3aae60": 1},
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": "hvf6",
+            "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "aicZoneId": "JAG1",
+            "projectName": "x1",
+            "rollbackOnFailure": "true",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "ComplexService",
+              "modelVersion": "1.0",
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+            },
+            "isALaCarte": false,
+            "name": "ComplexService",
+            "version": "1.0",
+            "description": "ComplexService",
+            "category": "Emanuel",
+            "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "networks": {
+              "ExtVL 0": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "sf3zth68xjf",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0:0001": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "2mdxioxca9h",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0_1": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0_1",
+                "trackById": "z7vd1gmpbs",
+                "instanceName": "ExtVL",
+                "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "zzz1",
+                "instanceParams": [{
+                  "vnf_config_template_version": "17.2",
+                  "bandwidth_units": "Gbps",
+                  "bandwidth": "10",
+                  "AIC_CLLI": "ATLMY8GA",
+                  "ASN": "AV_vPE",
+                  "vnf_instance_name": "yoav"
+                }],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              }
+            },
+            "vnfs": {
+              "2017-488_ADIOD-vPE 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": {
+                      "instanceName": "yoav",
+                      "volumeGroupName": "123",
+                      "modelInfo": {
+                        "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                        "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                        "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "modelVersion": "6",
+                        "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                        "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                      },
+                      "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                      "isMissingData": false,
+                      "instanceParams": [{
+                        "adiodvpe0_bandwidth": "10",
+                        "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6",
+                        "2017488_adiodvpe0_vnf_config_template_version": "17.2",
+                        "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA",
+                        "adiodvpe0_bandwidth_units": "Gbps"
+                      }]
+                    }
+                  }
+                },
+                "isMissingData": false,
+                "originalName": "2017-488_ADIOD-vPE 0",
+                "vnfStoreKey": "2017-488_ADIOD-vPE 0",
+                "trackById": "o65b26t2thj",
+                "instanceName": "2017488_ADIODvPE",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "platformName": "platform",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                  "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                  "modelName": "2017-488_ADIOD-vPE",
+                  "modelVersion": "5.0",
+                  "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                  "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                  "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+                },
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+              }
+            },
+            "instanceParams": [{"2017488_adiodvpe0_ASN": "AV_vPE"}],
+            "validationCounter": 0,
+            "existingNames": {"123": "", "instancename": "", "yoav": "", "extvl": ""},
+            "existingVNFCounterMap": {"69e09f68-8b63-4cc9-b9ff-860960b5db09": 1},
+            "existingNetworksCounterMap": {"ddc3f20c-08b5-40fd-af72-c6d14636b986": 3},
+            "instanceName": "InstanceName",
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "aicZoneId": "JAG1",
+            "projectName": null,
+            "rollbackOnFailure": "true",
+            "aicZoneName": "YUDFJULP-JAG1",
+            "owningEntityName": "WayneHolland",
+            "testApi": "GR_API",
+            "tenantName": "USP-SIP-IC-24335-T-01",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "modelName": "action-data",
+              "modelVersion": "1.0",
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+            },
+            "isALaCarte": false,
+            "name": "action-data",
+            "version": "1.0",
+            "description": "",
+            "category": "",
+            "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          }
+        },
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [{
+            "id": "JANET25",
+            "name": "JANET25",
+            "isPermitted": true
+          }, {"id": "hvf6", "name": "hvf6", "isPermitted": true}],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [{
+              "id": "092eb9e8e4b7412e8787dd091bc58e86",
+              "name": "USP-SIP-IC-24335-T-01",
+              "isPermitted": true
+            }],
+            "hvf6": [{
+              "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+              "name": "AIN Web Tool-15-D-testalexandria",
+              "isPermitted": true
+            }, {
+              "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+              "name": "AIN Web Tool-15-D-STTest2",
+              "isPermitted": true
+            }, {
+              "id": "1178612d2b394be4834ad77f567c0af2",
+              "name": "AIN Web Tool-15-D-SSPtestcustome",
+              "isPermitted": true
+            }, {
+              "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+              "name": "AIN Web Tool-15-D-UncheckedEcopm",
+              "isPermitted": true
+            }, {
+              "id": "de007636e25249238447264a988a927b",
+              "name": "AIN Web Tool-15-D-dfsdf",
+              "isPermitted": true
+            }, {
+              "id": "62f29b3613634ca6a3065cbe0e020c44",
+              "name": "AIN/SMS-16-D-Multiservices1",
+              "isPermitted": true
+            }, {
+              "id": "649289e30d3244e0b48098114d63c2aa",
+              "name": "AIN Web Tool-15-D-SSPST66",
+              "isPermitted": true
+            }, {
+              "id": "3f21eeea6c2c486bba31dab816c05a32",
+              "name": "AIN Web Tool-15-D-ASSPST47",
+              "isPermitted": true
+            }, {
+              "id": "f60ce21d3ee6427586cff0d22b03b773",
+              "name": "CESAR-100-D-sspjg67246",
+              "isPermitted": true
+            }, {
+              "id": "8774659e425f479895ae091bb5d46560",
+              "name": "CESAR-100-D-sspjg68359",
+              "isPermitted": true
+            }, {
+              "id": "624eb554b0d147c19ff8885341760481",
+              "name": "AINWebTool-15-D-iftach",
+              "isPermitted": true
+            }, {
+              "id": "214f55f5fc414c678059c383b03e4962",
+              "name": "CESAR-100-D-sspjg612401",
+              "isPermitted": true
+            }, {
+              "id": "c90666c291664841bb98e4d981ff1db5",
+              "name": "CESAR-100-D-sspjg621340",
+              "isPermitted": true
+            }, {
+              "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+              "name": "sspjg621351cloned",
+              "isPermitted": true
+            }, {
+              "id": "b386b768a3f24c8e953abbe0b3488c02",
+              "name": "AINWebTool-15-D-eteancomp",
+              "isPermitted": true
+            }, {
+              "id": "dc6c4dbfd225474e9deaadd34968646c",
+              "name": "AINWebTool-15-T-SPFET",
+              "isPermitted": true
+            }, {
+              "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+              "name": "AINWebTool-15-X-eeweww",
+              "isPermitted": true
+            }, {
+              "id": "f2f3830e4c984d45bcd00e1a04158a79",
+              "name": "CESAR-100-D-spjg61909",
+              "isPermitted": true
+            }, {
+              "id": "05b91bd5137f4929878edd965755c06d",
+              "name": "CESAR-100-D-sspjg621512cloned",
+              "isPermitted": true
+            }, {
+              "id": "7002fbe8482d4a989ddf445b1ce336e0",
+              "name": "AINWebTool-15-X-vdr",
+              "isPermitted": true
+            }, {
+              "id": "4008522be43741dcb1f5422022a2aa0b",
+              "name": "AINWebTool-15-D-ssasa",
+              "isPermitted": true
+            }, {
+              "id": "f44e2e96a1b6476abfda2fa407b00169",
+              "name": "AINWebTool-15-D-PFNPT",
+              "isPermitted": true
+            }, {
+              "id": "b69a52bec8a84669a37a1e8b72708be7",
+              "name": "AINWebTool-15-X-vdre",
+              "isPermitted": true
+            }, {
+              "id": "fac7d9fd56154caeb9332202dcf2969f",
+              "name": "AINWebTool-15-X-NONPODECOMP",
+              "isPermitted": true
+            }, {
+              "id": "2d34d8396e194eb49969fd61ffbff961",
+              "name": "DN5242-Nov16-T5",
+              "isPermitted": true
+            }, {
+              "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+              "name": "ro-T11",
+              "isPermitted": true
+            }, {
+              "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+              "name": "ro-T112",
+              "isPermitted": true
+            }, {
+              "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+              "name": "DN5242-Nov21-T1",
+              "isPermitted": true
+            }, {
+              "id": "d0a3e3f2964542259d155a81c41aadc3",
+              "name": "test-hvf6-09",
+              "isPermitted": true
+            }, {"id": "cbb99fe4ada84631b7baf046b6fd2044", "name": "DN5242-Nov16-T3", "isPermitted": true}]
+          }
+        },
+        "productFamilies": [{
+          "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+          "name": "SCOTTIE",
+          "isPermitted": true
+        }, {
+          "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+          "name": "IGNACIO",
+          "isPermitted": true
+        }, {
+          "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+          "name": "Christie",
+          "isPermitted": true
+        }, {
+          "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+          "name": "Enhanced Services",
+          "isPermitted": true
+        }, {"id": "vTerrance", "name": "vTerrance", "isPermitted": true}, {
+          "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+          "name": "vSCP",
+          "isPermitted": true
+        }, {
+          "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "name": "Emanuel",
+          "isPermitted": true
+        }, {
+          "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+          "name": "BVOIP",
+          "isPermitted": true
+        }, {"id": "db171b8f-115c-4992-a2e3-ee04cae357e0", "name": "LINDSEY", "isPermitted": true}, {
+          "id": "LRSI-OSPF",
+          "name": "LRSI-OSPF",
+          "isPermitted": true
+        }, {"id": "vRosemarie", "name": "HNGATEWAY", "isPermitted": true}, {
+          "id": "vHNPaas",
+          "name": "WILKINS",
+          "isPermitted": true
+        }, {
+          "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "name": "TYLER SILVIA",
+          "isPermitted": true
+        }, {"id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", "name": "VROUTER", "isPermitted": true}, {
+          "id": "Cisneros",
+          "name": "vMuriel",
+          "isPermitted": true
+        }, {
+          "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+          "name": "CARA Griffin",
+          "isPermitted": true
+        }, {
+          "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+          "name": "DARREN MCGEE",
+          "isPermitted": true
+        }, {"id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", "name": "Transport", "isPermitted": true}, {
+          "id": "vSalvatore",
+          "name": "vSalvatore",
+          "isPermitted": true
+        }, {"id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", "name": "Josefina", "isPermitted": true}, {
+          "id": "vHubbard",
+          "name": "vHubbard",
+          "isPermitted": true
+        }, {"id": "12a96a9d-4b4c-4349-a950-fe1159602621", "name": "DARREN MCGEE", "isPermitted": true}],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [{
+            "id": "0",
+            "name": "vRichardson",
+            "isPermitted": false
+          }, {"id": "1", "name": "TYLER SILVIA", "isPermitted": true}, {
+            "id": "2",
+            "name": "Emanuel",
+            "isPermitted": false
+          }, {"id": "3", "name": "vJamie", "isPermitted": false}, {
+            "id": "4",
+            "name": "vVoiceMail",
+            "isPermitted": false
+          }, {"id": "5", "name": "Kennedy", "isPermitted": false}, {
+            "id": "6",
+            "name": "vSEGW",
+            "isPermitted": false
+          }, {"id": "7", "name": "vVM", "isPermitted": false}, {
+            "id": "8",
+            "name": "vOTA",
+            "isPermitted": false
+          }, {"id": "9", "name": "vMME", "isPermitted": false}, {
+            "id": "10",
+            "name": "vMNS",
+            "isPermitted": false
+          }, {"id": "11", "name": "vSCP", "isPermitted": false}, {
+            "id": "12",
+            "name": "VPMS",
+            "isPermitted": false
+          }, {"id": "13", "name": "vMMSC", "isPermitted": false}, {
+            "id": "14",
+            "name": "SSD",
+            "isPermitted": false
+          }, {"id": "15", "name": "vMOG", "isPermitted": false}, {
+            "id": "16",
+            "name": "LINDSEY",
+            "isPermitted": false
+          }, {"id": "17", "name": "JOHANNA_SANTOS", "isPermitted": false}, {
+            "id": "18",
+            "name": "vCarroll",
+            "isPermitted": false
+          }]
+        },
+        "aicZones": [{"id": "NFT1", "name": "NFTJSSSS-NFT1"}, {"id": "JAG1", "name": "YUDFJULP-JAG1"}, {
+          "id": "YYY1",
+          "name": "UUUAIAAI-YYY1"
+        }, {"id": "BAN1", "name": "VSDKYUTP-BAN1"}, {"id": "DKJ1", "name": "DKJSJDKA-DKJ1"}, {
+          "id": "MCS1",
+          "name": "ASACMAMS-MCS1"
+        }, {"id": "UIO1", "name": "uioclli1-UIO1"}, {"id": "RAJ1", "name": "YGBIJNLQ-RAJ1"}, {
+          "id": "OPA1",
+          "name": "opaclli1-OPA1"
+        }, {"id": "SDE1", "name": "ZXCVBNMA-SDE1"}, {"id": "VEN2", "name": "FGHJUHIL-VEN2"}, {
+          "id": "ORL1",
+          "name": "ORLDFLMA-ORL1"
+        }, {"id": "JAD1", "name": "JADECLLI-JAD1"}, {"id": "ZXL1", "name": "LWLWCANN-ZXL1"}, {
+          "id": "CKL1",
+          "name": "CLKSKCKK-CKL1"
+        }, {"id": "SDF1", "name": "sdfclli1-SDF1"}, {"id": "RAD1", "name": "RADICAL1-RAD1"}, {
+          "id": "KIT1",
+          "name": "BHYJFGLN-KIT1"
+        }, {"id": "REL1", "name": "INGERFGT-REL1"}, {"id": "JNL1", "name": "CJALSDAC-JNL1"}, {
+          "id": "OLK1",
+          "name": "OLKOLKLS-OLK1"
+        }, {"id": "CHI1", "name": "CHILLIWE-CHI1"}, {"id": "UUU4", "name": "UUUAAAUU-UUU4"}, {
+          "id": "TUF1",
+          "name": "TUFCLLI1-TUF1"
+        }, {"id": "KJN1", "name": "CKALDKSA-KJN1"}, {"id": "SAM1", "name": "SNDGCA64-SAN1"}, {
+          "id": "SCK1",
+          "name": "SCKSCKSK-SCK1"
+        }, {"id": "HJH1", "name": "AOEEQQQD-HJH1"}, {"id": "HGD1", "name": "SDFQWHGD-HGD1"}, {
+          "id": "KOR1",
+          "name": "HYFLNBVT-KOR1"
+        }, {"id": "ATL43", "name": "AICLOCID-ATL43"}, {"id": "ATL54", "name": "AICFTAAI-ATL54"}, {
+          "id": "ATL66",
+          "name": "CLLIAAII-ATL66"
+        }, {"id": "VEL1", "name": "BNMLKUIK-VEL1"}, {"id": "ICC1", "name": "SANJITAT-ICC1"}, {
+          "id": "MNT11",
+          "name": "WSXEFBTH-MNT11"
+        }, {"id": "DEF2", "name": "WSBHGTYL-DEF2"}, {"id": "MAD11", "name": "SDFQWGKL-MAD11"}, {
+          "id": "OLG1",
+          "name": "OLHOLHOL-OLG1"
+        }, {"id": "GAR1", "name": "NGFVSJKO-GAR1"}, {"id": "SAN22", "name": "GNVLSCTL-SAN22"}, {
+          "id": "HRG1",
+          "name": "HRGHRGGS-HRG1"
+        }, {"id": "JCS1", "name": "JCSJSCJS-JCS1"}, {"id": "DHA12", "name": "WSXEDECF-DHA12"}, {
+          "id": "HJE1",
+          "name": "AOEEWWWD-HJE1"
+        }, {"id": "NCA1", "name": "NCANCANN-NCA1"}, {"id": "IOP1", "name": "iopclli1-IOP1"}, {
+          "id": "RTY1",
+          "name": "rtyclli1-RTY1"
+        }, {"id": "KAP1", "name": "HIOUYTRQ-KAP1"}, {"id": "ZEN1", "name": "ZENCLLI1-ZEN1"}, {
+          "id": "HKA1",
+          "name": "JAKHLASS-HKA1"
+        }, {"id": "CQK1", "name": "CQKSCAKK-CQK1"}, {"id": "SAI1", "name": "UBEKQLPD-SAI1"}, {
+          "id": "ERT1",
+          "name": "ertclli1-ERT1"
+        }, {"id": "IBB1", "name": "PLMKOIJU-IBB1"}, {"id": "TIR2", "name": "PLKINHYI-TIR2"}, {
+          "id": "HSD1",
+          "name": "CHASKCDS-HSD1"
+        }, {"id": "SLF78", "name": "SDCTLFN1-SLF78"}, {"id": "SEE78", "name": "SDCTEEE4-SEE78"}, {
+          "id": "SAN13",
+          "name": "TOKYJPFA-SAN13"
+        }, {"id": "SAA78", "name": "SDCTAAA1-SAA78"}, {"id": "LUC1", "name": "ATLDFGYC-LUC1"}, {
+          "id": "AMD13",
+          "name": "MEMATLAN-AMD13"
+        }, {"id": "TOR1", "name": "TOROONXN-TOR1"}, {"id": "QWE1", "name": "QWECLLI1-QWE1"}, {
+          "id": "ZOG1",
+          "name": "ZOGASTRO-ZOG1"
+        }, {"id": "CAL33", "name": "CALIFORN-CAL33"}, {"id": "SHH78", "name": "SDIT1HHH-SHH78"}, {
+          "id": "DSA1",
+          "name": "LKJHGFDS-DSA1"
+        }, {"id": "CLG1", "name": "CLGRABAD-CLG1"}, {"id": "BNA1", "name": "BNARAGBK-BNA1"}, {
+          "id": "ATL84",
+          "name": "CANTTCOC-ATL84"
+        }, {"id": "APP1", "name": "WBHGTYUI-APP1"}, {"id": "RJN1", "name": "RJNRBZAW-RJN1"}, {
+          "id": "EHH78",
+          "name": "SDCSHHH5-EHH78"
+        }, {"id": "mac10", "name": "PKGTESTF-mac10"}, {"id": "SXB78", "name": "SDCTGXB1-SXB78"}, {
+          "id": "SAX78",
+          "name": "SDCTAXG1-SAX78"
+        }, {"id": "SYD1", "name": "SYDNAUBV-SYD1"}, {"id": "TOK1", "name": "TOKYJPFA-TOK1"}, {
+          "id": "KGM2",
+          "name": "KGMTNC20-KGM2"
+        }, {"id": "DCC1b", "name": "POIUYTGH-DCC1b"}, {"id": "SKK78", "name": "SDCTKKK1-SKK78"}, {
+          "id": "SGG78",
+          "name": "SDCTGGG1-SGG78"
+        }, {"id": "SJJ78", "name": "SDCTJJJ1-SJJ78"}, {"id": "SBX78", "name": "SDCTBXG1-SBX78"}, {
+          "id": "LAG1",
+          "name": "LARGIZON-LAG1"
+        }, {"id": "IAA1", "name": "QAZXSWED-IAA1"}, {"id": "POI1", "name": "PLMNJKIU-POI1"}, {
+          "id": "LAG1a",
+          "name": "LARGIZON-LAG1a"
+        }, {"id": "PBL1", "name": "PBLAPBAI-PBL1"}, {"id": "LAG45", "name": "LARGIZON-LAG1a"}, {
+          "id": "MAR1",
+          "name": "MNBVCXZM-MAR1"
+        }, {"id": "HST70", "name": "HSTNTX70-HST70"}, {"id": "DCC1a", "name": "POIUYTGH-DCC1a"}, {
+          "id": "TOL1",
+          "name": "TOLDOH21-TOL1"
+        }, {"id": "LON1", "name": "LONEENCO-LON1"}, {"id": "SJU78", "name": "SDIT1JUB-SJU78"}, {
+          "id": "STN27",
+          "name": "HSTNTX01-STN27"
+        }, {"id": "SSW56", "name": "ss8126GT-SSW56"}, {"id": "SBB78", "name": "SDIT1BBB-SBB78"}, {
+          "id": "DCC3",
+          "name": "POIUYTGH-DCC3"
+        }, {"id": "GNV1", "name": "GNVLSCTL-GNV1"}, {"id": "WAS1", "name": "WASHDCSW-WAS1"}, {
+          "id": "TOY1",
+          "name": "TORYONNZ-TOY1"
+        }, {"id": "STT1", "name": "STTLWA02-STT1"}, {"id": "STG1", "name": "STTGGE62-STG1"}, {
+          "id": "SLL78",
+          "name": "SDCTLLL1-SLL78"
+        }, {"id": "SBU78", "name": "SDIT1BUB-SBU78"}, {"id": "ATL2", "name": "ATLNGANW-ATL2"}, {
+          "id": "BOT1",
+          "name": "BOTHWAKY-BOT1"
+        }, {"id": "SNG1", "name": "SNGPSIAU-SNG1"}, {"id": "NYC1", "name": "NYCMNY54-NYC1"}, {
+          "id": "LAG1b",
+          "name": "LARGIZON-LAG1b"
+        }, {"id": "AMD15", "name": "AMDFAA01-AMD15"}, {"id": "SNA1", "name": "SNANTXCA-SNA1"}, {
+          "id": "PLT1",
+          "name": "PLTNCA60-PLT1"
+        }, {"id": "TLP1", "name": "TLPNXM18-TLP1"}, {"id": "SDD81", "name": "SAIT1DD6-SDD81"}, {
+          "id": "DCC1",
+          "name": "POIUYTGH-DCC1"
+        }, {"id": "DCC2", "name": "POIUYTGH-DCC2"}, {"id": "OKC1", "name": "OKCBOK55-OKC1"}, {
+          "id": "PAR1",
+          "name": "PARSFRCG-PAR1"
+        }, {"id": "TES36", "name": "ABCEETES-TES36"}, {"id": "COM1", "name": "PLMKOPIU-COM1"}, {
+          "id": "ANI1",
+          "name": "ATLNGTRE-ANI1"
+        }, {"id": "SDG78", "name": "SDIT1BDG-SDG78"}, {"id": "mac20", "name": "PKGTESTF-mac20"}, {
+          "id": "DSF45",
+          "name": "DSFBG123-DSF45"
+        }, {"id": "HST25", "name": "HSTNTX01-HST25"}, {"id": "AMD18", "name": "AUDIMA01-AMD18"}, {
+          "id": "SAA80",
+          "name": "SAIT9AA3-SAA80"
+        }, {"id": "SSA56", "name": "SSIT2AA7-SSA56"}, {"id": "SDD82", "name": "SAIT1DD9-SDD82"}, {
+          "id": "JCV1",
+          "name": "JCVLFLBW-JCV1"
+        }, {"id": "SUL2", "name": "WERTYUJK-SUL2"}, {"id": "PUR1", "name": "purelyde-PUR1"}, {
+          "id": "FDE55",
+          "name": "FDERT555-FDE55"
+        }, {"id": "SITE", "name": "LONEENCO-SITE"}, {"id": "ATL1", "name": "ATLNGAMA-ATL1"}, {
+          "id": "JUL1",
+          "name": "ZXCVBNMM-JUL1"
+        }, {"id": "TAT34", "name": "TESAAISB-TAT34"}, {"id": "XCP12", "name": "CHKGH123-XCP12"}, {
+          "id": "RAI1",
+          "name": "poiuytre-RAI1"
+        }, {"id": "HPO1", "name": "ATLNGAUP-HPO1"}, {"id": "KJF12", "name": "KJFDH123-KJF12"}, {
+          "id": "SCC80",
+          "name": "SAIT9CC3-SCC80"
+        }, {"id": "SAA12", "name": "SAIT9AF8-SAA12"}, {"id": "SAA14", "name": "SAIT1AA9-SAA14"}, {
+          "id": "ATL35",
+          "name": "TTESSAAI-ATL35"
+        }, {"id": "CWY1", "name": "CWYMOWBS-CWY1"}, {"id": "ATL76", "name": "TELEPAAI-ATL76"}, {
+          "id": "DSL12",
+          "name": "DSLFK242-DSL12"
+        }, {"id": "ATL53", "name": "AAIATLTE-ATL53"}, {"id": "SAA11", "name": "SAIT9AA2-SAA11"}, {
+          "id": "ATL62",
+          "name": "TESSASCH-ATL62"
+        }, {"id": "AUG1", "name": "ASDFGHJK-AUG1"}, {"id": "POI22", "name": "POIUY123-POI22"}, {
+          "id": "SAA13",
+          "name": "SAIT1AA9-SAA13"
+        }, {"id": "BHY17", "name": "BHYTFRF3-BHY17"}, {"id": "LIS1", "name": "HOSTPROF-LIS1"}, {
+          "id": "SIP1",
+          "name": "ZXCVBNMK-SIP1"
+        }, {"id": "ATL99", "name": "TEESTAAI-ATL43"}, {"id": "ATL64", "name": "FORLOAAJ-ATL64"}, {
+          "id": "TAT33",
+          "name": "TESAAISA-TAT33"
+        }, {"id": "RAD10", "name": "INDIPUNE-RAD10"}, {"id": "RTW5", "name": "BHYTFRY4-RTW5"}, {
+          "id": "JGS1",
+          "name": "KSJKKKKK-JGS1"
+        }, {"id": "ATL98", "name": "TEESTAAI-ATL43"}, {"id": "WAN1", "name": "LEIWANGW-WAN1"}, {
+          "id": "ATL44",
+          "name": "ATLSANAB-ATL44"
+        }, {"id": "RTD2", "name": "BHYTFRk4-RTD2"}, {"id": "NIR1", "name": "ORFLMANA-NIR1"}, {
+          "id": "ATL75",
+          "name": "SANAAIRE-ATL75"
+        }, {"id": "NUM1", "name": "QWERTYUI-NUM1"}, {"id": "MTN32", "name": "MDTWNJ21-MTN32"}, {
+          "id": "RTZ4",
+          "name": "BHYTFRZ6-RTZ4"
+        }, {"id": "ATL56", "name": "ATLSANAC-ATL56"}, {"id": "AMS1", "name": "AMSTNLBW-AMS1"}, {
+          "id": "RCT1",
+          "name": "AMSTERNL-RCT1"
+        }, {"id": "JAN1", "name": "ORFLMATT-JAN1"}, {"id": "ABC14", "name": "TESAAISA-ABC14"}, {
+          "id": "TAT37",
+          "name": "TESAAISD-TAT37"
+        }, {"id": "MIC54", "name": "MICHIGAN-MIC54"}, {"id": "ABC11", "name": "ATLSANAI-ABC11"}, {
+          "id": "AMF11",
+          "name": "AMDOCS01-AMF11"
+        }, {"id": "ATL63", "name": "ATLSANEW-ATL63"}, {"id": "ABC12", "name": "ATLSECIA-ABC12"}, {
+          "id": "MTN20",
+          "name": "MDTWNJ21-MTN20"
+        }, {"id": "ABC15", "name": "AAITESAN-ABC15"}, {"id": "AVT1", "name": "AVTRFLHD-AVT1"}, {
+          "id": "ATL34",
+          "name": "ATLSANAI-ATL34"
+        }],
+        "categoryParameters": {
+          "owningEntityList": [{
+            "id": "aaa1",
+            "name": "aaa1"
+          }, {"id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "name": "WayneHolland"}, {
+            "id": "Melissa",
+            "name": "Melissa"
+          }],
+          "projectList": [{"id": "WATKINS", "name": "WATKINS"}, {"id": "x1", "name": "x1"}, {"id": "yyy1", "name": "yyy1"}],
+          "lineOfBusinessList": [{"id": "ONAP", "name": "ONAP"}, {"id": "zzz1", "name": "zzz1"}],
+          "platformList": [{"id": "platform", "name": "platform"}, {"id": "xxx1", "name": "xxx1"}]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [{
+          "id": "CAR_2020_ER",
+          "name": "CAR_2020_ER",
+          "isPermitted": true
+        }, {
+          "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+          "name": "JULIO ERICKSON",
+          "isPermitted": false
+        }, {
+          "id": "DHV1707-TestSubscriber-2",
+          "name": "DALE BRIDGES",
+          "isPermitted": false
+        }, {"id": "DHV1707-TestSubscriber-1", "name": "LLOYD BRIDGES", "isPermitted": false}, {
+          "id": "jimmy-example",
+          "name": "JimmyExampleCust-20161102",
+          "isPermitted": false
+        }, {
+          "id": "jimmy-example2",
+          "name": "JimmyExampleCust-20161103",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-102",
+          "name": "ERICA5779-TestSub-PWT-102",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-101",
+          "name": "ERICA5779-TestSub-PWT-101",
+          "isPermitted": false
+        }, {
+          "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "name": "Emanuel",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-Subscriber-4",
+          "name": "ERICA5779-Subscriber-5",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-103",
+          "name": "ERICA5779-TestSub-PWT-103",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-Subscriber-2",
+          "name": "ERICA5779-Subscriber-2",
+          "isPermitted": false
+        }, {
+          "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "name": "SILVIA ROBBINS",
+          "isPermitted": true
+        }, {
+          "id": "ERICA5779-Subscriber-3",
+          "name": "ERICA5779-Subscriber-3",
+          "isPermitted": false
+        }, {"id": "31739f3e-526b-11e6-beb8-9e71128cae77", "name": "CRAIG/ROBERTS", "isPermitted": false}]
+      }
+    };
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('Network popup service', () => {
+  let injector;
+  let service: NetworkPopupService;
+  let genericFormService: GenericFormService
+  let defaultDataGeneratorService: DefaultDataGeneratorService;
+  let fb: FormBuilder;
+  let iframeService: IframeService;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      providers : [
+        NetworkPopupService,
+        BasicControlGenerator,
+        NetworkControlGenerator,
+        DefaultDataGeneratorService,
+        GenericFormService,
+        FormBuilder,
+        IframeService,
+        AaiService,
+        LogService,
+        BasicPopupService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockReduxStore},
+        {provide: HttpClient, useClass: MockAppStore},
+        {provide: SdcUiServices.ModalService, useClass: MockModalService}
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(NetworkPopupService);
+    genericFormService = injector.get(GenericFormService);
+    defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
+    fb = injector.get(FormBuilder);
+    iframeService = injector.get(IframeService);
+
+  })().then(done).catch(done.fail));
+
+  test('getTitle should return the correct title for edit and create mode', () => {
+    expect(service.getTitle(true)).toBe('Edit Network');
+    expect(service.getTitle(false)).toBe('Set new Network');
+  });
+
+  test('getSubLeftTitle should return network model name', () => {
+    service.uuidData = {
+      'networkId': 'Model name'
+    };
+    expect(service.getSubLeftTitle()).toBe('Model name');
+  });
+
+  test('getSubRightTitle should return popup type', () => {
+    expect(service.getSubRightTitle()).toBe('Network Instance Details');
+  });
+
+  test('getModelInformation should update modelInformations', () => {
+    const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+    const networkModel: string = 'ExtVL 0';
+
+    service.getModelInformation(serviceId, networkModel);
+    expect(service.modelInformations.length).toEqual(13);
+    expect(service.modelInformations[0].label).toEqual("Subscriber Name");
+    expect(service.modelInformations[0].values).toEqual(['SILVIA ROBBINS']);
+
+    expect(service.modelInformations[1].label).toEqual("Service Name");
+    expect(service.modelInformations[1].values).toEqual(['action-data']);
+
+    expect(service.modelInformations[2].label).toEqual("Service Instance Name");
+    expect(service.modelInformations[2].values).toEqual(['InstanceName']);
+
+    expect(service.modelInformations[3].label).toEqual("Model Name");
+    expect(service.modelInformations[3].values).toEqual(['ExtVL']);
+
+    expect(service.modelInformations[4].label).toEqual("Model version");
+    expect(service.modelInformations[4].values).toEqual(['37.0']);
+
+    expect(service.modelInformations[5].label).toEqual("Description");
+    expect(service.modelInformations[5].values).toEqual(['ECOMP generic virtual link (network) base type for all other service-level and global networks']);
+
+    expect(service.modelInformations[6].label).toEqual("Category");
+    expect(service.modelInformations[6].values).toEqual([undefined]);
+
+    expect(service.modelInformations[7].label).toEqual("Sub Category");
+    expect(service.modelInformations[7].values).toEqual([undefined]);
+
+    expect(service.modelInformations[8].label).toEqual("UUID");
+    expect(service.modelInformations[8].values).toEqual(['ddc3f20c-08b5-40fd-af72-c6d14636b986']);
+
+    expect(service.modelInformations[9].label).toEqual("Invariant UUID");
+    expect(service.modelInformations[9].values).toEqual(['379f816b-a7aa-422f-be30-17114ff50b7c']);
+
+    expect(service.modelInformations[10].label).toEqual("Service type");
+    expect(service.modelInformations[10].values).toEqual(['']);
+
+    expect(service.modelInformations[11].label).toEqual("Service role");
+    expect(service.modelInformations[11].values).toEqual(['']);
+
+    expect(service.modelInformations[12].label).toEqual('Network roles');
+    expect(service.modelInformations[12].values).toEqual( ['network role 1', ' network role 2']);
+  });
+
+
+  test('onCancel should trigger closeDialogEvent and iframe', () => {
+    let that = <any>{
+      parentElementClassName: 'content',
+      _iframeService: iframeService
+    };
+    jest.spyOn(iframeService, 'removeClassCloseModal');
+    jest.spyOn(service.closeDialogEvent, 'next');
+
+    service.onCancel(that, fb.group({}));
+
+    expect(that._iframeService.removeClassCloseModal).toHaveBeenCalledWith(that.parentElementClassName)
+    expect(service.closeDialogEvent.next).toHaveBeenCalledWith(that);
+  });
+
+  test('onSubmit should trigger onCancel', () => {
+    let that = <any>{
+      parentElementClassName: 'content',
+      _iframeService: iframeService,
+      storeNetwork: () => {
+      },
+      serviceModel: {
+        uuid: 'someUUID'
+      }
+    };
+    let form = fb.group({});
+    jest.spyOn(service, 'onCancel');
+    jest.spyOn(that, 'storeNetwork');
+    jest.spyOn(window.parent, 'postMessage');
+
+    service.onSubmit(that, form);
+
+    expect(service.onCancel).toHaveBeenCalledWith(that, form);
+    expect(that.storeNetwork).toHaveBeenCalledWith(that, form.value);
+    expect(window.parent.postMessage).toHaveBeenCalledWith({
+      eventId: 'submitIframe',
+      data: {
+        serviceModelId: 'someUUID'
+      }
+    }, "*");
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.ts
new file mode 100644
index 0000000..7f32360
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/network/network.popup.service.ts
@@ -0,0 +1,150 @@
+import {Injectable} from "@angular/core";
+import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {NetworkInstance} from "../../../../models/networkInstance";
+import {AppState} from "../../../../store/reducers";
+import {NgRedux} from "@angular-redux/store";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {NetworkControlGenerator} from "../../../genericForm/formControlsServices/networkGenerator/network.control.generator";
+import {ModelInformationItem} from "../../../model-information/model-information.component";
+import {Constants} from "../../../../utils/constants";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {ServiceModel} from "../../../../models/serviceModel";
+import {FormGroup} from "@angular/forms";
+import {ModelInfo} from "../../../../models/modelInfo";
+import {IframeService} from "../../../../utils/iframe.service";
+import {GenericPopupInterface} from "../generic-popup.interface";
+import {Subject} from "rxjs/Subject";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import * as _ from 'lodash';
+import {BasicPopupService} from "../basic.popup.service";
+import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions";
+import {createNetworkInstance, updateNetworkInstance} from "../../../../storeUtil/utils/network/network.actions";
+
+@Injectable()
+export class NetworkPopupService implements GenericPopupInterface {
+  dynamicInputs: any;
+  instance: any;
+  model: any;
+  serviceModel: ServiceModel;
+  modelInformations: ModelInformationItem[] = [];
+  uuidData: Object;
+  closeDialogEvent: Subject<any> = new Subject<any>();
+  isUpdateMode: boolean;
+
+
+  constructor(private _basicControlGenerator: BasicControlGenerator,
+              private _networkControlGenerator: NetworkControlGenerator,
+              private _iframeService: IframeService,
+              private _defaultDataGeneratorService: DefaultDataGeneratorService,
+              private _aaiService: AaiService,
+              private _basicPopupService : BasicPopupService,
+              private _store: NgRedux<AppState>) {
+  }
+
+  getInstance(serviceId: string, networkName: string, networkStoreKey: string): any {
+    if (_.isNil(networkStoreKey)) {
+      return new NetworkInstance();
+    }
+    return this._store.getState().service.serviceInstance[serviceId].networks[networkStoreKey];
+  }
+
+  getGenericFormPopupDetails(serviceId: string, networkName: string, networkStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
+    this.uuidData = uuidData;
+    this.instance = this.getInstance(serviceId, networkName, networkStoreKey);
+
+
+    this.getModelInformation(serviceId, networkName);
+
+    return new FormPopupDetails(this,
+      PopupType.NETWORK_MACRO,
+      uuidData,
+      this.getTitle(isUpdateMode),
+      this.getSubLeftTitle(),
+      this.getSubRightTitle(),
+      this.getControls(serviceId, networkName, networkStoreKey, isUpdateMode),
+      this._basicPopupService.getDynamicInputs(serviceId,networkName, networkStoreKey, 'networks'),
+      this.modelInformations,
+      (that, form: FormGroup) => {that.onSubmit(that, form);},
+      (that: any, form: FormGroup) => {that.onCancel(that, form); }
+    );
+  }
+
+  getModelInformation(serviceId: string, networkName: string) {
+    this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
+      this.serviceModel = new ServiceModel(result);
+      this.model = this._basicPopupService.getModelFromResponse(result, 'networks', networkName);
+
+      const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
+      this.modelInformations = [
+        new ModelInformationItem("Subscriber Name", "subscriberName", [this._basicPopupService.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true),
+        new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true),
+        new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false),
+        new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true),
+        new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
+        new ModelInformationItem("Description", "description", [this.model.description]),
+        new ModelInformationItem("Category", "category", [this.model.category]),
+        new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
+        new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
+        new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
+        new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
+        new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]),
+        new ModelInformationItem("Network roles", "network-role", this.model.roles, "", false)
+      ];
+    });
+  }
+
+  getControls(serviceId: string, networkName: string, networkStoreKey: string, isUpdateMode: boolean) {
+    if (this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') {
+      return this._networkControlGenerator.getMacroFormControls(serviceId, networkStoreKey, networkName, isUpdateMode);
+    } else {
+      return this._networkControlGenerator.getAlaCarteFormControls(serviceId, networkStoreKey, networkName, isUpdateMode);
+    }
+  }
+
+
+  onSubmit(that, form: FormGroup) {
+    form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
+    that.storeNetwork(that, form.value);
+    window.parent.postMessage({
+      eventId: 'submitIframe',
+      data: {
+        serviceModelId: that.serviceModel.uuid
+      }
+    }, "*");
+    this.onCancel(that, form);
+  }
+
+
+  onCancel(that, form) {
+    form.reset();
+    that._iframeService.removeClassCloseModal('content');
+    this.closeDialogEvent.next(that);
+  }
+
+  storeNetwork = (that, formValues: any): void => {
+    formValues.modelInfo = new ModelInfo(that.model);
+    formValues.uuid = formValues.modelInfo.uuid;
+    formValues.isMissingData = false;
+
+    if (!that.uuidData.networkStoreKey) {
+      this._store.dispatch(changeInstanceCounter(formValues.modelInfo.modelUniqueId , that.uuidData.serviceId, 1, <any>{data: {type: 'Network'}}));
+      this._store.dispatch(createNetworkInstance(formValues, that.uuidData.networkId, that.uuidData.serviceId, that.uuidData.networkId));
+    } else {
+      this._store.dispatch(updateNetworkInstance(formValues, that.uuidData.networkId, that.uuidData.serviceId, that.uuidData.networkStoreKey));
+    }
+  };
+
+
+  getTitle(isUpdateMode : boolean) : string {
+    return isUpdateMode ? 'Edit Network' : 'Set new Network';
+  }
+
+  getSubLeftTitle(): string {
+    return this.uuidData['networkId'];
+  }
+
+  getSubRightTitle(): string {
+    return "Network Instance Details";
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.spec.ts
new file mode 100644
index 0000000..64f47a3
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.spec.ts
@@ -0,0 +1,2439 @@
+import {LogService} from "../../../../utils/log/log.service";
+import {ReflectiveInjector} from "@angular/core";
+import {NgRedux} from "@angular-redux/store";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {HttpClient} from "@angular/common/http";
+import {GenericFormService} from "../../../genericForm/generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {IframeService} from "../../../../utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {ServicePopupService} from "./service.popup.service";
+import {ServiceControlGenerator} from "../../../genericForm/formControlsServices/service.control.generator";
+import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
+import {SdcUiServices} from "onap-ui-angular";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+import {getTestBed, TestBed} from "@angular/core/testing";
+
+class MockModalService<T> {}
+
+class MockAppStore<T> {}
+
+class MockReduxStore<T> {
+  getState() {
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "FLAG_ADVANCED_PORTS_FILTER": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_REGION_ID_FROM_REMOTE": true,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {
+                "2017488_adiodvpe0_ASN_1": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": "AV_vPE"
+                },
+                "2017488_adiodvpe0_ASN_2": {
+                  "type": "number",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": 2
+                },
+                "2017488_adiodvpe0_ASN_3": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": false,
+                  "default": "AV_vPE"
+                },
+                "2017488_adiodvpe0_ASN_4": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": "AV_vPE_123"
+                }
+              }
+            },
+            "vnfs": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "ecomp_generated_naming": "false",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VF",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "netowrk_role": "role 1, role 2, role 3",
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "service": {
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "action-data",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "some category",
+              "serviceType": "some service type",
+              "serviceRole": "some service role",
+              "description": "some description",
+              "serviceEcompNaming": "false",
+              "instantiationType": "A-La-Carte",
+              "inputs": {
+                "2017488_adiodvpe0_ASN_1": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": "AV_vPE"
+                },
+                "2017488_adiodvpe0_ASN_2": {
+                  "type": "number",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": 2
+                },
+                "2017488_adiodvpe0_ASN_3": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": false,
+                  "default": "AV_vPE"
+                },
+                "2017488_adiodvpe0_ASN_4": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": "AV_vPE_123"
+                }
+              }
+            },
+            "vnfs": {
+              "2017-388_ADIOD-vPE 1": {
+                "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+                "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "1.0",
+                "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-388_ADIOD-vPE 0": {
+                "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "4.0",
+                "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-488_ADIOD-vPE 0": {
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-488_ADIOD-vPE",
+                "version": "5.0",
+                "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "max_instances": "3",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    },
+                    "volumeGroupAllowed": true
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                    "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                    "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                    "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "version": "5",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "ADIOD_base_vPE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    }
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {},
+                "properties": {
+                  "network_role" : "network role 1, network role 2",
+                  "min_instances": 1,
+                  "max_instances": 10,
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {},
+            "fabricConfigurations": {},
+            "serviceProxies": {},
+            "vfModules": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"},
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                },
+                "volumeGroupAllowed": true
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "version": "5",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "ADIOD_base_vPE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"},
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                }
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "vnfs": {
+              "VF_vMee 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                      "isMissingData": false,
+                      "sdncPreReload": null,
+                      "modelInfo": {
+                        "modelType": "VFmodule",
+                        "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                        "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                        "modelName": "VfVmee..base_vmme..module-0",
+                        "modelVersion": "2",
+                        "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                        "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                      },
+                      "instanceParams": [{}],
+                      "trackById": "wmtm6sy2uj"
+                    }
+                  }
+                },
+                "isMissingData": true,
+                "originalName": "VF_vMee 0",
+                "vnfStoreKey": "VF_vMee 0",
+                "trackById": "p3wk448m5do",
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+                "lcpCloudRegionId": null,
+                "tenantId": null,
+                "lineOfBusiness": null,
+                "platformName": null,
+                "modelInfo": {
+                  "modelType": "VF",
+                  "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+                  "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+                  "modelName": "VF_vMee",
+                  "modelVersion": "2.0",
+                  "modelCustomizationName": "VF_vMee 0"
+                }
+              }
+            },
+            "networks": {},
+            "instanceParams": [{}],
+            "validationCounter": 1,
+            "existingNames": {},
+            "existingVNFCounterMap": {"d6557200-ecf2-4641-8094-5393ae3aae60": 1},
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": "hvf6",
+            "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "aicZoneId": "JAG1",
+            "projectName": "x1",
+            "rollbackOnFailure": "true",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "ComplexService",
+              "modelVersion": "1.0",
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+            },
+            "isALaCarte": false,
+            "name": "ComplexService",
+            "version": "1.0",
+            "description": "ComplexService",
+            "category": "Emanuel",
+            "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "networks": {
+              "ExtVL 0": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "sf3zth68xjf",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0:0001": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "2mdxioxca9h",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0_1": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0_1",
+                "trackById": "z7vd1gmpbs",
+                "instanceName": "ExtVL",
+                "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "zzz1",
+                "instanceParams": [{
+                  "vnf_config_template_version": "17.2",
+                  "bandwidth_units": "Gbps",
+                  "bandwidth": "10",
+                  "AIC_CLLI": "ATLMY8GA",
+                  "ASN": "AV_vPE",
+                  "vnf_instance_name": "yoav"
+                }],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              }
+            },
+            "vnfs": {
+              "2017-488_ADIOD-vPE 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": {
+                      "instanceName": "yoav",
+                      "volumeGroupName": "123",
+                      "modelInfo": {
+                        "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                        "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                        "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "modelVersion": "6",
+                        "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                        "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                      },
+                      "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                      "isMissingData": false,
+                      "instanceParams": [{
+                        "adiodvpe0_bandwidth": "10",
+                        "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6",
+                        "2017488_adiodvpe0_vnf_config_template_version": "17.2",
+                        "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA",
+                        "adiodvpe0_bandwidth_units": "Gbps"
+                      }]
+                    }
+                  }
+                },
+                "isMissingData": false,
+                "originalName": "2017-488_ADIOD-vPE 0",
+                "vnfStoreKey": "2017-488_ADIOD-vPE 0",
+                "trackById": "o65b26t2thj",
+                "instanceName": "2017488_ADIODvPE",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "platformName": "platform",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                  "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                  "modelName": "2017-488_ADIOD-vPE",
+                  "modelVersion": "5.0",
+                  "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                  "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                  "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+                },
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+              }
+            },
+            "instanceParams": [{"2017488_adiodvpe0_ASN": "AV_vPE"}],
+            "validationCounter": 0,
+            "existingNames": {"123": "", "instancename": "", "yoav": "", "extvl": ""},
+            "existingVNFCounterMap": {"69e09f68-8b63-4cc9-b9ff-860960b5db09": 1},
+            "existingNetworksCounterMap": {"ddc3f20c-08b5-40fd-af72-c6d14636b986": 3},
+            "instanceName": "InstanceName",
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "aicZoneId": "JAG1",
+            "projectName": null,
+            "rollbackOnFailure": "true",
+            "aicZoneName": "YUDFJULP-JAG1",
+            "owningEntityName": "WayneHolland",
+            "testApi": "GR_API",
+            "tenantName": "USP-SIP-IC-24335-T-01",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "modelName": "action-data",
+              "modelVersion": "1.0",
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+            },
+            "isALaCarte": false,
+            "name": "action-data",
+            "version": "1.0",
+            "description": "",
+            "category": "",
+            "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          }
+        },
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [{
+            "id": "JANET25",
+            "name": "JANET25",
+            "isPermitted": true
+          }, {"id": "hvf6", "name": "hvf6", "isPermitted": true}],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [{
+              "id": "092eb9e8e4b7412e8787dd091bc58e86",
+              "name": "USP-SIP-IC-24335-T-01",
+              "isPermitted": true
+            }],
+            "hvf6": [{
+              "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+              "name": "AIN Web Tool-15-D-testalexandria",
+              "isPermitted": true
+            }, {
+              "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+              "name": "AIN Web Tool-15-D-STTest2",
+              "isPermitted": true
+            }, {
+              "id": "1178612d2b394be4834ad77f567c0af2",
+              "name": "AIN Web Tool-15-D-SSPtestcustome",
+              "isPermitted": true
+            }, {
+              "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+              "name": "AIN Web Tool-15-D-UncheckedEcopm",
+              "isPermitted": true
+            }, {
+              "id": "de007636e25249238447264a988a927b",
+              "name": "AIN Web Tool-15-D-dfsdf",
+              "isPermitted": true
+            }, {
+              "id": "62f29b3613634ca6a3065cbe0e020c44",
+              "name": "AIN/SMS-16-D-Multiservices1",
+              "isPermitted": true
+            }, {
+              "id": "649289e30d3244e0b48098114d63c2aa",
+              "name": "AIN Web Tool-15-D-SSPST66",
+              "isPermitted": true
+            }, {
+              "id": "3f21eeea6c2c486bba31dab816c05a32",
+              "name": "AIN Web Tool-15-D-ASSPST47",
+              "isPermitted": true
+            }, {
+              "id": "f60ce21d3ee6427586cff0d22b03b773",
+              "name": "CESAR-100-D-sspjg67246",
+              "isPermitted": true
+            }, {
+              "id": "8774659e425f479895ae091bb5d46560",
+              "name": "CESAR-100-D-sspjg68359",
+              "isPermitted": true
+            }, {
+              "id": "624eb554b0d147c19ff8885341760481",
+              "name": "AINWebTool-15-D-iftach",
+              "isPermitted": true
+            }, {
+              "id": "214f55f5fc414c678059c383b03e4962",
+              "name": "CESAR-100-D-sspjg612401",
+              "isPermitted": true
+            }, {
+              "id": "c90666c291664841bb98e4d981ff1db5",
+              "name": "CESAR-100-D-sspjg621340",
+              "isPermitted": true
+            }, {
+              "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+              "name": "sspjg621351cloned",
+              "isPermitted": true
+            }, {
+              "id": "b386b768a3f24c8e953abbe0b3488c02",
+              "name": "AINWebTool-15-D-eteancomp",
+              "isPermitted": true
+            }, {
+              "id": "dc6c4dbfd225474e9deaadd34968646c",
+              "name": "AINWebTool-15-T-SPFET",
+              "isPermitted": true
+            }, {
+              "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+              "name": "AINWebTool-15-X-eeweww",
+              "isPermitted": true
+            }, {
+              "id": "f2f3830e4c984d45bcd00e1a04158a79",
+              "name": "CESAR-100-D-spjg61909",
+              "isPermitted": true
+            }, {
+              "id": "05b91bd5137f4929878edd965755c06d",
+              "name": "CESAR-100-D-sspjg621512cloned",
+              "isPermitted": true
+            }, {
+              "id": "7002fbe8482d4a989ddf445b1ce336e0",
+              "name": "AINWebTool-15-X-vdr",
+              "isPermitted": true
+            }, {
+              "id": "4008522be43741dcb1f5422022a2aa0b",
+              "name": "AINWebTool-15-D-ssasa",
+              "isPermitted": true
+            }, {
+              "id": "f44e2e96a1b6476abfda2fa407b00169",
+              "name": "AINWebTool-15-D-PFNPT",
+              "isPermitted": true
+            }, {
+              "id": "b69a52bec8a84669a37a1e8b72708be7",
+              "name": "AINWebTool-15-X-vdre",
+              "isPermitted": true
+            }, {
+              "id": "fac7d9fd56154caeb9332202dcf2969f",
+              "name": "AINWebTool-15-X-NONPODECOMP",
+              "isPermitted": true
+            }, {
+              "id": "2d34d8396e194eb49969fd61ffbff961",
+              "name": "DN5242-Nov16-T5",
+              "isPermitted": true
+            }, {
+              "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+              "name": "ro-T11",
+              "isPermitted": true
+            }, {
+              "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+              "name": "ro-T112",
+              "isPermitted": true
+            }, {
+              "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+              "name": "DN5242-Nov21-T1",
+              "isPermitted": true
+            }, {
+              "id": "d0a3e3f2964542259d155a81c41aadc3",
+              "name": "test-hvf6-09",
+              "isPermitted": true
+            }, {"id": "cbb99fe4ada84631b7baf046b6fd2044", "name": "DN5242-Nov16-T3", "isPermitted": true}]
+          }
+        },
+        "productFamilies": [{
+          "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+          "name": "SCOTTIE",
+          "isPermitted": true
+        }, {
+          "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+          "name": "IGNACIO",
+          "isPermitted": true
+        }, {
+          "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+          "name": "Christie",
+          "isPermitted": true
+        }, {
+          "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+          "name": "Enhanced Services",
+          "isPermitted": true
+        }, {"id": "vTerrance", "name": "vTerrance", "isPermitted": true}, {
+          "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+          "name": "vSCP",
+          "isPermitted": true
+        }, {
+          "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "name": "Emanuel",
+          "isPermitted": true
+        }, {
+          "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+          "name": "BVOIP",
+          "isPermitted": true
+        }, {"id": "db171b8f-115c-4992-a2e3-ee04cae357e0", "name": "LINDSEY", "isPermitted": true}, {
+          "id": "LRSI-OSPF",
+          "name": "LRSI-OSPF",
+          "isPermitted": true
+        }, {"id": "vRosemarie", "name": "HNGATEWAY", "isPermitted": true}, {
+          "id": "vHNPaas",
+          "name": "WILKINS",
+          "isPermitted": true
+        }, {
+          "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "name": "TYLER SILVIA",
+          "isPermitted": true
+        }, {"id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", "name": "VROUTER", "isPermitted": true}, {
+          "id": "Cisneros",
+          "name": "vMuriel",
+          "isPermitted": true
+        }, {
+          "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+          "name": "CARA Griffin",
+          "isPermitted": true
+        }, {
+          "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+          "name": "DARREN MCGEE",
+          "isPermitted": true
+        }, {"id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", "name": "Transport", "isPermitted": true}, {
+          "id": "vSalvatore",
+          "name": "vSalvatore",
+          "isPermitted": true
+        }, {"id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", "name": "Josefina", "isPermitted": true}, {
+          "id": "vHubbard",
+          "name": "vHubbard",
+          "isPermitted": true
+        }, {"id": "12a96a9d-4b4c-4349-a950-fe1159602621", "name": "DARREN MCGEE", "isPermitted": true}],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [{
+            "id": "0",
+            "name": "vRichardson",
+            "isPermitted": false
+          }, {"id": "1", "name": "TYLER SILVIA", "isPermitted": true}, {
+            "id": "2",
+            "name": "Emanuel",
+            "isPermitted": false
+          }, {"id": "3", "name": "vJamie", "isPermitted": false}, {
+            "id": "4",
+            "name": "vVoiceMail",
+            "isPermitted": false
+          }, {"id": "5", "name": "Kennedy", "isPermitted": false}, {
+            "id": "6",
+            "name": "vSEGW",
+            "isPermitted": false
+          }, {"id": "7", "name": "vVM", "isPermitted": false}, {
+            "id": "8",
+            "name": "vOTA",
+            "isPermitted": false
+          }, {"id": "9", "name": "vMME", "isPermitted": false}, {
+            "id": "10",
+            "name": "vMNS",
+            "isPermitted": false
+          }, {"id": "11", "name": "vSCP", "isPermitted": false}, {
+            "id": "12",
+            "name": "VPMS",
+            "isPermitted": false
+          }, {"id": "13", "name": "vMMSC", "isPermitted": false}, {
+            "id": "14",
+            "name": "SSD",
+            "isPermitted": false
+          }, {"id": "15", "name": "vMOG", "isPermitted": false}, {
+            "id": "16",
+            "name": "LINDSEY",
+            "isPermitted": false
+          }, {"id": "17", "name": "JOHANNA_SANTOS", "isPermitted": false}, {
+            "id": "18",
+            "name": "vCarroll",
+            "isPermitted": false
+          }]
+        },
+        "aicZones": [{"id": "NFT1", "name": "NFTJSSSS-NFT1"}, {"id": "JAG1", "name": "YUDFJULP-JAG1"}, {
+          "id": "YYY1",
+          "name": "UUUAIAAI-YYY1"
+        }, {"id": "BAN1", "name": "VSDKYUTP-BAN1"}, {"id": "DKJ1", "name": "DKJSJDKA-DKJ1"}, {
+          "id": "MCS1",
+          "name": "ASACMAMS-MCS1"
+        }, {"id": "UIO1", "name": "uioclli1-UIO1"}, {"id": "RAJ1", "name": "YGBIJNLQ-RAJ1"}, {
+          "id": "OPA1",
+          "name": "opaclli1-OPA1"
+        }, {"id": "SDE1", "name": "ZXCVBNMA-SDE1"}, {"id": "VEN2", "name": "FGHJUHIL-VEN2"}, {
+          "id": "ORL1",
+          "name": "ORLDFLMA-ORL1"
+        }, {"id": "JAD1", "name": "JADECLLI-JAD1"}, {"id": "ZXL1", "name": "LWLWCANN-ZXL1"}, {
+          "id": "CKL1",
+          "name": "CLKSKCKK-CKL1"
+        }, {"id": "SDF1", "name": "sdfclli1-SDF1"}, {"id": "RAD1", "name": "RADICAL1-RAD1"}, {
+          "id": "KIT1",
+          "name": "BHYJFGLN-KIT1"
+        }, {"id": "REL1", "name": "INGERFGT-REL1"}, {"id": "JNL1", "name": "CJALSDAC-JNL1"}, {
+          "id": "OLK1",
+          "name": "OLKOLKLS-OLK1"
+        }, {"id": "CHI1", "name": "CHILLIWE-CHI1"}, {"id": "UUU4", "name": "UUUAAAUU-UUU4"}, {
+          "id": "TUF1",
+          "name": "TUFCLLI1-TUF1"
+        }, {"id": "KJN1", "name": "CKALDKSA-KJN1"}, {"id": "SAM1", "name": "SNDGCA64-SAN1"}, {
+          "id": "SCK1",
+          "name": "SCKSCKSK-SCK1"
+        }, {"id": "HJH1", "name": "AOEEQQQD-HJH1"}, {"id": "HGD1", "name": "SDFQWHGD-HGD1"}, {
+          "id": "KOR1",
+          "name": "HYFLNBVT-KOR1"
+        }, {"id": "ATL43", "name": "AICLOCID-ATL43"}, {"id": "ATL54", "name": "AICFTAAI-ATL54"}, {
+          "id": "ATL66",
+          "name": "CLLIAAII-ATL66"
+        }, {"id": "VEL1", "name": "BNMLKUIK-VEL1"}, {"id": "ICC1", "name": "SANJITAT-ICC1"}, {
+          "id": "MNT11",
+          "name": "WSXEFBTH-MNT11"
+        }, {"id": "DEF2", "name": "WSBHGTYL-DEF2"}, {"id": "MAD11", "name": "SDFQWGKL-MAD11"}, {
+          "id": "OLG1",
+          "name": "OLHOLHOL-OLG1"
+        }, {"id": "GAR1", "name": "NGFVSJKO-GAR1"}, {"id": "SAN22", "name": "GNVLSCTL-SAN22"}, {
+          "id": "HRG1",
+          "name": "HRGHRGGS-HRG1"
+        }, {"id": "JCS1", "name": "JCSJSCJS-JCS1"}, {"id": "DHA12", "name": "WSXEDECF-DHA12"}, {
+          "id": "HJE1",
+          "name": "AOEEWWWD-HJE1"
+        }, {"id": "NCA1", "name": "NCANCANN-NCA1"}, {"id": "IOP1", "name": "iopclli1-IOP1"}, {
+          "id": "RTY1",
+          "name": "rtyclli1-RTY1"
+        }, {"id": "KAP1", "name": "HIOUYTRQ-KAP1"}, {"id": "ZEN1", "name": "ZENCLLI1-ZEN1"}, {
+          "id": "HKA1",
+          "name": "JAKHLASS-HKA1"
+        }, {"id": "CQK1", "name": "CQKSCAKK-CQK1"}, {"id": "SAI1", "name": "UBEKQLPD-SAI1"}, {
+          "id": "ERT1",
+          "name": "ertclli1-ERT1"
+        }, {"id": "IBB1", "name": "PLMKOIJU-IBB1"}, {"id": "TIR2", "name": "PLKINHYI-TIR2"}, {
+          "id": "HSD1",
+          "name": "CHASKCDS-HSD1"
+        }, {"id": "SLF78", "name": "SDCTLFN1-SLF78"}, {"id": "SEE78", "name": "SDCTEEE4-SEE78"}, {
+          "id": "SAN13",
+          "name": "TOKYJPFA-SAN13"
+        }, {"id": "SAA78", "name": "SDCTAAA1-SAA78"}, {"id": "LUC1", "name": "ATLDFGYC-LUC1"}, {
+          "id": "AMD13",
+          "name": "MEMATLAN-AMD13"
+        }, {"id": "TOR1", "name": "TOROONXN-TOR1"}, {"id": "QWE1", "name": "QWECLLI1-QWE1"}, {
+          "id": "ZOG1",
+          "name": "ZOGASTRO-ZOG1"
+        }, {"id": "CAL33", "name": "CALIFORN-CAL33"}, {"id": "SHH78", "name": "SDIT1HHH-SHH78"}, {
+          "id": "DSA1",
+          "name": "LKJHGFDS-DSA1"
+        }, {"id": "CLG1", "name": "CLGRABAD-CLG1"}, {"id": "BNA1", "name": "BNARAGBK-BNA1"}, {
+          "id": "ATL84",
+          "name": "CANTTCOC-ATL84"
+        }, {"id": "APP1", "name": "WBHGTYUI-APP1"}, {"id": "RJN1", "name": "RJNRBZAW-RJN1"}, {
+          "id": "EHH78",
+          "name": "SDCSHHH5-EHH78"
+        }, {"id": "mac10", "name": "PKGTESTF-mac10"}, {"id": "SXB78", "name": "SDCTGXB1-SXB78"}, {
+          "id": "SAX78",
+          "name": "SDCTAXG1-SAX78"
+        }, {"id": "SYD1", "name": "SYDNAUBV-SYD1"}, {"id": "TOK1", "name": "TOKYJPFA-TOK1"}, {
+          "id": "KGM2",
+          "name": "KGMTNC20-KGM2"
+        }, {"id": "DCC1b", "name": "POIUYTGH-DCC1b"}, {"id": "SKK78", "name": "SDCTKKK1-SKK78"}, {
+          "id": "SGG78",
+          "name": "SDCTGGG1-SGG78"
+        }, {"id": "SJJ78", "name": "SDCTJJJ1-SJJ78"}, {"id": "SBX78", "name": "SDCTBXG1-SBX78"}, {
+          "id": "LAG1",
+          "name": "LARGIZON-LAG1"
+        }, {"id": "IAA1", "name": "QAZXSWED-IAA1"}, {"id": "POI1", "name": "PLMNJKIU-POI1"}, {
+          "id": "LAG1a",
+          "name": "LARGIZON-LAG1a"
+        }, {"id": "PBL1", "name": "PBLAPBAI-PBL1"}, {"id": "LAG45", "name": "LARGIZON-LAG1a"}, {
+          "id": "MAR1",
+          "name": "MNBVCXZM-MAR1"
+        }, {"id": "HST70", "name": "HSTNTX70-HST70"}, {"id": "DCC1a", "name": "POIUYTGH-DCC1a"}, {
+          "id": "TOL1",
+          "name": "TOLDOH21-TOL1"
+        }, {"id": "LON1", "name": "LONEENCO-LON1"}, {"id": "SJU78", "name": "SDIT1JUB-SJU78"}, {
+          "id": "STN27",
+          "name": "HSTNTX01-STN27"
+        }, {"id": "SSW56", "name": "ss8126GT-SSW56"}, {"id": "SBB78", "name": "SDIT1BBB-SBB78"}, {
+          "id": "DCC3",
+          "name": "POIUYTGH-DCC3"
+        }, {"id": "GNV1", "name": "GNVLSCTL-GNV1"}, {"id": "WAS1", "name": "WASHDCSW-WAS1"}, {
+          "id": "TOY1",
+          "name": "TORYONNZ-TOY1"
+        }, {"id": "STT1", "name": "STTLWA02-STT1"}, {"id": "STG1", "name": "STTGGE62-STG1"}, {
+          "id": "SLL78",
+          "name": "SDCTLLL1-SLL78"
+        }, {"id": "SBU78", "name": "SDIT1BUB-SBU78"}, {"id": "ATL2", "name": "ATLNGANW-ATL2"}, {
+          "id": "BOT1",
+          "name": "BOTHWAKY-BOT1"
+        }, {"id": "SNG1", "name": "SNGPSIAU-SNG1"}, {"id": "NYC1", "name": "NYCMNY54-NYC1"}, {
+          "id": "LAG1b",
+          "name": "LARGIZON-LAG1b"
+        }, {"id": "AMD15", "name": "AMDFAA01-AMD15"}, {"id": "SNA1", "name": "SNANTXCA-SNA1"}, {
+          "id": "PLT1",
+          "name": "PLTNCA60-PLT1"
+        }, {"id": "TLP1", "name": "TLPNXM18-TLP1"}, {"id": "SDD81", "name": "SAIT1DD6-SDD81"}, {
+          "id": "DCC1",
+          "name": "POIUYTGH-DCC1"
+        }, {"id": "DCC2", "name": "POIUYTGH-DCC2"}, {"id": "OKC1", "name": "OKCBOK55-OKC1"}, {
+          "id": "PAR1",
+          "name": "PARSFRCG-PAR1"
+        }, {"id": "TES36", "name": "ABCEETES-TES36"}, {"id": "COM1", "name": "PLMKOPIU-COM1"}, {
+          "id": "ANI1",
+          "name": "ATLNGTRE-ANI1"
+        }, {"id": "SDG78", "name": "SDIT1BDG-SDG78"}, {"id": "mac20", "name": "PKGTESTF-mac20"}, {
+          "id": "DSF45",
+          "name": "DSFBG123-DSF45"
+        }, {"id": "HST25", "name": "HSTNTX01-HST25"}, {"id": "AMD18", "name": "AUDIMA01-AMD18"}, {
+          "id": "SAA80",
+          "name": "SAIT9AA3-SAA80"
+        }, {"id": "SSA56", "name": "SSIT2AA7-SSA56"}, {"id": "SDD82", "name": "SAIT1DD9-SDD82"}, {
+          "id": "JCV1",
+          "name": "JCVLFLBW-JCV1"
+        }, {"id": "SUL2", "name": "WERTYUJK-SUL2"}, {"id": "PUR1", "name": "purelyde-PUR1"}, {
+          "id": "FDE55",
+          "name": "FDERT555-FDE55"
+        }, {"id": "SITE", "name": "LONEENCO-SITE"}, {"id": "ATL1", "name": "ATLNGAMA-ATL1"}, {
+          "id": "JUL1",
+          "name": "ZXCVBNMM-JUL1"
+        }, {"id": "TAT34", "name": "TESAAISB-TAT34"}, {"id": "XCP12", "name": "CHKGH123-XCP12"}, {
+          "id": "RAI1",
+          "name": "poiuytre-RAI1"
+        }, {"id": "HPO1", "name": "ATLNGAUP-HPO1"}, {"id": "KJF12", "name": "KJFDH123-KJF12"}, {
+          "id": "SCC80",
+          "name": "SAIT9CC3-SCC80"
+        }, {"id": "SAA12", "name": "SAIT9AF8-SAA12"}, {"id": "SAA14", "name": "SAIT1AA9-SAA14"}, {
+          "id": "ATL35",
+          "name": "TTESSAAI-ATL35"
+        }, {"id": "CWY1", "name": "CWYMOWBS-CWY1"}, {"id": "ATL76", "name": "TELEPAAI-ATL76"}, {
+          "id": "DSL12",
+          "name": "DSLFK242-DSL12"
+        }, {"id": "ATL53", "name": "AAIATLTE-ATL53"}, {"id": "SAA11", "name": "SAIT9AA2-SAA11"}, {
+          "id": "ATL62",
+          "name": "TESSASCH-ATL62"
+        }, {"id": "AUG1", "name": "ASDFGHJK-AUG1"}, {"id": "POI22", "name": "POIUY123-POI22"}, {
+          "id": "SAA13",
+          "name": "SAIT1AA9-SAA13"
+        }, {"id": "BHY17", "name": "BHYTFRF3-BHY17"}, {"id": "LIS1", "name": "HOSTPROF-LIS1"}, {
+          "id": "SIP1",
+          "name": "ZXCVBNMK-SIP1"
+        }, {"id": "ATL99", "name": "TEESTAAI-ATL43"}, {"id": "ATL64", "name": "FORLOAAJ-ATL64"}, {
+          "id": "TAT33",
+          "name": "TESAAISA-TAT33"
+        }, {"id": "RAD10", "name": "INDIPUNE-RAD10"}, {"id": "RTW5", "name": "BHYTFRY4-RTW5"}, {
+          "id": "JGS1",
+          "name": "KSJKKKKK-JGS1"
+        }, {"id": "ATL98", "name": "TEESTAAI-ATL43"}, {"id": "WAN1", "name": "LEIWANGW-WAN1"}, {
+          "id": "ATL44",
+          "name": "ATLSANAB-ATL44"
+        }, {"id": "RTD2", "name": "BHYTFRk4-RTD2"}, {"id": "NIR1", "name": "ORFLMANA-NIR1"}, {
+          "id": "ATL75",
+          "name": "SANAAIRE-ATL75"
+        }, {"id": "NUM1", "name": "QWERTYUI-NUM1"}, {"id": "MTN32", "name": "MDTWNJ21-MTN32"}, {
+          "id": "RTZ4",
+          "name": "BHYTFRZ6-RTZ4"
+        }, {"id": "ATL56", "name": "ATLSANAC-ATL56"}, {"id": "AMS1", "name": "AMSTNLBW-AMS1"}, {
+          "id": "RCT1",
+          "name": "AMSTERNL-RCT1"
+        }, {"id": "JAN1", "name": "ORFLMATT-JAN1"}, {"id": "ABC14", "name": "TESAAISA-ABC14"}, {
+          "id": "TAT37",
+          "name": "TESAAISD-TAT37"
+        }, {"id": "MIC54", "name": "MICHIGAN-MIC54"}, {"id": "ABC11", "name": "ATLSANAI-ABC11"}, {
+          "id": "AMF11",
+          "name": "AMDOCS01-AMF11"
+        }, {"id": "ATL63", "name": "ATLSANEW-ATL63"}, {"id": "ABC12", "name": "ATLSECIA-ABC12"}, {
+          "id": "MTN20",
+          "name": "MDTWNJ21-MTN20"
+        }, {"id": "ABC15", "name": "AAITESAN-ABC15"}, {"id": "AVT1", "name": "AVTRFLHD-AVT1"}, {
+          "id": "ATL34",
+          "name": "ATLSANAI-ATL34"
+        }],
+        "categoryParameters": {
+          "owningEntityList": [{
+            "id": "aaa1",
+            "name": "aaa1"
+          }, {"id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "name": "WayneHolland"}, {
+            "id": "Melissa",
+            "name": "Melissa"
+          }],
+          "projectList": [{"id": "WATKINS", "name": "WATKINS"}, {"id": "x1", "name": "x1"}, {"id": "yyy1", "name": "yyy1"}],
+          "lineOfBusinessList": [{"id": "ONAP", "name": "ONAP"}, {"id": "zzz1", "name": "zzz1"}],
+          "platformList": [{"id": "platform", "name": "platform"}, {"id": "xxx1", "name": "xxx1"}]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [{
+          "id": "CAR_2020_ER",
+          "name": "CAR_2020_ER",
+          "isPermitted": true
+        }, {
+          "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+          "name": "JULIO ERICKSON",
+          "isPermitted": false
+        }, {
+          "id": "DHV1707-TestSubscriber-2",
+          "name": "DALE BRIDGES",
+          "isPermitted": false
+        }, {"id": "DHV1707-TestSubscriber-1", "name": "LLOYD BRIDGES", "isPermitted": false}, {
+          "id": "jimmy-example",
+          "name": "JimmyExampleCust-20161102",
+          "isPermitted": false
+        }, {
+          "id": "jimmy-example2",
+          "name": "JimmyExampleCust-20161103",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-102",
+          "name": "ERICA5779-TestSub-PWT-102",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-101",
+          "name": "ERICA5779-TestSub-PWT-101",
+          "isPermitted": false
+        }, {
+          "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "name": "Emanuel",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-Subscriber-4",
+          "name": "ERICA5779-Subscriber-5",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-103",
+          "name": "ERICA5779-TestSub-PWT-103",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-Subscriber-2",
+          "name": "ERICA5779-Subscriber-2",
+          "isPermitted": false
+        }, {
+          "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "name": "SILVIA ROBBINS",
+          "isPermitted": true
+        }, {
+          "id": "ERICA5779-Subscriber-3",
+          "name": "ERICA5779-Subscriber-3",
+          "isPermitted": false
+        }, {"id": "31739f3e-526b-11e6-beb8-9e71128cae77", "name": "CRAIG/ROBERTS", "isPermitted": false}]
+      }
+    };
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('Service popup service', () => {
+  let injector;
+  let service: ServicePopupService;
+  let genericFormService: GenericFormService;
+  let defaultDataGeneratorService: DefaultDataGeneratorService;
+  let fb: FormBuilder;
+  let iframeService: IframeService;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      providers : [
+        ServicePopupService,
+        BasicControlGenerator,
+        ServiceControlGenerator,
+        DefaultDataGeneratorService,
+        GenericFormService,
+        FormBuilder,
+        IframeService,
+        AaiService,
+        LogService,
+        BasicPopupService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockReduxStore},
+        {provide: HttpClient, useClass: MockAppStore},
+        {provide: SdcUiServices.ModalService, useClass: MockModalService}
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(ServicePopupService);
+    genericFormService = injector.get(GenericFormService);
+    defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
+    fb = injector.get(FormBuilder);
+    iframeService = injector.get(IframeService);
+
+  })().then(done).catch(done.fail));
+
+  test('getTitle should return the correct title for edit and create mode', () => {
+    expect(service.getTitle(true)).toBe('Edit service instance');
+    expect(service.getTitle(false)).toBe('Set a new service instance');
+  });
+
+  test('getSubLeftTitle should return service model name', () => {
+    service.uuidData = {
+      serviceId : '6b528779-44a3-4472-bdff-9cd15ec93450'
+    };
+    expect(service.getSubLeftTitle()).toBe('action-data');
+  });
+
+  test('getSubRightTitle should return popup type', () => {
+    expect(service.getSubRightTitle()).toBe('Service Instance Details');
+  });
+
+  test('getModelInformation should update modelInformations', () => {
+    const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+
+    service.getModelInformation(serviceId);
+    expect(service.modelInformations.length).toEqual(7);
+
+    expect(service.modelInformations[0].label).toEqual("Model version");
+    expect(service.modelInformations[0].values).toEqual(['1.0']);
+
+    expect(service.modelInformations[1].label).toEqual("Description");
+    expect(service.modelInformations[1].values).toEqual(['some description']);
+
+    expect(service.modelInformations[2].label).toEqual("Category");
+    expect(service.modelInformations[2].values).toEqual(['some category']);
+
+    expect(service.modelInformations[3].label).toEqual("UUID");
+    expect(service.modelInformations[3].values).toEqual(['6b528779-44a3-4472-bdff-9cd15ec93450']);
+
+    expect(service.modelInformations[4].label).toEqual("Invariant UUID");
+    expect(service.modelInformations[4].values).toEqual(['e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0']);
+
+    expect(service.modelInformations[5].label).toEqual("Service type");
+    expect(service.modelInformations[5].values).toEqual(['some service type']);
+
+    expect(service.modelInformations[6].label).toEqual("Service role");
+    expect(service.modelInformations[6].values).toEqual(['some service role']);
+  });
+
+
+  test('onCancel should trigger closeDialogEvent and iframe', () => {
+    let that = <any>{
+      parentElementClassName: 'content',
+      _iframeService: iframeService,
+      resetPopupData : () =>{
+
+      }
+    };
+    jest.spyOn(iframeService, 'removeClassCloseModal');
+    jest.spyOn(service.closeDialogEvent, 'next');
+    service.onCancel(that, fb.group({}));
+
+    expect(that._iframeService.removeClassCloseModal).toHaveBeenCalledWith(that.parentElementClassName)
+    expect(service.closeDialogEvent.next).toHaveBeenCalledWith(that);
+  });
+
+
+  test('getDynamicInputs should return list of controls' ,() => {
+    const result:  FormControlModel[] = service.getDynamicInputs('6b528779-44a3-4472-bdff-9cd15ec93450');
+    console.log(result);
+    expect(result.length).toEqual(4);
+    expect(result[0].controlName).toEqual('2017488_adiodvpe0_ASN_1');
+    expect(result[1].controlName).toEqual('2017488_adiodvpe0_ASN_2');
+    expect(result[2].controlName).toEqual('2017488_adiodvpe0_ASN_3');
+    expect(result[3].controlName).toEqual('2017488_adiodvpe0_ASN_4');
+
+    expect(result[0].dataTestId).toEqual('2017488_adiodvpe0_ASN_1');
+    expect(result[1].dataTestId).toEqual('2017488_adiodvpe0_ASN_2');
+    expect(result[2].dataTestId).toEqual('2017488_adiodvpe0_ASN_3');
+    expect(result[3].dataTestId).toEqual('2017488_adiodvpe0_ASN_4');
+
+    expect(result[0].validations.length).toEqual(1);
+    expect(result[1].validations.length).toEqual(1);
+    expect(result[2].validations.length).toEqual(0);
+    expect(result[3].validations.length).toEqual(1);
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.ts
new file mode 100644
index 0000000..dc83083
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/service/service.popup.service.ts
@@ -0,0 +1,184 @@
+import {Injectable} from "@angular/core";
+import {GenericPopupInterface} from "../generic-popup.interface";
+import {ServiceModel} from "../../../../models/serviceModel";
+import {ModelInformationItem} from "../../../model-information/model-information.component";
+import {Subject} from "rxjs";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {IframeService} from "../../../../utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../../../store/reducers";
+import {ServiceControlGenerator} from "../../../genericForm/formControlsServices/service.control.generator";
+import {FormGroup} from "@angular/forms";
+import {Constants} from "../../../../utils/constants";
+import {ServiceInstance} from "../../../../models/serviceInstance";
+import {ModelInfo} from "../../../../models/modelInfo";
+import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
+import {
+  ServiceActions,
+  createServiceInstance,
+  updateServiceInstance
+} from "../../../../storeUtil/utils/service/service.actions";
+import {ServiceInstanceActions} from "../../../../models/serviceInstanceActions";
+import * as _ from 'lodash';
+@Injectable()
+export class ServicePopupService implements GenericPopupInterface {
+  dynamicInputs: any;
+  instance: any;
+  model: any;
+  serviceModel: ServiceModel;
+  modelInformations: ModelInformationItem[] = [];
+  uuidData: Object;
+  closeDialogEvent: Subject<any> = new Subject<any>();
+  isUpdateMode: boolean;
+
+
+
+  constructor(private _basicControlGenerator: BasicControlGenerator,
+              private _serviceControlGenerator: ServiceControlGenerator,
+              private _iframeService: IframeService,
+              private _defaultDataGeneratorService: DefaultDataGeneratorService,
+              private _aaiService: AaiService,
+              private _basicPopupService : BasicPopupService,
+              private _store: NgRedux<AppState>) {
+
+  }
+
+  getGenericFormPopupDetails(serviceId: string, modelName: string, storeKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
+    this.uuidData = uuidData;
+    this.instance = this.getInstance(serviceId);
+    this.getModelInformation(serviceId);
+    return new FormPopupDetails(this,
+      PopupType.SERVICE,
+      uuidData,
+      this.getTitle(isUpdateMode),
+      this.getSubLeftTitle(),
+      this.getSubRightTitle(),
+      this.getControls(serviceId),
+      this.getDynamicInputs(serviceId),
+      this.modelInformations,
+      (that, form: FormGroup) => {that.onSubmit(that, form);},
+      (that: any, form: FormGroup) => {that.onCancel(that, form); }
+    );
+  }
+
+  getDynamicInputs(serviceId) : FormControlModel[]{
+    let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[serviceId].service.inputs);
+    return this._basicControlGenerator.getServiceDynamicInputs(dynamic, serviceId);
+  }
+
+
+  getControls(serviceId: string) {
+    if(this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') {
+      return this._serviceControlGenerator.getMacroFormControls(serviceId, this.dynamicInputs);
+    }else {
+      return this._serviceControlGenerator.getAlaCartControls(serviceId, this.dynamicInputs);
+    }
+  }
+
+  getInstance(serviceId): ServiceInstance {
+    let result: ServiceInstance = null;
+    if(!_.isNil(this._store.getState().service.serviceInstance[serviceId])){
+      result = this._store.getState().service.serviceInstance[serviceId];
+    }
+    return result;
+  }
+
+  getModelInformation(serviceId: string): void {
+    this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
+      this.serviceModel = new ServiceModel(result);
+
+      this.model = this._store.getState().service.serviceHierarchy[serviceId];
+      this.modelInformations = [
+          new ModelInformationItem("Model version", "modelVersion", [this.serviceModel.version], "", true),
+          new ModelInformationItem("Description", "description", [this.serviceModel.description]),
+          new ModelInformationItem("Category", "category", [this.serviceModel.category]),
+          new ModelInformationItem("UUID", "uuid", [this.serviceModel.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
+          new ModelInformationItem("Invariant UUID", "invariantUuid", [this.serviceModel.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
+          new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
+          new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole])
+      ];
+    });
+  }
+
+  getSubLeftTitle(): string {
+    return this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].service.name;
+  }
+
+  getSubRightTitle(): string {
+    return "Service Instance Details";
+  }
+
+  getTitle(isUpdateMode: boolean): string {
+    return isUpdateMode ? "Edit service instance" :  "Set a new service instance";
+  }
+
+  onCancel(that, form): void {
+    form.reset();
+    that._iframeService.removeClassCloseModal('content');
+    this.closeDialogEvent.next(that);
+  }
+
+  onSubmit(that, form: FormGroup, ...args): void {
+    form = that.updateExtraValues(that, form);
+    that.storeServiceInstance(form.value, args[0], [], new ModelInfo(that.serviceModel), that.serviceModel);
+    window.parent.postMessage( {
+      eventId: 'submitIframe',
+      data: {
+        serviceModelId: that.serviceModel.uuid
+      }
+    }, "*");
+    this.onCancel(that, form);
+  }
+
+  updateExtraValues = (that, form) : any => {
+    const service = that._store.getState().service;
+    form.value['bulkSize'] = that.uuidData['bulkSize'];
+    form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
+    form.value['aicZoneName'] = !_.isNil(form.value['aicZoneId']) ?this.getNameFromListById(service.aicZones, form.value['aicZoneId']) : null;
+    form.value['owningEntityName'] = !_.isNil(form.value['owningEntityId']) ?this.getNameFromListById(service.categoryParameters.owningEntityList, form.value['owningEntityId']) : null;
+    form.value['testApi'] = sessionStorage.getItem("msoRequestParametersTestApiValue");
+    form.value['tenantName'] = this.getNameFromListById(service.lcpRegionsAndTenants.lcpRegionsTenantsMap[form.value['lcpCloudRegionId']], form.value['tenantId']);
+    return form;
+  };
+
+  getNameFromListById(list, id) {
+    if(list && id) {
+      return list.find(item => item.id === id).name;
+    }
+    return null;
+  }
+
+  storeServiceInstance = (formValues:any, servicesQty:number, dynamicInputs:any, serviceModel:ModelInfo, serviceDetails: any ) => {
+    formValues.bulkSize = this.uuidData['bulkSize'];
+    formValues.modelInfo = serviceModel;
+    let instantiationType = this._store.getState().service.serviceHierarchy[serviceModel.modelVersionId].service.instantiationType;
+    this.setIsALaCarte(formValues, instantiationType);
+    this.setTestApi(formValues);
+    Object.assign(formValues, serviceDetails);
+    let isCreateMode: boolean = this._store.getState().service.serviceInstance[serviceModel.modelVersionId] == null;
+    if(isCreateMode){
+      this._store.dispatch(createServiceInstance(formValues, serviceModel.modelVersionId));
+    }else {
+      this._store.dispatch(updateServiceInstance(formValues, serviceModel.modelVersionId));
+    }
+
+    if (this._store.getState().global.flags['FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD'] && isCreateMode) {
+      this._defaultDataGeneratorService.updateReduxOnFirstSet(serviceModel.modelVersionId, formValues);
+    }
+  };
+
+  setIsALaCarte = (formValues: any, instantiationType) => {
+    formValues.isALaCarte = instantiationType === 'A-La-Carte';
+  };
+
+  setTestApi = (formValues: any) =>{
+    if (this._store.getState().global.flags['FLAG_ADD_MSO_TESTAPI_FIELD'] && formValues.isAlaCarte) {
+      formValues.testApi = sessionStorage.getItem("msoRequestParametersTestApiValue");
+    }
+  };
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.spec.ts
new file mode 100644
index 0000000..3794707
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.spec.ts
@@ -0,0 +1,2407 @@
+import {LogService} from "../../../../utils/log/log.service";
+import {NgRedux} from "@angular-redux/store";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {HttpClient} from "@angular/common/http";
+import {GenericFormService} from "../../../genericForm/generic-form.service";
+import {FormBuilder} from "@angular/forms";
+import {IframeService} from "../../../../utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {VfModulePopuopService} from "./vfModule.popuop.service";
+import {VfModuleControlGenerator} from "../../../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator";
+import {SdcUiServices} from "onap-ui-angular";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+import {getTestBed, TestBed} from "@angular/core/testing";
+
+class MockModalService<T> {}
+
+class MockAppStore<T> {}
+
+class MockReduxStore<T> {
+  getState() {
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "FLAG_ADVANCED_PORTS_FILTER": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_REGION_ID_FROM_REMOTE": true,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {}
+            },
+            "vnfs": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "ecomp_generated_naming": "false",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VF",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "netowrk_role": "role 1, role 2, role 3",
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "service": {
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "action-data",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "",
+              "serviceEcompNaming": "false",
+              "instantiationType": "A-La-Carte",
+              "inputs": {
+                "2017488_adiodvpe0_ASN": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": "AV_vPE"
+                }
+              }
+            },
+            "vnfs": {
+              "2017-388_ADIOD-vPE 1": {
+                "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+                "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "1.0",
+                "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-388_ADIOD-vPE 0": {
+                "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "4.0",
+                "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-488_ADIOD-vPE 0": {
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-488_ADIOD-vPE",
+                "version": "5.0",
+                "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {"displayName": "bandwidth", "command": "get_input", "inputName": "adiodvpe0_bandwidth"},
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {"displayName": "ASN", "command": "get_input", "inputName": "2017488_adiodvpe0_ASN"},
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "max_instances": "3",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    },
+                    "volumeGroupAllowed": true
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                    "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                    "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                    "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "version": "5",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "ADIOD_base_vPE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    }
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {},
+                "properties": {
+                  "network_role" : "network role 1, network role 2",
+                  "min_instances": 1,
+                  "max_instances": 10,
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {},
+            "fabricConfigurations": {},
+            "serviceProxies": {},
+            "vfModules": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"},
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                },
+                "volumeGroupAllowed": true
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "version": "5",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "ADIOD_base_vPE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {"sourceType": "HEAT", "vfModuleLabel": "ADIOD_vRE_BV", "paramName": "AIC_CLLI"},
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                }
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "vnfs": {
+              "VF_vMee 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                      "isMissingData": false,
+                      "sdncPreReload": null,
+                      "modelInfo": {
+                        "modelType": "VFmodule",
+                        "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                        "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                        "modelName": "VfVmee..base_vmme..module-0",
+                        "modelVersion": "2",
+                        "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                        "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                      },
+                      "instanceParams": [{}],
+                      "trackById": "wmtm6sy2uj"
+                    }
+                  }
+                },
+                "isMissingData": true,
+                "originalName": "VF_vMee 0",
+                "vnfStoreKey": "VF_vMee 0",
+                "trackById": "p3wk448m5do",
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+                "lcpCloudRegionId": null,
+                "tenantId": null,
+                "lineOfBusiness": null,
+                "platformName": null,
+                "modelInfo": {
+                  "modelType": "VF",
+                  "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+                  "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+                  "modelName": "VF_vMee",
+                  "modelVersion": "2.0",
+                  "modelCustomizationName": "VF_vMee 0"
+                }
+              }
+            },
+            "networks": {},
+            "instanceParams": [{}],
+            "validationCounter": 1,
+            "existingNames": {},
+            "existingVNFCounterMap": {"d6557200-ecf2-4641-8094-5393ae3aae60": 1},
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": "hvf6",
+            "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "aicZoneId": "JAG1",
+            "projectName": "x1",
+            "rollbackOnFailure": "true",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "ComplexService",
+              "modelVersion": "1.0",
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+            },
+            "isALaCarte": false,
+            "name": "ComplexService",
+            "version": "1.0",
+            "description": "ComplexService",
+            "category": "Emanuel",
+            "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "networks": {
+              "ExtVL 0": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "sf3zth68xjf",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0:0001": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "2mdxioxca9h",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0_1": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0_1",
+                "trackById": "z7vd1gmpbs",
+                "instanceName": "ExtVL",
+                "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "zzz1",
+                "instanceParams": [{
+                  "vnf_config_template_version": "17.2",
+                  "bandwidth_units": "Gbps",
+                  "bandwidth": "10",
+                  "AIC_CLLI": "ATLMY8GA",
+                  "ASN": "AV_vPE",
+                  "vnf_instance_name": "yoav"
+                }],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              }
+            },
+            "vnfs": {
+              "2017-488_ADIOD-vPE 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": {
+                      "instanceName": "yoav",
+                      "volumeGroupName": "123",
+                      "modelInfo": {
+                        "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                        "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                        "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "modelVersion": "6",
+                        "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                        "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                      },
+                      "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                      "isMissingData": false,
+                      "instanceParams": [{
+                        "adiodvpe0_bandwidth": "10",
+                        "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6",
+                        "2017488_adiodvpe0_vnf_config_template_version": "17.2",
+                        "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA",
+                        "adiodvpe0_bandwidth_units": "Gbps"
+                      }]
+                    }
+                  }
+                },
+                "isMissingData": false,
+                "originalName": "2017-488_ADIOD-vPE 0",
+                "vnfStoreKey": "2017-488_ADIOD-vPE 0",
+                "trackById": "o65b26t2thj",
+                "instanceName": "2017488_ADIODvPE",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "platformName": "platform",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [{}],
+                "modelInfo": {
+                  "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                  "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                  "modelName": "2017-488_ADIOD-vPE",
+                  "modelVersion": "5.0",
+                  "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                  "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                  "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+                },
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+              }
+            },
+            "instanceParams": [{"2017488_adiodvpe0_ASN": "AV_vPE"}],
+            "validationCounter": 0,
+            "existingNames": {"123": "", "instancename": "", "yoav": "", "extvl": ""},
+            "existingVNFCounterMap": {"69e09f68-8b63-4cc9-b9ff-860960b5db09": 1},
+            "existingNetworksCounterMap": {"ddc3f20c-08b5-40fd-af72-c6d14636b986": 3},
+            "instanceName": "InstanceName",
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "aicZoneId": "JAG1",
+            "projectName": null,
+            "rollbackOnFailure": "true",
+            "aicZoneName": "YUDFJULP-JAG1",
+            "owningEntityName": "WayneHolland",
+            "testApi": "GR_API",
+            "tenantName": "USP-SIP-IC-24335-T-01",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "modelName": "action-data",
+              "modelVersion": "1.0",
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+            },
+            "isALaCarte": false,
+            "name": "action-data",
+            "version": "1.0",
+            "description": "",
+            "category": "",
+            "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          }
+        },
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [{
+            "id": "JANET25",
+            "name": "JANET25",
+            "isPermitted": true
+          }, {"id": "hvf6", "name": "hvf6", "isPermitted": true}],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [{
+              "id": "092eb9e8e4b7412e8787dd091bc58e86",
+              "name": "USP-SIP-IC-24335-T-01",
+              "isPermitted": true
+            }],
+            "hvf6": [{
+              "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+              "name": "AIN Web Tool-15-D-testalexandria",
+              "isPermitted": true
+            }, {
+              "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+              "name": "AIN Web Tool-15-D-STTest2",
+              "isPermitted": true
+            }, {
+              "id": "1178612d2b394be4834ad77f567c0af2",
+              "name": "AIN Web Tool-15-D-SSPtestcustome",
+              "isPermitted": true
+            }, {
+              "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+              "name": "AIN Web Tool-15-D-UncheckedEcopm",
+              "isPermitted": true
+            }, {
+              "id": "de007636e25249238447264a988a927b",
+              "name": "AIN Web Tool-15-D-dfsdf",
+              "isPermitted": true
+            }, {
+              "id": "62f29b3613634ca6a3065cbe0e020c44",
+              "name": "AIN/SMS-16-D-Multiservices1",
+              "isPermitted": true
+            }, {
+              "id": "649289e30d3244e0b48098114d63c2aa",
+              "name": "AIN Web Tool-15-D-SSPST66",
+              "isPermitted": true
+            }, {
+              "id": "3f21eeea6c2c486bba31dab816c05a32",
+              "name": "AIN Web Tool-15-D-ASSPST47",
+              "isPermitted": true
+            }, {
+              "id": "f60ce21d3ee6427586cff0d22b03b773",
+              "name": "CESAR-100-D-sspjg67246",
+              "isPermitted": true
+            }, {
+              "id": "8774659e425f479895ae091bb5d46560",
+              "name": "CESAR-100-D-sspjg68359",
+              "isPermitted": true
+            }, {
+              "id": "624eb554b0d147c19ff8885341760481",
+              "name": "AINWebTool-15-D-iftach",
+              "isPermitted": true
+            }, {
+              "id": "214f55f5fc414c678059c383b03e4962",
+              "name": "CESAR-100-D-sspjg612401",
+              "isPermitted": true
+            }, {
+              "id": "c90666c291664841bb98e4d981ff1db5",
+              "name": "CESAR-100-D-sspjg621340",
+              "isPermitted": true
+            }, {
+              "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+              "name": "sspjg621351cloned",
+              "isPermitted": true
+            }, {
+              "id": "b386b768a3f24c8e953abbe0b3488c02",
+              "name": "AINWebTool-15-D-eteancomp",
+              "isPermitted": true
+            }, {
+              "id": "dc6c4dbfd225474e9deaadd34968646c",
+              "name": "AINWebTool-15-T-SPFET",
+              "isPermitted": true
+            }, {
+              "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+              "name": "AINWebTool-15-X-eeweww",
+              "isPermitted": true
+            }, {
+              "id": "f2f3830e4c984d45bcd00e1a04158a79",
+              "name": "CESAR-100-D-spjg61909",
+              "isPermitted": true
+            }, {
+              "id": "05b91bd5137f4929878edd965755c06d",
+              "name": "CESAR-100-D-sspjg621512cloned",
+              "isPermitted": true
+            }, {
+              "id": "7002fbe8482d4a989ddf445b1ce336e0",
+              "name": "AINWebTool-15-X-vdr",
+              "isPermitted": true
+            }, {
+              "id": "4008522be43741dcb1f5422022a2aa0b",
+              "name": "AINWebTool-15-D-ssasa",
+              "isPermitted": true
+            }, {
+              "id": "f44e2e96a1b6476abfda2fa407b00169",
+              "name": "AINWebTool-15-D-PFNPT",
+              "isPermitted": true
+            }, {
+              "id": "b69a52bec8a84669a37a1e8b72708be7",
+              "name": "AINWebTool-15-X-vdre",
+              "isPermitted": true
+            }, {
+              "id": "fac7d9fd56154caeb9332202dcf2969f",
+              "name": "AINWebTool-15-X-NONPODECOMP",
+              "isPermitted": true
+            }, {
+              "id": "2d34d8396e194eb49969fd61ffbff961",
+              "name": "DN5242-Nov16-T5",
+              "isPermitted": true
+            }, {
+              "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+              "name": "ro-T11",
+              "isPermitted": true
+            }, {
+              "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+              "name": "ro-T112",
+              "isPermitted": true
+            }, {
+              "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+              "name": "DN5242-Nov21-T1",
+              "isPermitted": true
+            }, {
+              "id": "d0a3e3f2964542259d155a81c41aadc3",
+              "name": "test-hvf6-09",
+              "isPermitted": true
+            }, {"id": "cbb99fe4ada84631b7baf046b6fd2044", "name": "DN5242-Nov16-T3", "isPermitted": true}]
+          }
+        },
+        "productFamilies": [{
+          "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+          "name": "SCOTTIE",
+          "isPermitted": true
+        }, {
+          "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+          "name": "IGNACIO",
+          "isPermitted": true
+        }, {
+          "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+          "name": "Christie",
+          "isPermitted": true
+        }, {
+          "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+          "name": "Enhanced Services",
+          "isPermitted": true
+        }, {"id": "vTerrance", "name": "vTerrance", "isPermitted": true}, {
+          "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+          "name": "vSCP",
+          "isPermitted": true
+        }, {
+          "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "name": "Emanuel",
+          "isPermitted": true
+        }, {
+          "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+          "name": "BVOIP",
+          "isPermitted": true
+        }, {"id": "db171b8f-115c-4992-a2e3-ee04cae357e0", "name": "LINDSEY", "isPermitted": true}, {
+          "id": "LRSI-OSPF",
+          "name": "LRSI-OSPF",
+          "isPermitted": true
+        }, {"id": "vRosemarie", "name": "HNGATEWAY", "isPermitted": true}, {
+          "id": "vHNPaas",
+          "name": "WILKINS",
+          "isPermitted": true
+        }, {
+          "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "name": "TYLER SILVIA",
+          "isPermitted": true
+        }, {"id": "b6a3f28c-eebf-494c-a900-055cc7c874ce", "name": "VROUTER", "isPermitted": true}, {
+          "id": "Cisneros",
+          "name": "vMuriel",
+          "isPermitted": true
+        }, {
+          "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+          "name": "CARA Griffin",
+          "isPermitted": true
+        }, {
+          "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+          "name": "DARREN MCGEE",
+          "isPermitted": true
+        }, {"id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1", "name": "Transport", "isPermitted": true}, {
+          "id": "vSalvatore",
+          "name": "vSalvatore",
+          "isPermitted": true
+        }, {"id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4", "name": "Josefina", "isPermitted": true}, {
+          "id": "vHubbard",
+          "name": "vHubbard",
+          "isPermitted": true
+        }, {"id": "12a96a9d-4b4c-4349-a950-fe1159602621", "name": "DARREN MCGEE", "isPermitted": true}],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [{
+            "id": "0",
+            "name": "vRichardson",
+            "isPermitted": false
+          }, {"id": "1", "name": "TYLER SILVIA", "isPermitted": true}, {
+            "id": "2",
+            "name": "Emanuel",
+            "isPermitted": false
+          }, {"id": "3", "name": "vJamie", "isPermitted": false}, {
+            "id": "4",
+            "name": "vVoiceMail",
+            "isPermitted": false
+          }, {"id": "5", "name": "Kennedy", "isPermitted": false}, {
+            "id": "6",
+            "name": "vSEGW",
+            "isPermitted": false
+          }, {"id": "7", "name": "vVM", "isPermitted": false}, {
+            "id": "8",
+            "name": "vOTA",
+            "isPermitted": false
+          }, {"id": "9", "name": "vMME", "isPermitted": false}, {
+            "id": "10",
+            "name": "vMNS",
+            "isPermitted": false
+          }, {"id": "11", "name": "vSCP", "isPermitted": false}, {
+            "id": "12",
+            "name": "VPMS",
+            "isPermitted": false
+          }, {"id": "13", "name": "vMMSC", "isPermitted": false}, {
+            "id": "14",
+            "name": "SSD",
+            "isPermitted": false
+          }, {"id": "15", "name": "vMOG", "isPermitted": false}, {
+            "id": "16",
+            "name": "LINDSEY",
+            "isPermitted": false
+          }, {"id": "17", "name": "JOHANNA_SANTOS", "isPermitted": false}, {
+            "id": "18",
+            "name": "vCarroll",
+            "isPermitted": false
+          }]
+        },
+        "aicZones": [{"id": "NFT1", "name": "NFTJSSSS-NFT1"}, {"id": "JAG1", "name": "YUDFJULP-JAG1"}, {
+          "id": "YYY1",
+          "name": "UUUAIAAI-YYY1"
+        }, {"id": "BAN1", "name": "VSDKYUTP-BAN1"}, {"id": "DKJ1", "name": "DKJSJDKA-DKJ1"}, {
+          "id": "MCS1",
+          "name": "ASACMAMS-MCS1"
+        }, {"id": "UIO1", "name": "uioclli1-UIO1"}, {"id": "RAJ1", "name": "YGBIJNLQ-RAJ1"}, {
+          "id": "OPA1",
+          "name": "opaclli1-OPA1"
+        }, {"id": "SDE1", "name": "ZXCVBNMA-SDE1"}, {"id": "VEN2", "name": "FGHJUHIL-VEN2"}, {
+          "id": "ORL1",
+          "name": "ORLDFLMA-ORL1"
+        }, {"id": "JAD1", "name": "JADECLLI-JAD1"}, {"id": "ZXL1", "name": "LWLWCANN-ZXL1"}, {
+          "id": "CKL1",
+          "name": "CLKSKCKK-CKL1"
+        }, {"id": "SDF1", "name": "sdfclli1-SDF1"}, {"id": "RAD1", "name": "RADICAL1-RAD1"}, {
+          "id": "KIT1",
+          "name": "BHYJFGLN-KIT1"
+        }, {"id": "REL1", "name": "INGERFGT-REL1"}, {"id": "JNL1", "name": "CJALSDAC-JNL1"}, {
+          "id": "OLK1",
+          "name": "OLKOLKLS-OLK1"
+        }, {"id": "CHI1", "name": "CHILLIWE-CHI1"}, {"id": "UUU4", "name": "UUUAAAUU-UUU4"}, {
+          "id": "TUF1",
+          "name": "TUFCLLI1-TUF1"
+        }, {"id": "KJN1", "name": "CKALDKSA-KJN1"}, {"id": "SAM1", "name": "SNDGCA64-SAN1"}, {
+          "id": "SCK1",
+          "name": "SCKSCKSK-SCK1"
+        }, {"id": "HJH1", "name": "AOEEQQQD-HJH1"}, {"id": "HGD1", "name": "SDFQWHGD-HGD1"}, {
+          "id": "KOR1",
+          "name": "HYFLNBVT-KOR1"
+        }, {"id": "ATL43", "name": "AICLOCID-ATL43"}, {"id": "ATL54", "name": "AICFTAAI-ATL54"}, {
+          "id": "ATL66",
+          "name": "CLLIAAII-ATL66"
+        }, {"id": "VEL1", "name": "BNMLKUIK-VEL1"}, {"id": "ICC1", "name": "SANJITAT-ICC1"}, {
+          "id": "MNT11",
+          "name": "WSXEFBTH-MNT11"
+        }, {"id": "DEF2", "name": "WSBHGTYL-DEF2"}, {"id": "MAD11", "name": "SDFQWGKL-MAD11"}, {
+          "id": "OLG1",
+          "name": "OLHOLHOL-OLG1"
+        }, {"id": "GAR1", "name": "NGFVSJKO-GAR1"}, {"id": "SAN22", "name": "GNVLSCTL-SAN22"}, {
+          "id": "HRG1",
+          "name": "HRGHRGGS-HRG1"
+        }, {"id": "JCS1", "name": "JCSJSCJS-JCS1"}, {"id": "DHA12", "name": "WSXEDECF-DHA12"}, {
+          "id": "HJE1",
+          "name": "AOEEWWWD-HJE1"
+        }, {"id": "NCA1", "name": "NCANCANN-NCA1"}, {"id": "IOP1", "name": "iopclli1-IOP1"}, {
+          "id": "RTY1",
+          "name": "rtyclli1-RTY1"
+        }, {"id": "KAP1", "name": "HIOUYTRQ-KAP1"}, {"id": "ZEN1", "name": "ZENCLLI1-ZEN1"}, {
+          "id": "HKA1",
+          "name": "JAKHLASS-HKA1"
+        }, {"id": "CQK1", "name": "CQKSCAKK-CQK1"}, {"id": "SAI1", "name": "UBEKQLPD-SAI1"}, {
+          "id": "ERT1",
+          "name": "ertclli1-ERT1"
+        }, {"id": "IBB1", "name": "PLMKOIJU-IBB1"}, {"id": "TIR2", "name": "PLKINHYI-TIR2"}, {
+          "id": "HSD1",
+          "name": "CHASKCDS-HSD1"
+        }, {"id": "SLF78", "name": "SDCTLFN1-SLF78"}, {"id": "SEE78", "name": "SDCTEEE4-SEE78"}, {
+          "id": "SAN13",
+          "name": "TOKYJPFA-SAN13"
+        }, {"id": "SAA78", "name": "SDCTAAA1-SAA78"}, {"id": "LUC1", "name": "ATLDFGYC-LUC1"}, {
+          "id": "AMD13",
+          "name": "MEMATLAN-AMD13"
+        }, {"id": "TOR1", "name": "TOROONXN-TOR1"}, {"id": "QWE1", "name": "QWECLLI1-QWE1"}, {
+          "id": "ZOG1",
+          "name": "ZOGASTRO-ZOG1"
+        }, {"id": "CAL33", "name": "CALIFORN-CAL33"}, {"id": "SHH78", "name": "SDIT1HHH-SHH78"}, {
+          "id": "DSA1",
+          "name": "LKJHGFDS-DSA1"
+        }, {"id": "CLG1", "name": "CLGRABAD-CLG1"}, {"id": "BNA1", "name": "BNARAGBK-BNA1"}, {
+          "id": "ATL84",
+          "name": "CANTTCOC-ATL84"
+        }, {"id": "APP1", "name": "WBHGTYUI-APP1"}, {"id": "RJN1", "name": "RJNRBZAW-RJN1"}, {
+          "id": "EHH78",
+          "name": "SDCSHHH5-EHH78"
+        }, {"id": "mac10", "name": "PKGTESTF-mac10"}, {"id": "SXB78", "name": "SDCTGXB1-SXB78"}, {
+          "id": "SAX78",
+          "name": "SDCTAXG1-SAX78"
+        }, {"id": "SYD1", "name": "SYDNAUBV-SYD1"}, {"id": "TOK1", "name": "TOKYJPFA-TOK1"}, {
+          "id": "KGM2",
+          "name": "KGMTNC20-KGM2"
+        }, {"id": "DCC1b", "name": "POIUYTGH-DCC1b"}, {"id": "SKK78", "name": "SDCTKKK1-SKK78"}, {
+          "id": "SGG78",
+          "name": "SDCTGGG1-SGG78"
+        }, {"id": "SJJ78", "name": "SDCTJJJ1-SJJ78"}, {"id": "SBX78", "name": "SDCTBXG1-SBX78"}, {
+          "id": "LAG1",
+          "name": "LARGIZON-LAG1"
+        }, {"id": "IAA1", "name": "QAZXSWED-IAA1"}, {"id": "POI1", "name": "PLMNJKIU-POI1"}, {
+          "id": "LAG1a",
+          "name": "LARGIZON-LAG1a"
+        }, {"id": "PBL1", "name": "PBLAPBAI-PBL1"}, {"id": "LAG45", "name": "LARGIZON-LAG1a"}, {
+          "id": "MAR1",
+          "name": "MNBVCXZM-MAR1"
+        }, {"id": "HST70", "name": "HSTNTX70-HST70"}, {"id": "DCC1a", "name": "POIUYTGH-DCC1a"}, {
+          "id": "TOL1",
+          "name": "TOLDOH21-TOL1"
+        }, {"id": "LON1", "name": "LONEENCO-LON1"}, {"id": "SJU78", "name": "SDIT1JUB-SJU78"}, {
+          "id": "STN27",
+          "name": "HSTNTX01-STN27"
+        }, {"id": "SSW56", "name": "ss8126GT-SSW56"}, {"id": "SBB78", "name": "SDIT1BBB-SBB78"}, {
+          "id": "DCC3",
+          "name": "POIUYTGH-DCC3"
+        }, {"id": "GNV1", "name": "GNVLSCTL-GNV1"}, {"id": "WAS1", "name": "WASHDCSW-WAS1"}, {
+          "id": "TOY1",
+          "name": "TORYONNZ-TOY1"
+        }, {"id": "STT1", "name": "STTLWA02-STT1"}, {"id": "STG1", "name": "STTGGE62-STG1"}, {
+          "id": "SLL78",
+          "name": "SDCTLLL1-SLL78"
+        }, {"id": "SBU78", "name": "SDIT1BUB-SBU78"}, {"id": "ATL2", "name": "ATLNGANW-ATL2"}, {
+          "id": "BOT1",
+          "name": "BOTHWAKY-BOT1"
+        }, {"id": "SNG1", "name": "SNGPSIAU-SNG1"}, {"id": "NYC1", "name": "NYCMNY54-NYC1"}, {
+          "id": "LAG1b",
+          "name": "LARGIZON-LAG1b"
+        }, {"id": "AMD15", "name": "AMDFAA01-AMD15"}, {"id": "SNA1", "name": "SNANTXCA-SNA1"}, {
+          "id": "PLT1",
+          "name": "PLTNCA60-PLT1"
+        }, {"id": "TLP1", "name": "TLPNXM18-TLP1"}, {"id": "SDD81", "name": "SAIT1DD6-SDD81"}, {
+          "id": "DCC1",
+          "name": "POIUYTGH-DCC1"
+        }, {"id": "DCC2", "name": "POIUYTGH-DCC2"}, {"id": "OKC1", "name": "OKCBOK55-OKC1"}, {
+          "id": "PAR1",
+          "name": "PARSFRCG-PAR1"
+        }, {"id": "TES36", "name": "ABCEETES-TES36"}, {"id": "COM1", "name": "PLMKOPIU-COM1"}, {
+          "id": "ANI1",
+          "name": "ATLNGTRE-ANI1"
+        }, {"id": "SDG78", "name": "SDIT1BDG-SDG78"}, {"id": "mac20", "name": "PKGTESTF-mac20"}, {
+          "id": "DSF45",
+          "name": "DSFBG123-DSF45"
+        }, {"id": "HST25", "name": "HSTNTX01-HST25"}, {"id": "AMD18", "name": "AUDIMA01-AMD18"}, {
+          "id": "SAA80",
+          "name": "SAIT9AA3-SAA80"
+        }, {"id": "SSA56", "name": "SSIT2AA7-SSA56"}, {"id": "SDD82", "name": "SAIT1DD9-SDD82"}, {
+          "id": "JCV1",
+          "name": "JCVLFLBW-JCV1"
+        }, {"id": "SUL2", "name": "WERTYUJK-SUL2"}, {"id": "PUR1", "name": "purelyde-PUR1"}, {
+          "id": "FDE55",
+          "name": "FDERT555-FDE55"
+        }, {"id": "SITE", "name": "LONEENCO-SITE"}, {"id": "ATL1", "name": "ATLNGAMA-ATL1"}, {
+          "id": "JUL1",
+          "name": "ZXCVBNMM-JUL1"
+        }, {"id": "TAT34", "name": "TESAAISB-TAT34"}, {"id": "XCP12", "name": "CHKGH123-XCP12"}, {
+          "id": "RAI1",
+          "name": "poiuytre-RAI1"
+        }, {"id": "HPO1", "name": "ATLNGAUP-HPO1"}, {"id": "KJF12", "name": "KJFDH123-KJF12"}, {
+          "id": "SCC80",
+          "name": "SAIT9CC3-SCC80"
+        }, {"id": "SAA12", "name": "SAIT9AF8-SAA12"}, {"id": "SAA14", "name": "SAIT1AA9-SAA14"}, {
+          "id": "ATL35",
+          "name": "TTESSAAI-ATL35"
+        }, {"id": "CWY1", "name": "CWYMOWBS-CWY1"}, {"id": "ATL76", "name": "TELEPAAI-ATL76"}, {
+          "id": "DSL12",
+          "name": "DSLFK242-DSL12"
+        }, {"id": "ATL53", "name": "AAIATLTE-ATL53"}, {"id": "SAA11", "name": "SAIT9AA2-SAA11"}, {
+          "id": "ATL62",
+          "name": "TESSASCH-ATL62"
+        }, {"id": "AUG1", "name": "ASDFGHJK-AUG1"}, {"id": "POI22", "name": "POIUY123-POI22"}, {
+          "id": "SAA13",
+          "name": "SAIT1AA9-SAA13"
+        }, {"id": "BHY17", "name": "BHYTFRF3-BHY17"}, {"id": "LIS1", "name": "HOSTPROF-LIS1"}, {
+          "id": "SIP1",
+          "name": "ZXCVBNMK-SIP1"
+        }, {"id": "ATL99", "name": "TEESTAAI-ATL43"}, {"id": "ATL64", "name": "FORLOAAJ-ATL64"}, {
+          "id": "TAT33",
+          "name": "TESAAISA-TAT33"
+        }, {"id": "RAD10", "name": "INDIPUNE-RAD10"}, {"id": "RTW5", "name": "BHYTFRY4-RTW5"}, {
+          "id": "JGS1",
+          "name": "KSJKKKKK-JGS1"
+        }, {"id": "ATL98", "name": "TEESTAAI-ATL43"}, {"id": "WAN1", "name": "LEIWANGW-WAN1"}, {
+          "id": "ATL44",
+          "name": "ATLSANAB-ATL44"
+        }, {"id": "RTD2", "name": "BHYTFRk4-RTD2"}, {"id": "NIR1", "name": "ORFLMANA-NIR1"}, {
+          "id": "ATL75",
+          "name": "SANAAIRE-ATL75"
+        }, {"id": "NUM1", "name": "QWERTYUI-NUM1"}, {"id": "MTN32", "name": "MDTWNJ21-MTN32"}, {
+          "id": "RTZ4",
+          "name": "BHYTFRZ6-RTZ4"
+        }, {"id": "ATL56", "name": "ATLSANAC-ATL56"}, {"id": "AMS1", "name": "AMSTNLBW-AMS1"}, {
+          "id": "RCT1",
+          "name": "AMSTERNL-RCT1"
+        }, {"id": "JAN1", "name": "ORFLMATT-JAN1"}, {"id": "ABC14", "name": "TESAAISA-ABC14"}, {
+          "id": "TAT37",
+          "name": "TESAAISD-TAT37"
+        }, {"id": "MIC54", "name": "MICHIGAN-MIC54"}, {"id": "ABC11", "name": "ATLSANAI-ABC11"}, {
+          "id": "AMF11",
+          "name": "AMDOCS01-AMF11"
+        }, {"id": "ATL63", "name": "ATLSANEW-ATL63"}, {"id": "ABC12", "name": "ATLSECIA-ABC12"}, {
+          "id": "MTN20",
+          "name": "MDTWNJ21-MTN20"
+        }, {"id": "ABC15", "name": "AAITESAN-ABC15"}, {"id": "AVT1", "name": "AVTRFLHD-AVT1"}, {
+          "id": "ATL34",
+          "name": "ATLSANAI-ATL34"
+        }],
+        "categoryParameters": {
+          "owningEntityList": [{
+            "id": "aaa1",
+            "name": "aaa1"
+          }, {"id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "name": "WayneHolland"}, {
+            "id": "Melissa",
+            "name": "Melissa"
+          }],
+          "projectList": [{"id": "WATKINS", "name": "WATKINS"}, {"id": "x1", "name": "x1"}, {"id": "yyy1", "name": "yyy1"}],
+          "lineOfBusinessList": [{"id": "ONAP", "name": "ONAP"}, {"id": "zzz1", "name": "zzz1"}],
+          "platformList": [{"id": "platform", "name": "platform"}, {"id": "xxx1", "name": "xxx1"}]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [{
+          "id": "CAR_2020_ER",
+          "name": "CAR_2020_ER",
+          "isPermitted": true
+        }, {
+          "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+          "name": "JULIO ERICKSON",
+          "isPermitted": false
+        }, {
+          "id": "DHV1707-TestSubscriber-2",
+          "name": "DALE BRIDGES",
+          "isPermitted": false
+        }, {"id": "DHV1707-TestSubscriber-1", "name": "LLOYD BRIDGES", "isPermitted": false}, {
+          "id": "jimmy-example",
+          "name": "JimmyExampleCust-20161102",
+          "isPermitted": false
+        }, {
+          "id": "jimmy-example2",
+          "name": "JimmyExampleCust-20161103",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-102",
+          "name": "ERICA5779-TestSub-PWT-102",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-101",
+          "name": "ERICA5779-TestSub-PWT-101",
+          "isPermitted": false
+        }, {
+          "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "name": "Emanuel",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-Subscriber-4",
+          "name": "ERICA5779-Subscriber-5",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-TestSub-PWT-103",
+          "name": "ERICA5779-TestSub-PWT-103",
+          "isPermitted": false
+        }, {
+          "id": "ERICA5779-Subscriber-2",
+          "name": "ERICA5779-Subscriber-2",
+          "isPermitted": false
+        }, {
+          "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "name": "SILVIA ROBBINS",
+          "isPermitted": true
+        }, {
+          "id": "ERICA5779-Subscriber-3",
+          "name": "ERICA5779-Subscriber-3",
+          "isPermitted": false
+        }, {"id": "31739f3e-526b-11e6-beb8-9e71128cae77", "name": "CRAIG/ROBERTS", "isPermitted": false}]
+      }
+    };
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('VFModule popup service', () => {
+  let injector;
+  let service: VfModulePopuopService;
+  let genericFormService: GenericFormService
+  let defaultDataGeneratorService: DefaultDataGeneratorService;
+  let fb: FormBuilder;
+  let iframeService: IframeService;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      providers : [
+        VfModulePopuopService,
+        BasicControlGenerator,
+        VfModuleControlGenerator,
+        DefaultDataGeneratorService,
+        GenericFormService,
+        FormBuilder,
+        IframeService,
+        AaiService,
+        LogService,
+        BasicPopupService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        {provide: NgRedux, useClass: MockReduxStore},
+        {provide: HttpClient, useClass: MockAppStore},
+        {provide: SdcUiServices.ModalService, useClass: MockModalService}
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(VfModulePopuopService);
+    genericFormService = injector.get(GenericFormService);
+    defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
+    fb = injector.get(FormBuilder);
+    iframeService = injector.get(IframeService);
+
+  })().then(done).catch(done.fail));
+
+  test('getTitle should return the correct title for edit and create mode', () => {
+    expect(service.getTitle(true)).toBe('Edit Module (Heat stack)');
+    expect(service.getTitle(false)).toBe('Set new Module (Heat stack)');
+  });
+
+  test('getInstance should return new VfModuleInstance', () => {
+    const serviceId : string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+    const vnfStoreKey = null;
+    const vfModuleStoreKey = "VF_vMee 0";
+    let  VfModuleInstance ;
+    VfModuleInstance = service.getInstance(serviceId, vnfStoreKey, vfModuleStoreKey);
+    expect (VfModuleInstance).toBeDefined();
+  });
+
+  test('getSubLeftTitle should return network model name', () => {
+    service.model = {
+      'name' : 'Model name'
+    };
+    expect(service.getSubLeftTitle()).toBe('Model name');
+  });
+
+  test('getSubRightTitle should return popup type', () => {
+    expect(service.getSubRightTitle()).toBe('Module (Heat stack) Instance Details');
+  });
+
+  test('getModelInformation should update modelInformations', () => {
+    const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+    const vfModuleModelName: string = '2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1';
+
+    service.getModelInformation(serviceId, vfModuleModelName);
+    expect(service.modelInformations.length).toEqual(15);
+    expect(service.modelInformations[0].label).toEqual("Subscriber Name");
+    expect(service.modelInformations[0].values).toEqual(['SILVIA ROBBINS']);
+
+    expect(service.modelInformations[1].label).toEqual("Service Name");
+    expect(service.modelInformations[1].values).toEqual(['action-data']);
+
+    expect(service.modelInformations[2].label).toEqual("Service Instance Name");
+    expect(service.modelInformations[2].values).toEqual(['InstanceName']);
+
+    expect(service.modelInformations[3].label).toEqual("Model Name");
+    expect(service.modelInformations[3].values).toEqual(['2017488AdiodVpe..ADIOD_vRE_BV..module-1']);
+
+    expect(service.modelInformations[4].label).toEqual("Model version");
+    expect(service.modelInformations[4].values).toEqual(['6']);
+
+    expect(service.modelInformations[5].label).toEqual("Description");
+    expect(service.modelInformations[5].values).toEqual([null]);
+
+    expect(service.modelInformations[6].label).toEqual("Category");
+    expect(service.modelInformations[6].values).toEqual([undefined]);
+
+    expect(service.modelInformations[7].label).toEqual("Sub Category");
+    expect(service.modelInformations[7].values).toEqual([undefined]);
+
+    expect(service.modelInformations[8].label).toEqual("UUID");
+    expect(service.modelInformations[8].values).toEqual(['25284168-24bb-4698-8cb4-3f509146eca5']);
+
+    expect(service.modelInformations[9].label).toEqual("Invariant UUID");
+    expect(service.modelInformations[9].values).toEqual(['7253ff5c-97f0-4b8b-937c-77aeb4d79aa1']);
+
+    expect(service.modelInformations[10].label).toEqual("Service type");
+    expect(service.modelInformations[10].values).toEqual(['']);
+
+    expect(service.modelInformations[11].label).toEqual("Service role");
+    expect(service.modelInformations[11].values).toEqual(['']);
+
+    expect(service.modelInformations[12].label).toEqual("Minimum to instantiate");
+    expect(service.modelInformations[12].values).toEqual(['0']);
+
+    expect(service.modelInformations[13].label).toEqual("Maximum to instantiate");
+    expect(service.modelInformations[13].values).toEqual(['1']);
+  });
+
+
+  test('onCancel should trigger closeDialogEvent and iframe', () => {
+    let that = <any>{
+      parentElementClassName: 'content',
+      _iframeService: iframeService
+    };
+    jest.spyOn(iframeService, 'removeClassCloseModal');
+    jest.spyOn(service.closeDialogEvent, 'next');
+
+    service.onCancel(that, fb.group({}));
+
+    expect(that._iframeService.removeClassCloseModal).toHaveBeenCalledWith(that.parentElementClassName)
+    expect(service.closeDialogEvent.next).toHaveBeenCalledWith(that);
+  });
+
+  test('onSubmit should trigger onCancel', () => {
+    let that = <any>{
+      parentElementClassName: 'content',
+      _iframeService: iframeService,
+      storeVFModule: () => {
+      },
+      serviceModel: {
+        uuid: 'someUUID'
+      }
+    };
+    let form = fb.group({});
+    jest.spyOn(service, 'onCancel');
+    jest.spyOn(that, 'storeVFModule');
+    jest.spyOn(window.parent, 'postMessage');
+
+    service.onSubmit(that, form);
+
+    expect(service.onCancel).toHaveBeenCalledWith(that, form);
+    expect(that.storeVFModule).toHaveBeenCalledWith(that, form.value);
+    expect(window.parent.postMessage).toHaveBeenCalledWith({
+      eventId: 'submitIframe',
+      data: {
+        serviceModelId: 'someUUID'
+      }
+    }, "*");
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.ts
new file mode 100644
index 0000000..7563f1d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service.ts
@@ -0,0 +1,184 @@
+import {Injectable} from "@angular/core";
+import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {AppState} from "../../../../store/reducers";
+import {NgRedux} from "@angular-redux/store";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {ModelInformationItem} from "../../../model-information/model-information.component";
+import {Constants} from "../../../../utils/constants";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {ServiceModel} from "../../../../models/serviceModel";
+import {FormGroup} from "@angular/forms";
+import {ModelInfo} from "../../../../models/modelInfo";
+import {IframeService} from "../../../../utils/iframe.service";
+import {GenericPopupInterface} from "../generic-popup.interface";
+import {Subject} from "rxjs/Subject";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {VfModuleInstance} from "../../../../models/vfModuleInstance";
+import {VfModuleControlGenerator} from "../../../genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator";
+import {FormControlModel} from "../../../../models/formControlModels/formControl.model";
+import * as _ from 'lodash';
+import {createVFModuleInstance, updateVFModuleInstance} from "../../../../storeUtil/utils/vfModule/vfModule.actions";
+
+@Injectable()
+export class VfModulePopuopService implements GenericPopupInterface {
+  dynamicInputs: any;
+  instance: any;
+  model: any;
+  serviceModel: ServiceModel;
+  modelInformations: ModelInformationItem[] = [];
+  uuidData: Object;
+  closeDialogEvent: Subject<any> = new Subject<any>();
+  isUpdateMode: boolean;
+
+
+  constructor(private _basicControlGenerator: BasicControlGenerator,
+              private _vfModuleControlGenerator: VfModuleControlGenerator,
+              private _iframeService: IframeService,
+              private _defaultDataGeneratorService: DefaultDataGeneratorService,
+              private _aaiService: AaiService,
+              private _basicPopupService : BasicPopupService,
+              private _store: NgRedux<AppState>) {
+
+  }
+
+  getInstance(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string): any {
+    if (_.isNil(vnfStoreKey) || _.isNil(vfModuleStoreKey)) {
+      return new VfModuleInstance();
+    }
+    const vfModules = this._store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey].vfModules;
+    return vfModules[this.uuidData['modelName']][vfModuleStoreKey];
+  }
+
+  getDynamicInputs(UUIDData : Object) : FormControlModel[]{
+    let dynamic = this._defaultDataGeneratorService.getArbitraryInputs(this._store.getState().service.serviceHierarchy[UUIDData['serviceId']].vfModules[UUIDData['modelName']].inputs);
+    return this.getVFModuleDynamicInputs(dynamic, UUIDData);
+  }
+
+  getVFModuleDynamicInputs(dynamicInputs : any, UUIDData : Object) : FormControlModel[] {
+    let result : FormControlModel[] = [];
+    if(dynamicInputs) {
+      let vfModuleInstance = null;
+      if (_.has(this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs, UUIDData['vnfStoreKey']) &&
+        _.has(this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs[UUIDData['vnfStoreKey']].vfModules, UUIDData['modelName'])) {
+        vfModuleInstance = Object.assign({},this._store.getState().service.serviceInstance[UUIDData['serviceId']].vnfs[UUIDData['vnfStoreKey']].vfModules[UUIDData['modelName']][UUIDData['vfModuleStoreKey']]);
+      }
+      result = this._basicControlGenerator.getDynamicInputs(dynamicInputs, vfModuleInstance);
+    }
+    return result;
+  }
+
+
+  getGenericFormPopupDetails(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
+
+    this.uuidData = uuidData;
+    this.instance = this.getInstance(serviceId, vnfStoreKey, vfModuleStoreKey);
+    this.getModelInformation(serviceId, uuidData['modelName']);
+
+    return new FormPopupDetails(this,
+      PopupType.VFMODULE,
+      uuidData,
+      this.getTitle(isUpdateMode),
+      this.getSubLeftTitle(),
+      this.getSubRightTitle(),
+      this.getControls(serviceId, vnfStoreKey, vfModuleStoreKey, isUpdateMode),
+      this.getDynamicInputs(uuidData),
+      this.modelInformations,
+      (that, form: FormGroup) => {that.onSubmit(that, form);},
+      (that: any, form: FormGroup) => {that.onCancel(that, form); }
+    );
+  }
+
+  getModelInformation(serviceId: string, modelName: string) {
+    this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
+      this.serviceModel = new ServiceModel(result);
+
+      this.model = this._basicPopupService.getModelFromResponse(result, 'vfModules', modelName);
+      const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
+      this.modelInformations = [
+        new ModelInformationItem("Subscriber Name", "subscriberName", [this._basicPopupService.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId)], "", true),
+        new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true),
+        new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false),
+        new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true),
+        new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
+        new ModelInformationItem("Description", "description", [this.model.description]),
+        new ModelInformationItem("Category", "category", [this.model.category]),
+        new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
+        new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
+        new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
+        new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
+        new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]),
+        new ModelInformationItem("Minimum to instantiate", "min", this.model.min == undefined ? ['0'] : [this.model.min.toString()], "", true),
+        new ModelInformationItem("Maximum to instantiate", "max", this.model.max == undefined ? ['1'] : [this.model.max.toString()], "", true),
+        new ModelInformationItem("Recommended to instantiate", "initial", [this.model.initial])
+      ];
+    });
+  }
+
+  getControls(serviceId: string, vnfStoreKey: string, vfModuleStoreKey: string, isUpdateMode: boolean) {
+    if (this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') {
+      return this._vfModuleControlGenerator.getMacroFormControls(serviceId, vnfStoreKey, vfModuleStoreKey, this.uuidData, isUpdateMode);
+    } else {
+      return this._vfModuleControlGenerator.getAlaCarteFormControls(serviceId, vnfStoreKey, vfModuleStoreKey,  this.uuidData, isUpdateMode);
+    }
+  }
+
+
+  onSubmit(that, form: FormGroup) {
+    form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
+    if (!_.isNil(form.controls['supplementaryFile_hidden_content']) && form.controls['supplementaryFile_hidden_content'].value) {
+      form.value['supplementaryFileContent'] = JSON.parse(form.controls['supplementaryFile_hidden_content'].value);
+      if (!_.isNil(form.controls['supplementaryFile_hidden'].value)) {
+        form.value['supplementaryFileName'] = form.controls['supplementaryFile_hidden'].value.name;
+      }
+      else {
+        form.value['supplementaryFileName'] = that.instance.supplementaryFileName;
+      }
+    }
+    else {
+      delete form.value['supplementaryFileContent'];
+      delete form.value['supplementaryFileName'];
+    }
+    that.storeVFModule(that, form.value);
+    window.parent.postMessage({
+      eventId: 'submitIframe',
+      data: {
+        serviceModelId: that.serviceModel.uuid
+      }
+    }, "*");
+    this.onCancel(that, form);
+  }
+
+
+  onCancel(that, form) {
+    form.reset();
+    that._iframeService.removeClassCloseModal('content');
+    this.closeDialogEvent.next(that);
+  }
+
+  storeVFModule = (that, formValues: any): void => {
+    formValues.modelInfo = new ModelInfo(that.model);
+    formValues.uuid = formValues.modelInfo.uuid;
+    formValues.isMissingData = false;
+    const vnf =  that._store.getState().service.serviceInstance[that.uuidData.serviceId].vnfs[that.uuidData.vnfStoreKey];
+
+    if (!that.uuidData.vFModuleStoreKey) {
+      this._store.dispatch(createVFModuleInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, 0, that.uuidData.vnfStoreKey));
+    } else {
+      this._store.dispatch(updateVFModuleInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vFModuleStoreKey, that.uuidData.vnfStoreKey));
+    }
+  };
+
+  getTitle(isUpdateMode : boolean) : string {
+    return isUpdateMode ? 'Edit Module (Heat stack)' : 'Set new Module (Heat stack)';
+  }
+
+  getSubLeftTitle(): string {
+    return this.model.name;
+  }
+
+  getSubRightTitle(): string {
+    return "Module (Heat stack) Instance Details";
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.spec.ts
new file mode 100644
index 0000000..c77c092
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.spec.ts
@@ -0,0 +1,3242 @@
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {NgRedux} from "@angular-redux/store";
+import {ReflectiveInjector} from "@angular/core";
+import {IframeService} from "../../../../utils/iframe.service";
+import {VfModulePopuopService} from "../vfModule/vfModule.popuop.service";
+import {FormBuilder} from "@angular/forms";
+import {GenericFormService} from "../../../genericForm/generic-form.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {LogService} from "../../../../utils/log/log.service";
+import {HttpClient} from "@angular/common/http";
+import {VnfPopupService} from "./vnf.popup.service";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {VnfControlGenerator} from "../../../genericForm/formControlsServices/vnfGenerator/vnf.control.generator";
+import {UUIDData} from "../../generic-form-popup.component";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+import {getTestBed, TestBed} from "@angular/core/testing";
+
+class MockAppStore<T> {}
+
+class MockReduxStore<T> {
+  getState() {
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "FLAG_ADVANCED_PORTS_FILTER": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_REGION_ID_FROM_REMOTE": true,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {}
+            },
+            "vnfGroups" : {},
+            "vnfs": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "ecomp_generated_naming": "false",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VF",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "netowrk_role": "role 1, role 2, role 3",
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "service": {
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "action-data",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "",
+              "serviceEcompNaming": "false",
+              "instantiationType": "A-La-Carte",
+              "inputs": {
+                "2017488_adiodvpe0_ASN": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": "AV_vPE"
+                }
+              }
+            },
+            "vnfs": {
+              "2017-388_ADIOD-vPE 1": {
+                "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+                "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "1.0",
+                "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {
+                    "displayName": "bandwidth",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth"
+                  },
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {
+                    "displayName": "ASN",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_ASN"
+                  },
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "max_instances": 5,
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-388_ADIOD-vPE 0": {
+                "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "4.0",
+                "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {
+                    "displayName": "bandwidth",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth"
+                  },
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {
+                    "displayName": "ASN",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_ASN"
+                  },
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-488_ADIOD-vPE 0": {
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-488_ADIOD-vPE",
+                "version": "5.0",
+                "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {
+                    "displayName": "bandwidth",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth"
+                  },
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {
+                    "displayName": "ASN",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_ASN"
+                  },
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "max_instances": "3",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VF",
+                "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    },
+                    "volumeGroupAllowed": true
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                    "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                    "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                    "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "version": "5",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "ADIOD_base_vPE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    }
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "vnfGroups": {},
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {},
+                "properties": {
+                  "network_role": "network role 1, network role 2",
+                  "min_instances": 1,
+                  "max_instances": 10,
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {},
+            "fabricConfigurations": {},
+            "serviceProxies": {},
+            "vfModules": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "AIC_CLLI"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                },
+                "volumeGroupAllowed": true
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "version": "5",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "ADIOD_base_vPE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "AIC_CLLI"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                }
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "vnfs": {
+              "VF_vMee 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                      "isMissingData": false,
+                      "sdncPreReload": null,
+                      "modelInfo": {
+                        "modelType": "VFmodule",
+                        "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                        "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                        "modelName": "VfVmee..base_vmme..module-0",
+                        "modelVersion": "2",
+                        "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                        "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                      },
+                      "instanceParams": [
+                        {}
+                      ],
+                      "trackById": "wmtm6sy2uj"
+                    }
+                  }
+                },
+                "isMissingData": true,
+                "originalName": "VF_vMee 0",
+                "vnfStoreKey": "VF_vMee 0",
+                "trackById": "p3wk448m5do",
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+                "lcpCloudRegionId": null,
+                "tenantId": null,
+                "lineOfBusiness": null,
+                "platformName": null,
+                "modelInfo": {
+                  "modelType": "VF",
+                  "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+                  "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+                  "modelName": "VF_vMee",
+                  "modelVersion": "2.0",
+                  "modelCustomizationName": "VF_vMee 0"
+                }
+              }
+            },
+            "vnfGroups": {},
+            "networks": {},
+            "instanceParams": [
+              {}
+            ],
+            "validationCounter": 1,
+            "existingNames": {},
+            "existingVnfGroupCounterMap": {},
+            "existingVNFCounterMap": {
+              "d6557200-ecf2-4641-8094-5393ae3aae60": 1
+            },
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": "hvf6",
+            "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "aicZoneId": "JAG1",
+            "projectName": "x1",
+            "rollbackOnFailure": "true",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "ComplexService",
+              "modelVersion": "1.0",
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+            },
+            "isALaCarte": false,
+            "name": "ComplexService",
+            "version": "1.0",
+            "description": "ComplexService",
+            "category": "Emanuel",
+            "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "networks": {
+              "ExtVL 0": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "sf3zth68xjf",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [
+                  {}
+                ],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0:0001": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "2mdxioxca9h",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [
+                  {}
+                ],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0_1": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0_1",
+                "trackById": "z7vd1gmpbs",
+                "instanceName": "ExtVL",
+                "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "zzz1",
+                "instanceParams": [
+                  {
+                    "vnf_config_template_version": "17.2",
+                    "bandwidth_units": "Gbps",
+                    "bandwidth": "10",
+                    "AIC_CLLI": "ATLMY8GA",
+                    "ASN": "AV_vPE",
+                    "vnf_instance_name": "yoav"
+                  }
+                ],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              }
+            },
+            "vnfs": {
+              "2017-488_ADIOD-vPE 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": {
+                      "instanceName": "yoav",
+                      "volumeGroupName": "123",
+                      "modelInfo": {
+                        "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                        "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                        "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "modelVersion": "6",
+                        "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                        "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                      },
+                      "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                      "isMissingData": false,
+                      "instanceParams": [
+                        {
+                          "adiodvpe0_bandwidth": "10",
+                          "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6",
+                          "2017488_adiodvpe0_vnf_config_template_version": "17.2",
+                          "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA",
+                          "adiodvpe0_bandwidth_units": "Gbps"
+                        }
+                      ]
+                    }
+                  }
+                },
+                "isMissingData": false,
+                "originalName": "2017-488_ADIOD-vPE 0",
+                "vnfStoreKey": "2017-488_ADIOD-vPE 0",
+                "trackById": "o65b26t2thj",
+                "instanceName": "2017488_ADIODvPE",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "platformName": "platform",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [
+                  {}
+                ],
+                "modelInfo": {
+                  "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                  "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                  "modelName": "2017-488_ADIOD-vPE",
+                  "modelVersion": "5.0",
+                  "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                  "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                  "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+                },
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+              }
+            },
+            "instanceParams": [
+              {
+                "2017488_adiodvpe0_ASN": "AV_vPE"
+              }
+            ],
+            "validationCounter": 0,
+            "existingNames": {
+              "123": "",
+              "instancename": "",
+              "yoav": "",
+              "extvl": ""
+            },
+            "existingVNFCounterMap": {
+              "69e09f68-8b63-4cc9-b9ff-860960b5db09": 1
+            },
+            "existingNetworksCounterMap": {
+              "ddc3f20c-08b5-40fd-af72-c6d14636b986": 3
+            },
+            "instanceName": "InstanceName",
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "aicZoneId": "JAG1",
+            "projectName": null,
+            "rollbackOnFailure": "true",
+            "aicZoneName": "YUDFJULP-JAG1",
+            "owningEntityName": "WayneHolland",
+            "testApi": "GR_API",
+            "tenantName": "USP-SIP-IC-24335-T-01",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "modelName": "action-data",
+              "modelVersion": "1.0",
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+            },
+            "isALaCarte": false,
+            "name": "action-data",
+            "version": "1.0",
+            "description": "",
+            "category": "",
+            "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          }
+        },
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [
+            {
+              "id": "JANET25",
+              "name": "JANET25",
+              "isPermitted": true
+            },
+            {
+              "id": "hvf6",
+              "name": "hvf6",
+              "isPermitted": true
+            }
+          ],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [
+              {
+                "id": "092eb9e8e4b7412e8787dd091bc58e86",
+                "name": "USP-SIP-IC-24335-T-01",
+                "isPermitted": true
+              }
+            ],
+            "hvf6": [
+              {
+                "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "name": "AIN Web Tool-15-D-testalexandria",
+                "isPermitted": true
+              },
+              {
+                "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "name": "AIN Web Tool-15-D-STTest2",
+                "isPermitted": true
+              },
+              {
+                "id": "1178612d2b394be4834ad77f567c0af2",
+                "name": "AIN Web Tool-15-D-SSPtestcustome",
+                "isPermitted": true
+              },
+              {
+                "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+                "name": "AIN Web Tool-15-D-UncheckedEcopm",
+                "isPermitted": true
+              },
+              {
+                "id": "de007636e25249238447264a988a927b",
+                "name": "AIN Web Tool-15-D-dfsdf",
+                "isPermitted": true
+              },
+              {
+                "id": "62f29b3613634ca6a3065cbe0e020c44",
+                "name": "AIN/SMS-16-D-Multiservices1",
+                "isPermitted": true
+              },
+              {
+                "id": "649289e30d3244e0b48098114d63c2aa",
+                "name": "AIN Web Tool-15-D-SSPST66",
+                "isPermitted": true
+              },
+              {
+                "id": "3f21eeea6c2c486bba31dab816c05a32",
+                "name": "AIN Web Tool-15-D-ASSPST47",
+                "isPermitted": true
+              },
+              {
+                "id": "f60ce21d3ee6427586cff0d22b03b773",
+                "name": "CESAR-100-D-sspjg67246",
+                "isPermitted": true
+              },
+              {
+                "id": "8774659e425f479895ae091bb5d46560",
+                "name": "CESAR-100-D-sspjg68359",
+                "isPermitted": true
+              },
+              {
+                "id": "624eb554b0d147c19ff8885341760481",
+                "name": "AINWebTool-15-D-iftach",
+                "isPermitted": true
+              },
+              {
+                "id": "214f55f5fc414c678059c383b03e4962",
+                "name": "CESAR-100-D-sspjg612401",
+                "isPermitted": true
+              },
+              {
+                "id": "c90666c291664841bb98e4d981ff1db5",
+                "name": "CESAR-100-D-sspjg621340",
+                "isPermitted": true
+              },
+              {
+                "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+                "name": "sspjg621351cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "b386b768a3f24c8e953abbe0b3488c02",
+                "name": "AINWebTool-15-D-eteancomp",
+                "isPermitted": true
+              },
+              {
+                "id": "dc6c4dbfd225474e9deaadd34968646c",
+                "name": "AINWebTool-15-T-SPFET",
+                "isPermitted": true
+              },
+              {
+                "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+                "name": "AINWebTool-15-X-eeweww",
+                "isPermitted": true
+              },
+              {
+                "id": "f2f3830e4c984d45bcd00e1a04158a79",
+                "name": "CESAR-100-D-spjg61909",
+                "isPermitted": true
+              },
+              {
+                "id": "05b91bd5137f4929878edd965755c06d",
+                "name": "CESAR-100-D-sspjg621512cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "7002fbe8482d4a989ddf445b1ce336e0",
+                "name": "AINWebTool-15-X-vdr",
+                "isPermitted": true
+              },
+              {
+                "id": "4008522be43741dcb1f5422022a2aa0b",
+                "name": "AINWebTool-15-D-ssasa",
+                "isPermitted": true
+              },
+              {
+                "id": "f44e2e96a1b6476abfda2fa407b00169",
+                "name": "AINWebTool-15-D-PFNPT",
+                "isPermitted": true
+              },
+              {
+                "id": "b69a52bec8a84669a37a1e8b72708be7",
+                "name": "AINWebTool-15-X-vdre",
+                "isPermitted": true
+              },
+              {
+                "id": "fac7d9fd56154caeb9332202dcf2969f",
+                "name": "AINWebTool-15-X-NONPODECOMP",
+                "isPermitted": true
+              },
+              {
+                "id": "2d34d8396e194eb49969fd61ffbff961",
+                "name": "DN5242-Nov16-T5",
+                "isPermitted": true
+              },
+              {
+                "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+                "name": "ro-T11",
+                "isPermitted": true
+              },
+              {
+                "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+                "name": "ro-T112",
+                "isPermitted": true
+              },
+              {
+                "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+                "name": "DN5242-Nov21-T1",
+                "isPermitted": true
+              },
+              {
+                "id": "d0a3e3f2964542259d155a81c41aadc3",
+                "name": "test-hvf6-09",
+                "isPermitted": true
+              },
+              {
+                "id": "cbb99fe4ada84631b7baf046b6fd2044",
+                "name": "DN5242-Nov16-T3",
+                "isPermitted": true
+              }
+            ]
+          }
+        },
+        "productFamilies": [
+          {
+            "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+            "name": "SCOTTIE",
+            "isPermitted": true
+          },
+          {
+            "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "name": "IGNACIO",
+            "isPermitted": true
+          },
+          {
+            "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "name": "Christie",
+            "isPermitted": true
+          },
+          {
+            "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+            "name": "Enhanced Services",
+            "isPermitted": true
+          },
+          {
+            "id": "vTerrance",
+            "name": "vTerrance",
+            "isPermitted": true
+          },
+          {
+            "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+            "name": "vSCP",
+            "isPermitted": true
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": true
+          },
+          {
+            "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+            "name": "BVOIP",
+            "isPermitted": true
+          },
+          {
+            "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+            "name": "LINDSEY",
+            "isPermitted": true
+          },
+          {
+            "id": "LRSI-OSPF",
+            "name": "LRSI-OSPF",
+            "isPermitted": true
+          },
+          {
+            "id": "vRosemarie",
+            "name": "HNGATEWAY",
+            "isPermitted": true
+          },
+          {
+            "id": "vHNPaas",
+            "name": "WILKINS",
+            "isPermitted": true
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "TYLER SILVIA",
+            "isPermitted": true
+          },
+          {
+            "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+            "name": "VROUTER",
+            "isPermitted": true
+          },
+          {
+            "id": "Cisneros",
+            "name": "vMuriel",
+            "isPermitted": true
+          },
+          {
+            "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+            "name": "CARA Griffin",
+            "isPermitted": true
+          },
+          {
+            "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          },
+          {
+            "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+            "name": "Transport",
+            "isPermitted": true
+          },
+          {
+            "id": "vSalvatore",
+            "name": "vSalvatore",
+            "isPermitted": true
+          },
+          {
+            "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+            "name": "Josefina",
+            "isPermitted": true
+          },
+          {
+            "id": "vHubbard",
+            "name": "vHubbard",
+            "isPermitted": true
+          },
+          {
+            "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          }
+        ],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [
+            {
+              "id": "0",
+              "name": "vRichardson",
+              "isPermitted": false
+            },
+            {
+              "id": "1",
+              "name": "TYLER SILVIA",
+              "isPermitted": true
+            },
+            {
+              "id": "2",
+              "name": "Emanuel",
+              "isPermitted": false
+            },
+            {
+              "id": "3",
+              "name": "vJamie",
+              "isPermitted": false
+            },
+            {
+              "id": "4",
+              "name": "vVoiceMail",
+              "isPermitted": false
+            },
+            {
+              "id": "5",
+              "name": "Kennedy",
+              "isPermitted": false
+            },
+            {
+              "id": "6",
+              "name": "vSEGW",
+              "isPermitted": false
+            },
+            {
+              "id": "7",
+              "name": "vVM",
+              "isPermitted": false
+            },
+            {
+              "id": "8",
+              "name": "vOTA",
+              "isPermitted": false
+            },
+            {
+              "id": "9",
+              "name": "vMME",
+              "isPermitted": false
+            },
+            {
+              "id": "10",
+              "name": "vMNS",
+              "isPermitted": false
+            },
+            {
+              "id": "11",
+              "name": "vSCP",
+              "isPermitted": false
+            },
+            {
+              "id": "12",
+              "name": "VPMS",
+              "isPermitted": false
+            },
+            {
+              "id": "13",
+              "name": "vMMSC",
+              "isPermitted": false
+            },
+            {
+              "id": "14",
+              "name": "SSD",
+              "isPermitted": false
+            },
+            {
+              "id": "15",
+              "name": "vMOG",
+              "isPermitted": false
+            },
+            {
+              "id": "16",
+              "name": "LINDSEY",
+              "isPermitted": false
+            },
+            {
+              "id": "17",
+              "name": "JOHANNA_SANTOS",
+              "isPermitted": false
+            },
+            {
+              "id": "18",
+              "name": "vCarroll",
+              "isPermitted": false
+            }
+          ]
+        },
+        "aicZones": [
+          {
+            "id": "NFT1",
+            "name": "NFTJSSSS-NFT1"
+          },
+          {
+            "id": "JAG1",
+            "name": "YUDFJULP-JAG1"
+          },
+          {
+            "id": "YYY1",
+            "name": "UUUAIAAI-YYY1"
+          },
+          {
+            "id": "BAN1",
+            "name": "VSDKYUTP-BAN1"
+          },
+          {
+            "id": "DKJ1",
+            "name": "DKJSJDKA-DKJ1"
+          },
+          {
+            "id": "MCS1",
+            "name": "ASACMAMS-MCS1"
+          },
+          {
+            "id": "UIO1",
+            "name": "uioclli1-UIO1"
+          },
+          {
+            "id": "RAJ1",
+            "name": "YGBIJNLQ-RAJ1"
+          },
+          {
+            "id": "OPA1",
+            "name": "opaclli1-OPA1"
+          },
+          {
+            "id": "SDE1",
+            "name": "ZXCVBNMA-SDE1"
+          },
+          {
+            "id": "VEN2",
+            "name": "FGHJUHIL-VEN2"
+          },
+          {
+            "id": "ORL1",
+            "name": "ORLDFLMA-ORL1"
+          },
+          {
+            "id": "JAD1",
+            "name": "JADECLLI-JAD1"
+          },
+          {
+            "id": "ZXL1",
+            "name": "LWLWCANN-ZXL1"
+          },
+          {
+            "id": "CKL1",
+            "name": "CLKSKCKK-CKL1"
+          },
+          {
+            "id": "SDF1",
+            "name": "sdfclli1-SDF1"
+          },
+          {
+            "id": "RAD1",
+            "name": "RADICAL1-RAD1"
+          },
+          {
+            "id": "KIT1",
+            "name": "BHYJFGLN-KIT1"
+          },
+          {
+            "id": "REL1",
+            "name": "INGERFGT-REL1"
+          },
+          {
+            "id": "JNL1",
+            "name": "CJALSDAC-JNL1"
+          },
+          {
+            "id": "OLK1",
+            "name": "OLKOLKLS-OLK1"
+          },
+          {
+            "id": "CHI1",
+            "name": "CHILLIWE-CHI1"
+          },
+          {
+            "id": "UUU4",
+            "name": "UUUAAAUU-UUU4"
+          },
+          {
+            "id": "TUF1",
+            "name": "TUFCLLI1-TUF1"
+          },
+          {
+            "id": "KJN1",
+            "name": "CKALDKSA-KJN1"
+          },
+          {
+            "id": "SAM1",
+            "name": "SNDGCA64-SAN1"
+          },
+          {
+            "id": "SCK1",
+            "name": "SCKSCKSK-SCK1"
+          },
+          {
+            "id": "HJH1",
+            "name": "AOEEQQQD-HJH1"
+          },
+          {
+            "id": "HGD1",
+            "name": "SDFQWHGD-HGD1"
+          },
+          {
+            "id": "KOR1",
+            "name": "HYFLNBVT-KOR1"
+          },
+          {
+            "id": "ATL43",
+            "name": "AICLOCID-ATL43"
+          },
+          {
+            "id": "ATL54",
+            "name": "AICFTAAI-ATL54"
+          },
+          {
+            "id": "ATL66",
+            "name": "CLLIAAII-ATL66"
+          },
+          {
+            "id": "VEL1",
+            "name": "BNMLKUIK-VEL1"
+          },
+          {
+            "id": "ICC1",
+            "name": "SANJITAT-ICC1"
+          },
+          {
+            "id": "MNT11",
+            "name": "WSXEFBTH-MNT11"
+          },
+          {
+            "id": "DEF2",
+            "name": "WSBHGTYL-DEF2"
+          },
+          {
+            "id": "MAD11",
+            "name": "SDFQWGKL-MAD11"
+          },
+          {
+            "id": "OLG1",
+            "name": "OLHOLHOL-OLG1"
+          },
+          {
+            "id": "GAR1",
+            "name": "NGFVSJKO-GAR1"
+          },
+          {
+            "id": "SAN22",
+            "name": "GNVLSCTL-SAN22"
+          },
+          {
+            "id": "HRG1",
+            "name": "HRGHRGGS-HRG1"
+          },
+          {
+            "id": "JCS1",
+            "name": "JCSJSCJS-JCS1"
+          },
+          {
+            "id": "DHA12",
+            "name": "WSXEDECF-DHA12"
+          },
+          {
+            "id": "HJE1",
+            "name": "AOEEWWWD-HJE1"
+          },
+          {
+            "id": "NCA1",
+            "name": "NCANCANN-NCA1"
+          },
+          {
+            "id": "IOP1",
+            "name": "iopclli1-IOP1"
+          },
+          {
+            "id": "RTY1",
+            "name": "rtyclli1-RTY1"
+          },
+          {
+            "id": "KAP1",
+            "name": "HIOUYTRQ-KAP1"
+          },
+          {
+            "id": "ZEN1",
+            "name": "ZENCLLI1-ZEN1"
+          },
+          {
+            "id": "HKA1",
+            "name": "JAKHLASS-HKA1"
+          },
+          {
+            "id": "CQK1",
+            "name": "CQKSCAKK-CQK1"
+          },
+          {
+            "id": "SAI1",
+            "name": "UBEKQLPD-SAI1"
+          },
+          {
+            "id": "ERT1",
+            "name": "ertclli1-ERT1"
+          },
+          {
+            "id": "IBB1",
+            "name": "PLMKOIJU-IBB1"
+          },
+          {
+            "id": "TIR2",
+            "name": "PLKINHYI-TIR2"
+          },
+          {
+            "id": "HSD1",
+            "name": "CHASKCDS-HSD1"
+          },
+          {
+            "id": "SLF78",
+            "name": "SDCTLFN1-SLF78"
+          },
+          {
+            "id": "SEE78",
+            "name": "SDCTEEE4-SEE78"
+          },
+          {
+            "id": "SAN13",
+            "name": "TOKYJPFA-SAN13"
+          },
+          {
+            "id": "SAA78",
+            "name": "SDCTAAA1-SAA78"
+          },
+          {
+            "id": "LUC1",
+            "name": "ATLDFGYC-LUC1"
+          },
+          {
+            "id": "AMD13",
+            "name": "MEMATLAN-AMD13"
+          },
+          {
+            "id": "TOR1",
+            "name": "TOROONXN-TOR1"
+          },
+          {
+            "id": "QWE1",
+            "name": "QWECLLI1-QWE1"
+          },
+          {
+            "id": "ZOG1",
+            "name": "ZOGASTRO-ZOG1"
+          },
+          {
+            "id": "CAL33",
+            "name": "CALIFORN-CAL33"
+          },
+          {
+            "id": "SHH78",
+            "name": "SDIT1HHH-SHH78"
+          },
+          {
+            "id": "DSA1",
+            "name": "LKJHGFDS-DSA1"
+          },
+          {
+            "id": "CLG1",
+            "name": "CLGRABAD-CLG1"
+          },
+          {
+            "id": "BNA1",
+            "name": "BNARAGBK-BNA1"
+          },
+          {
+            "id": "ATL84",
+            "name": "CANTTCOC-ATL84"
+          },
+          {
+            "id": "APP1",
+            "name": "WBHGTYUI-APP1"
+          },
+          {
+            "id": "RJN1",
+            "name": "RJNRBZAW-RJN1"
+          },
+          {
+            "id": "EHH78",
+            "name": "SDCSHHH5-EHH78"
+          },
+          {
+            "id": "mac10",
+            "name": "PKGTESTF-mac10"
+          },
+          {
+            "id": "SXB78",
+            "name": "SDCTGXB1-SXB78"
+          },
+          {
+            "id": "SAX78",
+            "name": "SDCTAXG1-SAX78"
+          },
+          {
+            "id": "SYD1",
+            "name": "SYDNAUBV-SYD1"
+          },
+          {
+            "id": "TOK1",
+            "name": "TOKYJPFA-TOK1"
+          },
+          {
+            "id": "KGM2",
+            "name": "KGMTNC20-KGM2"
+          },
+          {
+            "id": "DCC1b",
+            "name": "POIUYTGH-DCC1b"
+          },
+          {
+            "id": "SKK78",
+            "name": "SDCTKKK1-SKK78"
+          },
+          {
+            "id": "SGG78",
+            "name": "SDCTGGG1-SGG78"
+          },
+          {
+            "id": "SJJ78",
+            "name": "SDCTJJJ1-SJJ78"
+          },
+          {
+            "id": "SBX78",
+            "name": "SDCTBXG1-SBX78"
+          },
+          {
+            "id": "LAG1",
+            "name": "LARGIZON-LAG1"
+          },
+          {
+            "id": "IAA1",
+            "name": "QAZXSWED-IAA1"
+          },
+          {
+            "id": "POI1",
+            "name": "PLMNJKIU-POI1"
+          },
+          {
+            "id": "LAG1a",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "PBL1",
+            "name": "PBLAPBAI-PBL1"
+          },
+          {
+            "id": "LAG45",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "MAR1",
+            "name": "MNBVCXZM-MAR1"
+          },
+          {
+            "id": "HST70",
+            "name": "HSTNTX70-HST70"
+          },
+          {
+            "id": "DCC1a",
+            "name": "POIUYTGH-DCC1a"
+          },
+          {
+            "id": "TOL1",
+            "name": "TOLDOH21-TOL1"
+          },
+          {
+            "id": "LON1",
+            "name": "LONEENCO-LON1"
+          },
+          {
+            "id": "SJU78",
+            "name": "SDIT1JUB-SJU78"
+          },
+          {
+            "id": "STN27",
+            "name": "HSTNTX01-STN27"
+          },
+          {
+            "id": "SSW56",
+            "name": "ss8126GT-SSW56"
+          },
+          {
+            "id": "SBB78",
+            "name": "SDIT1BBB-SBB78"
+          },
+          {
+            "id": "DCC3",
+            "name": "POIUYTGH-DCC3"
+          },
+          {
+            "id": "GNV1",
+            "name": "GNVLSCTL-GNV1"
+          },
+          {
+            "id": "WAS1",
+            "name": "WASHDCSW-WAS1"
+          },
+          {
+            "id": "TOY1",
+            "name": "TORYONNZ-TOY1"
+          },
+          {
+            "id": "STT1",
+            "name": "STTLWA02-STT1"
+          },
+          {
+            "id": "STG1",
+            "name": "STTGGE62-STG1"
+          },
+          {
+            "id": "SLL78",
+            "name": "SDCTLLL1-SLL78"
+          },
+          {
+            "id": "SBU78",
+            "name": "SDIT1BUB-SBU78"
+          },
+          {
+            "id": "ATL2",
+            "name": "ATLNGANW-ATL2"
+          },
+          {
+            "id": "BOT1",
+            "name": "BOTHWAKY-BOT1"
+          },
+          {
+            "id": "SNG1",
+            "name": "SNGPSIAU-SNG1"
+          },
+          {
+            "id": "NYC1",
+            "name": "NYCMNY54-NYC1"
+          },
+          {
+            "id": "LAG1b",
+            "name": "LARGIZON-LAG1b"
+          },
+          {
+            "id": "AMD15",
+            "name": "AMDFAA01-AMD15"
+          },
+          {
+            "id": "SNA1",
+            "name": "SNANTXCA-SNA1"
+          },
+          {
+            "id": "PLT1",
+            "name": "PLTNCA60-PLT1"
+          },
+          {
+            "id": "TLP1",
+            "name": "TLPNXM18-TLP1"
+          },
+          {
+            "id": "SDD81",
+            "name": "SAIT1DD6-SDD81"
+          },
+          {
+            "id": "DCC1",
+            "name": "POIUYTGH-DCC1"
+          },
+          {
+            "id": "DCC2",
+            "name": "POIUYTGH-DCC2"
+          },
+          {
+            "id": "OKC1",
+            "name": "OKCBOK55-OKC1"
+          },
+          {
+            "id": "PAR1",
+            "name": "PARSFRCG-PAR1"
+          },
+          {
+            "id": "TES36",
+            "name": "ABCEETES-TES36"
+          },
+          {
+            "id": "COM1",
+            "name": "PLMKOPIU-COM1"
+          },
+          {
+            "id": "ANI1",
+            "name": "ATLNGTRE-ANI1"
+          },
+          {
+            "id": "SDG78",
+            "name": "SDIT1BDG-SDG78"
+          },
+          {
+            "id": "mac20",
+            "name": "PKGTESTF-mac20"
+          },
+          {
+            "id": "DSF45",
+            "name": "DSFBG123-DSF45"
+          },
+          {
+            "id": "HST25",
+            "name": "HSTNTX01-HST25"
+          },
+          {
+            "id": "AMD18",
+            "name": "AUDIMA01-AMD18"
+          },
+          {
+            "id": "SAA80",
+            "name": "SAIT9AA3-SAA80"
+          },
+          {
+            "id": "SSA56",
+            "name": "SSIT2AA7-SSA56"
+          },
+          {
+            "id": "SDD82",
+            "name": "SAIT1DD9-SDD82"
+          },
+          {
+            "id": "JCV1",
+            "name": "JCVLFLBW-JCV1"
+          },
+          {
+            "id": "SUL2",
+            "name": "WERTYUJK-SUL2"
+          },
+          {
+            "id": "PUR1",
+            "name": "purelyde-PUR1"
+          },
+          {
+            "id": "FDE55",
+            "name": "FDERT555-FDE55"
+          },
+          {
+            "id": "SITE",
+            "name": "LONEENCO-SITE"
+          },
+          {
+            "id": "ATL1",
+            "name": "ATLNGAMA-ATL1"
+          },
+          {
+            "id": "JUL1",
+            "name": "ZXCVBNMM-JUL1"
+          },
+          {
+            "id": "TAT34",
+            "name": "TESAAISB-TAT34"
+          },
+          {
+            "id": "XCP12",
+            "name": "CHKGH123-XCP12"
+          },
+          {
+            "id": "RAI1",
+            "name": "poiuytre-RAI1"
+          },
+          {
+            "id": "HPO1",
+            "name": "ATLNGAUP-HPO1"
+          },
+          {
+            "id": "KJF12",
+            "name": "KJFDH123-KJF12"
+          },
+          {
+            "id": "SCC80",
+            "name": "SAIT9CC3-SCC80"
+          },
+          {
+            "id": "SAA12",
+            "name": "SAIT9AF8-SAA12"
+          },
+          {
+            "id": "SAA14",
+            "name": "SAIT1AA9-SAA14"
+          },
+          {
+            "id": "ATL35",
+            "name": "TTESSAAI-ATL35"
+          },
+          {
+            "id": "CWY1",
+            "name": "CWYMOWBS-CWY1"
+          },
+          {
+            "id": "ATL76",
+            "name": "TELEPAAI-ATL76"
+          },
+          {
+            "id": "DSL12",
+            "name": "DSLFK242-DSL12"
+          },
+          {
+            "id": "ATL53",
+            "name": "AAIATLTE-ATL53"
+          },
+          {
+            "id": "SAA11",
+            "name": "SAIT9AA2-SAA11"
+          },
+          {
+            "id": "ATL62",
+            "name": "TESSASCH-ATL62"
+          },
+          {
+            "id": "AUG1",
+            "name": "ASDFGHJK-AUG1"
+          },
+          {
+            "id": "POI22",
+            "name": "POIUY123-POI22"
+          },
+          {
+            "id": "SAA13",
+            "name": "SAIT1AA9-SAA13"
+          },
+          {
+            "id": "BHY17",
+            "name": "BHYTFRF3-BHY17"
+          },
+          {
+            "id": "LIS1",
+            "name": "HOSTPROF-LIS1"
+          },
+          {
+            "id": "SIP1",
+            "name": "ZXCVBNMK-SIP1"
+          },
+          {
+            "id": "ATL99",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "ATL64",
+            "name": "FORLOAAJ-ATL64"
+          },
+          {
+            "id": "TAT33",
+            "name": "TESAAISA-TAT33"
+          },
+          {
+            "id": "RAD10",
+            "name": "INDIPUNE-RAD10"
+          },
+          {
+            "id": "RTW5",
+            "name": "BHYTFRY4-RTW5"
+          },
+          {
+            "id": "JGS1",
+            "name": "KSJKKKKK-JGS1"
+          },
+          {
+            "id": "ATL98",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "WAN1",
+            "name": "LEIWANGW-WAN1"
+          },
+          {
+            "id": "ATL44",
+            "name": "ATLSANAB-ATL44"
+          },
+          {
+            "id": "RTD2",
+            "name": "BHYTFRk4-RTD2"
+          },
+          {
+            "id": "NIR1",
+            "name": "ORFLMANA-NIR1"
+          },
+          {
+            "id": "ATL75",
+            "name": "SANAAIRE-ATL75"
+          },
+          {
+            "id": "NUM1",
+            "name": "QWERTYUI-NUM1"
+          },
+          {
+            "id": "MTN32",
+            "name": "MDTWNJ21-MTN32"
+          },
+          {
+            "id": "RTZ4",
+            "name": "BHYTFRZ6-RTZ4"
+          },
+          {
+            "id": "ATL56",
+            "name": "ATLSANAC-ATL56"
+          },
+          {
+            "id": "AMS1",
+            "name": "AMSTNLBW-AMS1"
+          },
+          {
+            "id": "RCT1",
+            "name": "AMSTERNL-RCT1"
+          },
+          {
+            "id": "JAN1",
+            "name": "ORFLMATT-JAN1"
+          },
+          {
+            "id": "ABC14",
+            "name": "TESAAISA-ABC14"
+          },
+          {
+            "id": "TAT37",
+            "name": "TESAAISD-TAT37"
+          },
+          {
+            "id": "MIC54",
+            "name": "MICHIGAN-MIC54"
+          },
+          {
+            "id": "ABC11",
+            "name": "ATLSANAI-ABC11"
+          },
+          {
+            "id": "AMF11",
+            "name": "AMDOCS01-AMF11"
+          },
+          {
+            "id": "ATL63",
+            "name": "ATLSANEW-ATL63"
+          },
+          {
+            "id": "ABC12",
+            "name": "ATLSECIA-ABC12"
+          },
+          {
+            "id": "MTN20",
+            "name": "MDTWNJ21-MTN20"
+          },
+          {
+            "id": "ABC15",
+            "name": "AAITESAN-ABC15"
+          },
+          {
+            "id": "AVT1",
+            "name": "AVTRFLHD-AVT1"
+          },
+          {
+            "id": "ATL34",
+            "name": "ATLSANAI-ATL34"
+          }
+        ],
+        "categoryParameters": {
+          "owningEntityList": [
+            {
+              "id": "aaa1",
+              "name": "aaa1"
+            },
+            {
+              "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+              "name": "WayneHolland"
+            },
+            {
+              "id": "Melissa",
+              "name": "Melissa"
+            }
+          ],
+          "projectList": [
+            {
+              "id": "WATKINS",
+              "name": "WATKINS"
+            },
+            {
+              "id": "x1",
+              "name": "x1"
+            },
+            {
+              "id": "yyy1",
+              "name": "yyy1"
+            }
+          ],
+          "lineOfBusinessList": [
+            {
+              "id": "ONAP",
+              "name": "ONAP"
+            },
+            {
+              "id": "zzz1",
+              "name": "zzz1"
+            }
+          ],
+          "platformList": [
+            {
+              "id": "platform",
+              "name": "platform"
+            },
+            {
+              "id": "xxx1",
+              "name": "xxx1"
+            }
+          ]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [
+          {
+            "id": "CAR_2020_ER",
+            "name": "CAR_2020_ER",
+            "isPermitted": true
+          },
+          {
+            "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+            "name": "JULIO ERICKSON",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-2",
+            "name": "DALE BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-1",
+            "name": "LLOYD BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example",
+            "name": "JimmyExampleCust-20161102",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example2",
+            "name": "JimmyExampleCust-20161103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-102",
+            "name": "ERICA5779-TestSub-PWT-102",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-101",
+            "name": "ERICA5779-TestSub-PWT-101",
+            "isPermitted": false
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-4",
+            "name": "ERICA5779-Subscriber-5",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-103",
+            "name": "ERICA5779-TestSub-PWT-103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-2",
+            "name": "ERICA5779-Subscriber-2",
+            "isPermitted": false
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "SILVIA ROBBINS",
+            "isPermitted": true
+          },
+          {
+            "id": "ERICA5779-Subscriber-3",
+            "name": "ERICA5779-Subscriber-3",
+            "isPermitted": false
+          },
+          {
+            "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+            "name": "CRAIG/ROBERTS",
+            "isPermitted": false
+          }
+        ]
+      }
+    };
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('vnf new popup service', () => {
+  let injector;
+  let service: VnfPopupService;
+  let genericFormService: GenericFormService
+  let defaultDataGeneratorService: DefaultDataGeneratorService;
+  let fb: FormBuilder;
+  let iframeService: IframeService;
+
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      providers : [
+        VnfPopupService,
+        DefaultDataGeneratorService,
+        GenericFormService,
+        FormBuilder,
+        IframeService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        AaiService,
+        LogService,
+        BasicPopupService,
+        VfModulePopuopService,
+        BasicControlGenerator,
+        VnfControlGenerator,
+        {provide: NgRedux, useClass: MockReduxStore},
+        {provide: HttpClient, useClass: MockAppStore},
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(VnfPopupService);
+    genericFormService = injector.get(GenericFormService);
+    defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
+    fb = injector.get(FormBuilder);
+    iframeService = injector.get(IframeService);
+
+  })().then(done).catch(done.fail));
+
+  test('getTitle vnf should return the correct title for edit and create mode', () => {
+    expect(service.getTitle(false)).toBe('Set a new VNF');
+    expect(service.getTitle(true)).toBe('Edit VNF instance');
+  });
+
+  test('getSubRightTitle vnf should return popup type', () => {
+    expect(service.getSubRightTitle()).toBe('VNF Instance Details');
+  });
+
+  test('getModelInformation  vnf should update modelInformations', () => {
+    const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+    const vnfModelName: string = '2017-388_ADIOD-vPE 1';
+    service.getModelInformation(serviceId, vnfModelName);
+    expect(service.modelInformations.length).toEqual(14);
+    expect(service.modelInformations[0].label).toEqual("Subscriber Name");
+    expect(service.modelInformations[0].values).toEqual(['SILVIA ROBBINS']);
+
+    expect(service.modelInformations[1].label).toEqual("Service Name");
+    expect(service.modelInformations[1].values).toEqual(['action-data']);
+
+    expect(service.modelInformations[2].label).toEqual("Service Instance Name");
+    expect(service.modelInformations[2].values).toEqual(['InstanceName']);
+
+    expect(service.modelInformations[3].label).toEqual("Model Name");
+    expect(service.modelInformations[3].values).toEqual(['2017-388_ADIOD-vPE']);
+
+    expect(service.modelInformations[4].label).toEqual("Model version");
+    expect(service.modelInformations[4].values).toEqual(['1.0']);
+
+    expect(service.modelInformations[5].label).toEqual("Description");
+    expect(service.modelInformations[5].values).toEqual(['Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM']);
+
+    expect(service.modelInformations[6].label).toEqual("Category");
+    expect(service.modelInformations[6].values).toEqual([undefined]);
+
+    expect(service.modelInformations[7].label).toEqual("Sub Category");
+    expect(service.modelInformations[7].values).toEqual([undefined]);
+
+    expect(service.modelInformations[8].label).toEqual("UUID");
+    expect(service.modelInformations[8].values).toEqual(['0903e1c0-8e03-4936-b5c2-260653b96413']);
+
+    expect(service.modelInformations[9].label).toEqual("Invariant UUID");
+    expect(service.modelInformations[9].values).toEqual(['00beb8f9-6d39-452f-816d-c709b9cbb87d']);
+
+    expect(service.modelInformations[10].label).toEqual("Service type");
+    expect(service.modelInformations[10].values).toEqual(['']);
+
+    expect(service.modelInformations[11].label).toEqual("Service role");
+    expect(service.modelInformations[11].values).toEqual(['']);
+
+    expect(service.modelInformations[12].label).toEqual("Minimum to instantiate");
+    expect(service.modelInformations[12].values).toEqual(['0']);
+
+    expect(service.modelInformations[13].label).toEqual("Maximum to instantiate");
+    expect(service.modelInformations[13].values).toEqual(['5']);
+  });
+
+  test('getSubLeftTitle new vnf popup should return service model name', () => {
+    service.uuidData = {
+      serviceId: '6e59c5de-f052-46fa-aa7e-2fca9d674c44',
+      modelName: 'VF_vMee 0'
+    };
+    expect(service.getSubLeftTitle()).toBe('VNF MODEL: VF_vMee');
+  });
+
+  test('getInstance with empty storekey should be created', () => {
+    const serviceId: string = '6e59c5de-f052-46fa-aa7e-2fca9d674c44';
+    const vnfModelName: string = '2017-388_ADIOD-vPE 1';
+    const newInstance = service.getInstance(serviceId, vnfModelName, null);
+    expect(newInstance).toBeDefined();
+  });
+
+  test('getInstance with not empty storekey should return vnfStoreKey', () => {
+    const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+    const vnfModelName: string = '2017-388_ADIOD-vPE 1';
+    const vnfStoreKey: string = '2017-488_ADIOD-vPE 0';
+    const newInstance = service.getInstance(serviceId, vnfModelName, vnfStoreKey);
+    expect(newInstance.vnfStoreKey).toEqual('2017-488_ADIOD-vPE 0');
+  });
+
+  test('getGenericFormPopupDetails returns the FormPopupDetails object', () => {
+      const serviceId: string = '6e59c5de-f052-46fa-aa7e-2fca9d674c44';
+      const vnfModelName: string = 'VF_vMee 0';
+      const vnfStoreKey: string = 'VF_vMee 0';
+      let uuidData: UUIDData = <any>{
+        serviceId: "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+        modelName: "VF_vMee 0",
+        vnfStoreKey: "VF_vMee 0"
+      };
+      const formPopupDetailsObject = service.getGenericFormPopupDetails(serviceId, vnfModelName, vnfStoreKey, null, uuidData, true);
+      expect(formPopupDetailsObject).toBeDefined();
+    }
+  );
+});
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.ts
new file mode 100644
index 0000000..8969e3c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnf/vnf.popup.service.ts
@@ -0,0 +1,158 @@
+import {Injectable} from '@angular/core';
+import {GenericPopupInterface} from "../generic-popup.interface";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
+import {FormGroup} from "@angular/forms";
+import {ModelInformationItem} from "../../../model-information/model-information.component";
+import {ServiceModel} from "../../../../models/serviceModel";
+import {Subject} from "rxjs/Subject";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {VnfControlGenerator} from "../../../genericForm/formControlsServices/vnfGenerator/vnf.control.generator";
+import {IframeService} from "../../../../utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../../../store/reducers";
+import {Subscriber} from "../../../../models/subscriber";
+import {Constants} from "../../../../utils/constants";
+import {VnfInstance} from "../../../../models/vnfInstance";
+import {ModelInfo} from "../../../../models/modelInfo";
+import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions";
+import {createVNFInstance, updateVNFInstance} from "../../../../storeUtil/utils/vnf/vnf.actions";
+import * as _ from 'lodash';
+
+@Injectable()
+export class VnfPopupService implements GenericPopupInterface{
+  dynamicInputs: any;
+  instance: any;
+  model:any;
+  serviceModel:ServiceModel;
+  modelInformations: ModelInformationItem[] = [];
+  uuidData: Object;
+  closeDialogEvent: Subject<any> = new Subject<any>();
+  isUpdateMode: boolean;
+
+  constructor(
+    private _basicControlGenerator: BasicControlGenerator,
+    private _vnfControlGenerator: VnfControlGenerator,
+    private _iframeService: IframeService,
+    private _defaultDataGeneratorService: DefaultDataGeneratorService,
+    private _aaiService: AaiService,
+    private _basicPopupService: BasicPopupService,
+    private _store: NgRedux<AppState>) {
+  }
+
+  getGenericFormPopupDetails(serviceId: string, modelName: string, vnfStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
+    this.uuidData = uuidData;
+    this.isUpdateMode = isUpdateMode;
+    this.instance = this.getInstance(serviceId, modelName, vnfStoreKey);
+    this.getModelInformation(serviceId, modelName);
+
+    return new FormPopupDetails(this,
+      PopupType.VNF_MACRO,
+      uuidData,
+      this.getTitle(isUpdateMode),
+      this.getSubLeftTitle(),
+      this.getSubRightTitle(),
+      this.getControls(serviceId, modelName, vnfStoreKey),
+      this._basicPopupService.getDynamicInputs(serviceId, modelName, vnfStoreKey, 'vnfs'),
+      this.modelInformations,
+      (that, form: FormGroup) => {that.onSubmit(that, form);},
+      (that: any, form: FormGroup) => {that.onCancel(that, form); }
+      )
+  }
+
+  getControls(serviceId: string, modelName: string, vnfStoreKey: string){
+    if(this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') {
+      return this._vnfControlGenerator.getMacroFormControls(serviceId, vnfStoreKey, modelName);
+    } else {
+      return this._vnfControlGenerator.getAlaCarteFormControls(serviceId, vnfStoreKey, modelName);
+    }
+  }
+
+  getInstance(serviceId: string, modelName: string, vnfStoreKey: string): any {
+    if(_.isNil(vnfStoreKey)){
+      return new VnfInstance();
+    }
+    return this._store.getState().service.serviceInstance[serviceId].vnfs[vnfStoreKey];
+  }
+
+  getModelInformation(serviceId: string, modelName: string): void {
+    this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
+      this.serviceModel = new ServiceModel(result);
+      this.model = this._basicPopupService.getModelFromResponse(result, 'vnfs', modelName);
+      const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
+      this.modelInformations = [
+        new ModelInformationItem("Subscriber Name", "subscriberName", [this.extractSubscriberNameBySubscriberId(serviceInstance.globalSubscriberId, this._store)], "", true),
+        new ModelInformationItem("Service Name", "serviceModelName", [this.serviceModel.name], "", true),
+        new ModelInformationItem("Service Instance Name", "serviceName", [serviceInstance.instanceName], "", false),
+        new ModelInformationItem("Model Name", "modelName", [this.model.name], "", true),
+        new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
+        new ModelInformationItem("Description", "description", [this.model.description]),
+        new ModelInformationItem("Category", "category", [this.model.category]),
+        new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
+        new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
+        new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
+        new ModelInformationItem("Service type", "serviceType", [this.serviceModel.serviceType]),
+        new ModelInformationItem("Service role", "serviceRole", [this.serviceModel.serviceRole]),
+        new ModelInformationItem("Minimum to instantiate", "vnf-min", [!_.isNil(this.model.min) ? this.model.min.toString() : '0'], "", false),
+        new ModelInformationItem("Maximum to instantiate", "vnf-max", [!_.isNil(this.model.max) ? this.model.max.toString() : '1'], "", false)
+        ];
+    })
+  }
+
+  getSubLeftTitle(): string {
+    return "VNF MODEL: " + this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].vnfs[this.uuidData['modelName']].name;
+  }
+
+  getSubRightTitle(): string {
+    return "VNF Instance Details";
+  }
+
+  storeVNF = (that, formValues: any): void => {
+    formValues.modelInfo = new ModelInfo(that.model);
+    formValues.uuid = formValues.modelInfo.uuid;
+    formValues.isMissingData = false;
+    if(!that.isUpdateMode){
+      that._store.dispatch(changeInstanceCounter(formValues.modelInfo.modelUniqueId, that.uuidData.serviceId, 1 , <any> {data: {type: 'VF'}}));
+      this._store.dispatch(createVNFInstance(formValues, that.uuidData['modelName'], that.uuidData['serviceId'], that.uuidData['modelName']));
+    }else {
+      that._store.dispatch(updateVNFInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vnfStoreKey))
+    }
+  };
+
+  getTitle(isUpdateMode: boolean): string {
+    return isUpdateMode  ? "Edit VNF instance": "Set a new VNF" ;
+  }
+
+  onCancel(that, form): void {
+    form.reset();
+    that._iframeService.removeClassCloseModal('content');
+    this.closeDialogEvent.next(that);
+  }
+
+  onSubmit(that, form: FormGroup, ...args): void {
+    form.value['instanceParams'] = form.value['instanceParams'] && [form.value['instanceParams']];
+    that.storeVNF(that, form.value);
+    window.parent.postMessage( {
+      eventId: 'submitIframe',
+      data: {
+        serviceModelId: that.uuidData.serviceId
+      }
+    }, "*");
+    that.onCancel(that, form);
+  }
+
+  extractSubscriberNameBySubscriberId(subscriberId: string, store: NgRedux<AppState>) {
+    let result: string = null;
+    let filteredArray: any = _.filter(store.getState().service.subscribers, function (o: Subscriber) {
+      return o.id === subscriberId
+    });
+    if (filteredArray.length > 0) {
+      result = filteredArray[0].name;
+    }
+    return result;
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.spec.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.spec.ts
new file mode 100644
index 0000000..6027f43
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.spec.ts
@@ -0,0 +1,3239 @@
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {NgRedux} from "@angular-redux/store";
+import {ReflectiveInjector} from "@angular/core";
+import {IframeService} from "../../../../utils/iframe.service";
+import {VfModulePopuopService} from "../vfModule/vfModule.popuop.service";
+import {FormBuilder} from "@angular/forms";
+import {GenericFormService} from "../../../genericForm/generic-form.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {LogService} from "../../../../utils/log/log.service";
+import {HttpClient} from "@angular/common/http";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {UUIDData} from "../../generic-form-popup.component";
+import {FeatureFlagsService} from "../../../../services/featureFlag/feature-flags.service";
+import {VnfGroupPopupService} from "./vnfGroup.popup.service";
+import {VnfGroupControlGenerator} from "../../../genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator";
+import {getTestBed, TestBed} from "@angular/core/testing";
+
+class MockAppStore<T> {}
+
+class MockReduxStore<T> {
+  getState() {
+    return {
+      "global": {
+        "name": null,
+        "flags": {
+          "FLAG_NETWORK_TO_ASYNC_INSTANTIATION": false,
+          "FLAG_SHOW_ASSIGNMENTS": true,
+          "FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS": true,
+          "FLAG_UNASSIGN_SERVICE": true,
+          "FLAG_SHOW_VERIFY_SERVICE": false,
+          "FLAG_COLLECTION_RESOURCE_SUPPORT": true,
+          "FLAG_DUPLICATE_VNF": true,
+          "FLAG_SERVICE_MODEL_CACHE": true,
+          "FLAG_ADVANCED_PORTS_FILTER": true,
+          "CREATE_INSTANCE_TEST": false,
+          "FLAG_SETTING_DEFAULTS_IN_DRAWING_BOARD": false,
+          "FLAG_REGION_ID_FROM_REMOTE": true,
+          "FLAG_ASYNC_INSTANTIATION": true,
+          "FLAG_ASYNC_JOBS": true,
+          "EMPTY_DRAWING_BOARD_TEST": false,
+          "FLAG_ADD_MSO_TESTAPI_FIELD": true
+        },
+        "type": "[FLAGS] Update"
+      },
+      "service": {
+        "serviceHierarchy": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "service": {
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "ComplexService",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "Emanuel",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "ComplexService",
+              "serviceEcompNaming": "false",
+              "instantiationType": "Macro",
+              "inputs": {}
+            },
+            "vnfGroups": {
+              "VF_vMee 0": {
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "invariantUuid": "4160458e-f648-4b30-a176-43881ffffe9e",
+                "description": "VSP_vMee",
+                "name": "VF_vMee",
+                "version": "2.0",
+                "customizationUuid": "91415b44-753d-494c-926a-456a9172bbb9",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "max_instances": 10,
+                  "min_instances": 1,
+                  "gpb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_start_port": "0",
+                  "sctp-a-ipv6-egress_rule_application": "any",
+                  "Internal2_allow_transit": "true",
+                  "sctp-b-IPv6_ethertype": "IPv6",
+                  "sctp-a-egress_rule_application": "any",
+                  "sctp-b-ingress_action": "pass",
+                  "sctp-b-ingress_rule_protocol": "icmp",
+                  "ncb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-ingress-src_start_port": "0.0",
+                  "ncb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "fsb_volume_size_0": "320.0",
+                  "sctp-b-egress_src_addresses": "local",
+                  "sctp-a-ipv6-ingress_ethertype": "IPv4",
+                  "sctp-a-ipv6-ingress-dst_start_port": "0",
+                  "sctp-b-ipv6-ingress_rule_application": "any",
+                  "domain_name": "default-domain",
+                  "sctp-a-ingress_rule_protocol": "icmp",
+                  "sctp-b-egress-src_start_port": "0.0",
+                  "sctp-a-egress_src_addresses": "local",
+                  "sctp-b-display_name": "epc-sctp-b-ipv4v6-sec-group",
+                  "sctp-a-egress-src_start_port": "0.0",
+                  "sctp-a-ingress_ethertype": "IPv4",
+                  "sctp-b-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-dst_subnet_prefix_v6": "::",
+                  "nf_naming": "{ecomp_generated_naming=true}",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-b-egress-dst_start_port": "0.0",
+                  "ncb_flavor_name": "nv.c20r64d1",
+                  "gpb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix_len": "0.0",
+                  "Internal2_net_cidr": "10.0.0.10",
+                  "sctp-a-ingress-dst_start_port": "0.0",
+                  "sctp-a-egress-dst_start_port": "0.0",
+                  "fsb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-egress_ethertype": "IPv4",
+                  "vlc_st_service_mode": "in-network-nat",
+                  "sctp-a-ipv6-egress_ethertype": "IPv4",
+                  "sctp-a-egress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-egress_rule_application": "any",
+                  "sctp-b-egress_action": "pass",
+                  "sctp-a-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-b-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-b-name": "epc-sctp-b-ipv4v6-sec-group",
+                  "fsb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ipv6-ingress-src_start_port": "0.0",
+                  "sctp-b-ipv6-egress_ethertype": "IPv4",
+                  "Internal1_net_cidr": "10.0.0.10",
+                  "sctp-a-egress_dst_subnet_prefix": "0.0.0.0",
+                  "fsb_flavor_name": "nv.c20r64d1",
+                  "sctp_rule_protocol": "132",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_rule_application": "any",
+                  "ecomp_generated_naming": "false",
+                  "sctp-a-IPv6_ethertype": "IPv6",
+                  "vlc2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_virtualization_type": "virtual-machine",
+                  "sctp-b-ingress-dst_start_port": "0.0",
+                  "sctp-b-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress-src_end_port": "65535.0",
+                  "sctp-a-display_name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-b-ingress_rule_application": "any",
+                  "int2_sec_group_name": "int2-sec-group",
+                  "vlc_flavor_name": "nd.c16r64d1",
+                  "sctp-b-ipv6-egress_src_addresses": "local",
+                  "vlc_st_interface_type_int1": "other1",
+                  "sctp-b-egress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-egress-dst_start_port": "0",
+                  "vlc_st_interface_type_int2": "other2",
+                  "sctp-a-ipv6-egress_rule_protocol": "any",
+                  "Internal2_shared": "false",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "Internal2_rpf": "disable",
+                  "vlc1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ipv6-egress_src_end_port": "65535",
+                  "sctp-a-ipv6-egress_src_addresses": "local",
+                  "sctp-a-ingress-dst_end_port": "65535.0",
+                  "sctp-a-ipv6-egress_src_end_port": "65535",
+                  "Internal1_forwarding_mode": "l2",
+                  "Internal2_dhcp": "false",
+                  "sctp-a-dst_subnet_prefix_v6": "::",
+                  "pxe_image_name": "MME_PXE-Boot_16ACP04_GA.qcow2",
+                  "vlc_st_interface_type_gtp": "other0",
+                  "ncb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-src_subnet_prefix_v6": "::",
+                  "sctp-a-egress_dst_subnet_prefix_len": "0.0",
+                  "int1_sec_group_name": "int1-sec-group",
+                  "Internal1_dhcp": "false",
+                  "sctp-a-ipv6-egress_dst_end_port": "65535",
+                  "Internal2_forwarding_mode": "l2",
+                  "fsb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-egress_dst_subnet_prefix": "0.0.0.0",
+                  "Internal1_net_cidr_len": "17",
+                  "gpb2_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "sctp-b-ingress-src_subnet_prefix_len": "0.0",
+                  "sctp-a-ingress_dst_addresses": "local",
+                  "sctp-a-egress_action": "pass",
+                  "fsb_volume_type_0": "SF-Default-SSD",
+                  "ncb2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_sctp_a": "left",
+                  "vlc_st_interface_type_sctp_b": "right",
+                  "sctp-a-src_subnet_prefix_v6": "::",
+                  "vlc_st_version": "2",
+                  "sctp-b-egress_ethertype": "IPv4",
+                  "sctp-a-ingress_rule_application": "any",
+                  "gpb1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "instance_ip_family_v6": "v6",
+                  "sctp-a-ipv6-egress_src_start_port": "0",
+                  "sctp-b-ingress-src_start_port": "0.0",
+                  "sctp-b-ingress_dst_addresses": "local",
+                  "fsb1_Internal1_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_interface_type_oam": "management",
+                  "multi_stage_design": "true",
+                  "oam_sec_group_name": "oam-sec-group",
+                  "Internal2_net_gateway": "10.0.0.10",
+                  "sctp-a-ipv6-ingress-dst_end_port": "65535",
+                  "sctp-b-ipv6-egress-dst_start_port": "0",
+                  "Internal1_net_gateway": "10.0.0.10",
+                  "sctp-b-ipv6-egress_rule_protocol": "any",
+                  "gtp_sec_group_name": "gtp-sec-group",
+                  "sctp-a-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix_len": "0",
+                  "sctp-a-ipv6-ingress_dst_addresses": "local",
+                  "sctp-a-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-egress_action": "pass",
+                  "sctp-a-ipv6-egress_action": "pass",
+                  "Internal1_shared": "false",
+                  "sctp-b-ipv6-ingress_rule_protocol": "any",
+                  "Internal2_net_cidr_len": "17",
+                  "sctp-a-name": "epc-sctp-a-ipv4v6-sec-group",
+                  "sctp-a-ingress-src_end_port": "65535.0",
+                  "sctp-b-ipv6-ingress_src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-egress-dst_end_port": "65535.0",
+                  "sctp-a-ingress_action": "pass",
+                  "sctp-b-egress_rule_protocol": "icmp",
+                  "sctp-b-ipv6-ingress_action": "pass",
+                  "vlc_st_service_type": "firewall",
+                  "sctp-b-ipv6-egress_dst_end_port": "65535",
+                  "sctp-b-ipv6-ingress-dst_start_port": "0",
+                  "vlc2_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "vlc_st_availability_zone": "true",
+                  "fsb_volume_image_name_1": "MME_FSB2_16ACP04_GA.qcow2",
+                  "sctp-b-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_src_subnet_prefix_len": "0",
+                  "Internal1_allow_transit": "true",
+                  "gpb_flavor_name": "nv.c20r64d1",
+                  "availability_zone_max_count": "1",
+                  "fsb_volume_image_name_0": "MME_FSB1_16ACP04_GA.qcow2",
+                  "sctp-b-ipv6-ingress_dst_addresses": "local",
+                  "sctp-b-ipv6-egress_dst_subnet_prefix": "0.0.0.0",
+                  "sctp-b-ipv6-ingress_ethertype": "IPv4",
+                  "vlc1_Internal2_mac": "00:11:22:EF:AC:DF",
+                  "sctp-a-ingress-src_subnet_prefix": "0.0.0.0",
+                  "sctp-a-ipv6-ingress_action": "pass",
+                  "Internal1_rpf": "disable",
+                  "sctp-b-ingress_ethertype": "IPv4",
+                  "sctp-b-egress_rule_application": "any",
+                  "sctp-b-ingress-src_end_port": "65535.0",
+                  "sctp-a-ipv6-ingress_rule_protocol": "any",
+                  "sctp-a-ingress-src_start_port": "0.0",
+                  "sctp-b-egress-dst_end_port": "65535.0"
+                },
+                "type": "VnfGroup",
+                "modelCustomizationName": "VF_vMee 0",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                    "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                    "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                    "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                    "description": null,
+                    "name": "VfVmee..vmme_vlc..module-1",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_vlc"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  },
+                  "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                    "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                    "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                    "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                    "description": null,
+                    "name": "VfVmee..vmme_gpb..module-2",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "vmme_gpb"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                    "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                    "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                    "description": null,
+                    "name": "VfVmee..base_vmme..module-0",
+                    "version": "2",
+                    "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "base_vmme"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {},
+                "commands": {},
+                "properties": {
+                  "netowrk_role": "role 1, role 2, role 3",
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {
+              "Port Mirroring Configuration By Policy 0": {
+                "uuid": "b4398538-e89d-4f13-b33d-ca323434ba50",
+                "invariantUuid": "6ef0ca40-f366-4897-951f-abd65d25f6f7",
+                "description": "A port mirroring configuration by policy object",
+                "name": "Port Mirroring Configuration By Policy",
+                "version": "27.0",
+                "customizationUuid": "3c3b7b8d-8669-4b3b-8664-61970041fad2",
+                "inputs": {},
+                "commands": {},
+                "properties": {},
+                "type": "Configuration",
+                "modelCustomizationName": "Port Mirroring Configuration By Policy 0",
+                "sourceNodes": [],
+                "collectorNodes": null,
+                "configurationByPolicy": false
+              }
+            },
+            "serviceProxies": {},
+            "vfModules": {
+              "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+                "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+                "invariantUuid": "98a7c88b-b577-476a-90e4-e25a5871e02b",
+                "customizationUuid": "55b1be94-671a-403e-a26c-667e9c47d091",
+                "description": null,
+                "name": "VfVmee..vmme_vlc..module-1",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_vlc"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              },
+              "vf_vmee0..VfVmee..vmme_gpb..module-2": {
+                "uuid": "41708296-e443-4c71-953f-d9a010f059e1",
+                "invariantUuid": "1cca90b8-3490-495e-87da-3f3e4c57d5b9",
+                "customizationUuid": "6add59e0-7fe1-4bc4-af48-f8812422ae7c",
+                "description": null,
+                "name": "VfVmee..vmme_gpb..module-2",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..vmme_gpb..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "vmme_gpb"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "vf_vmee0..VfVmee..base_vmme..module-0": {
+                "uuid": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                "invariantUuid": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                "customizationUuid": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                "description": null,
+                "name": "VfVmee..base_vmme..module-0",
+                "version": "2",
+                "modelCustomizationName": "VfVmee..base_vmme..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "base_vmme"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "service": {
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "name": "action-data",
+              "version": "1.0",
+              "toscaModelURL": null,
+              "category": "",
+              "serviceType": "",
+              "serviceRole": "",
+              "description": "",
+              "serviceEcompNaming": "false",
+              "instantiationType": "A-La-Carte",
+              "inputs": {
+                "2017488_adiodvpe0_ASN": {
+                  "type": "string",
+                  "description": "AV/PE",
+                  "entry_schema": null,
+                  "inputProperties": null,
+                  "constraints": [],
+                  "required": true,
+                  "default": "AV_vPE"
+                }
+              }
+            },
+            "vnfGroups": {
+              "2017-388_ADIOD-vPE 1": {
+                "uuid": "0903e1c0-8e03-4936-b5c2-260653b96413",
+                "invariantUuid": "00beb8f9-6d39-452f-816d-c709b9cbb87d",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "1.0",
+                "customizationUuid": "280dec31-f16d-488b-9668-4aae55d6648a",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {
+                    "displayName": "bandwidth",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth"
+                  },
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {
+                    "displayName": "ASN",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_ASN"
+                  },
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "max_instances": 5,
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VnfGroup",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 1",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-388_ADIOD-vPE 0": {
+                "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-388_ADIOD-vPE",
+                "version": "4.0",
+                "customizationUuid": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {
+                    "displayName": "bandwidth",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth"
+                  },
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {
+                    "displayName": "ASN",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_ASN"
+                  },
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VnfGroup",
+                "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+                "vfModules": {},
+                "volumeGroups": {},
+                "vfcInstanceGroups": {}
+              },
+              "2017-488_ADIOD-vPE 0": {
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                "invariantUuid": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                "description": "Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM",
+                "name": "2017-488_ADIOD-vPE",
+                "version": "5.0",
+                "customizationUuid": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {
+                  "vnf_config_template_version": {
+                    "displayName": "vnf_config_template_version",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_config_template_version"
+                  },
+                  "bandwidth_units": {
+                    "displayName": "bandwidth_units",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth_units"
+                  },
+                  "bandwidth": {
+                    "displayName": "bandwidth",
+                    "command": "get_input",
+                    "inputName": "adiodvpe0_bandwidth"
+                  },
+                  "AIC_CLLI": {
+                    "displayName": "AIC_CLLI",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_AIC_CLLI"
+                  },
+                  "ASN": {
+                    "displayName": "ASN",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_ASN"
+                  },
+                  "vnf_instance_name": {
+                    "displayName": "vnf_instance_name",
+                    "command": "get_input",
+                    "inputName": "2017488_adiodvpe0_vnf_instance_name"
+                  }
+                },
+                "properties": {
+                  "vmxvre_retype": "RE-VMX",
+                  "vnf_config_template_version": "get_input:2017488_adiodvpe0_vnf_config_template_version",
+                  "sriov44_net_id": "48d399b3-11ee-48a8-94d2-f0ea94d6be8d",
+                  "int_ctl_net_id": "2f323477-6936-4d01-ac53-d849430281d9",
+                  "vmxvpfe_sriov41_0_port_mac": "00:11:22:EF:AC:DF",
+                  "int_ctl_net_name": "VMX-INTXI",
+                  "vmx_int_ctl_prefix": "10.0.0.10",
+                  "sriov43_net_id": "da349ca1-6de9-4548-be88-2d88e99bfef5",
+                  "sriov42_net_id": "760669ba-013d-4d9b-b0e7-4151fe2e6279",
+                  "sriov41_net_id": "25ad52d5-c165-40f8-b3b0-ddfc2373280a",
+                  "nf_type": "vPE",
+                  "vmxvpfe_int_ctl_ip_1": "10.0.0.10",
+                  "is_AVPN_service": "false",
+                  "vmx_RSG_name": "vREXI-affinity",
+                  "vmx_int_ctl_forwarding": "l2",
+                  "vmxvre_oam_ip_0": "10.0.0.10",
+                  "vmxvpfe_sriov44_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_sriov41_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov42_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov44_0_port_unknownunicastallow": "true",
+                  "vmxvre_image_name_0": "VRE-ENGINE_17.2-S2.1.qcow2",
+                  "vmxvre_instance": "0",
+                  "vmxvpfe_sriov43_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvre_flavor_name": "ns.c1r16d32.v5",
+                  "vmxvpfe_volume_size_0": "40.0",
+                  "vmxvpfe_sriov43_0_port_vlanfilter": "4001",
+                  "nf_naming": "{ecomp_generated_naming=false}",
+                  "nf_naming_code": "Navneet",
+                  "vmxvre_name_0": "vREXI",
+                  "vmxvpfe_sriov42_0_port_vlanstrip": "false",
+                  "vmxvpfe_volume_name_0": "vPFEXI_FBVolume",
+                  "max_instances": "3",
+                  "vmx_RSG_id": "bd89a33c-13c3-4a04-8fde-1a57eb123141",
+                  "vmxvpfe_image_name_0": "VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2",
+                  "vmxvpfe_sriov43_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_sriov44_0_port_unknownmulticastallow": "true",
+                  "vmxvre_console": "vidconsole",
+                  "vmxvpfe_sriov44_0_port_vlanfilter": "4001",
+                  "vmxvpfe_sriov42_0_port_mac": "00:11:22:EF:AC:DF",
+                  "vmxvpfe_volume_id_0": "47cede15-da2f-4397-a101-aa683220aff3",
+                  "vmxvpfe_sriov42_0_port_unknownmulticastallow": "true",
+                  "min_instances": "1",
+                  "vmxvpfe_sriov44_0_port_vlanstrip": "false",
+                  "vf_module_id": "123",
+                  "nf_function": "JAI",
+                  "vmxvpfe_sriov43_0_port_unknownmulticastallow": "true",
+                  "vmxvre_int_ctl_ip_0": "10.0.0.10",
+                  "ecomp_generated_naming": "false",
+                  "AIC_CLLI": "get_input:2017488_adiodvpe0_AIC_CLLI",
+                  "vnf_name": "mtnj309me6vre",
+                  "vmxvpfe_sriov41_0_port_unknownunicastallow": "true",
+                  "vmxvre_volume_type_1": "HITACHI",
+                  "vmxvpfe_sriov44_0_port_broadcastallow": "true",
+                  "vmxvre_volume_type_0": "HITACHI",
+                  "vmxvpfe_volume_type_0": "HITACHI",
+                  "vmxvpfe_sriov43_0_port_broadcastallow": "true",
+                  "bandwidth_units": "get_input:adiodvpe0_bandwidth_units",
+                  "vnf_id": "123",
+                  "vmxvre_oam_prefix": "24",
+                  "availability_zone_0": "mtpocfo-kvm-az01",
+                  "ASN": "get_input:2017488_adiodvpe0_ASN",
+                  "vmxvre_chassis_i2cid": "161",
+                  "vmxvpfe_name_0": "vPFEXI",
+                  "bandwidth": "get_input:adiodvpe0_bandwidth",
+                  "availability_zone_max_count": "1",
+                  "vmxvre_volume_size_0": "45.0",
+                  "vmxvre_volume_size_1": "50.0",
+                  "vmxvpfe_sriov42_0_port_broadcastallow": "true",
+                  "vmxvre_oam_gateway": "10.0.0.10",
+                  "vmxvre_volume_name_1": "vREXI_FAVolume",
+                  "vmxvre_ore_present": "0",
+                  "vmxvre_volume_name_0": "vREXI_FBVolume",
+                  "vmxvre_type": "0",
+                  "vnf_instance_name": "get_input:2017488_adiodvpe0_vnf_instance_name",
+                  "vmxvpfe_sriov41_0_port_unknownmulticastallow": "true",
+                  "oam_net_id": "b95eeb1d-d55d-4827-abb4-8ebb94941429",
+                  "vmx_int_ctl_len": "24",
+                  "vmxvpfe_sriov43_0_port_vlanstrip": "false",
+                  "vmxvpfe_sriov41_0_port_broadcastallow": "true",
+                  "vmxvre_volume_id_1": "6e86797e-03cd-4fdc-ba72-2957119c746d",
+                  "vmxvpfe_sriov41_0_port_vlanfilter": "4001",
+                  "nf_role": "Testing",
+                  "vmxvre_volume_id_0": "f4eacb79-f687-4e9d-b760-21847c8bb15a",
+                  "vmxvpfe_sriov42_0_port_unknownunicastallow": "true",
+                  "vmxvpfe_flavor_name": "ns.c20r16d25.v5"
+                },
+                "type": "VnfGroup",
+                "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    },
+                    "volumeGroupAllowed": true
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                    "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                    "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                    "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "version": "5",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "properties": {
+                      "minCountInstances": 1,
+                      "maxCountInstances": 1,
+                      "initialCount": 1,
+                      "vfModuleLabel": "ADIOD_base_vPE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": false
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {},
+                    "volumeGroupAllowed": true
+                  }
+                },
+                "volumeGroups": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vRE_BV"
+                    },
+                    "inputs": {
+                      "adiodvpe0_bandwidth": {
+                        "type": "string",
+                        "description": "Requested VPE bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "10"
+                      },
+                      "2017488_adiodvpe0_vnf_instance_name": {
+                        "type": "string",
+                        "description": "The hostname assigned to the vpe.",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_instance_name"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "mtnj309me6"
+                      },
+                      "2017488_adiodvpe0_vnf_config_template_version": {
+                        "type": "string",
+                        "description": "VPE Software Version",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "vnf_config_template_version"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "17.2"
+                      },
+                      "2017488_adiodvpe0_AIC_CLLI": {
+                        "type": "string",
+                        "description": "AIC Site CLLI",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "AIC_CLLI"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "ATLMY8GA"
+                      },
+                      "adiodvpe0_bandwidth_units": {
+                        "type": "string",
+                        "description": "Units of bandwidth",
+                        "entry_schema": null,
+                        "inputProperties": {
+                          "sourceType": "HEAT",
+                          "vfModuleLabel": "ADIOD_vRE_BV",
+                          "paramName": "bandwidth_units"
+                        },
+                        "constraints": null,
+                        "required": true,
+                        "default": "Gbps"
+                      }
+                    }
+                  },
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                    "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                    "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                    "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                    "description": null,
+                    "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "version": "6",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                    "properties": {
+                      "minCountInstances": 0,
+                      "maxCountInstances": null,
+                      "initialCount": 0,
+                      "vfModuleLabel": "ADIOD_vPFE_BV"
+                    },
+                    "inputs": {}
+                  }
+                },
+                "vfcInstanceGroups": {}
+              }
+            },
+            "networks": {
+              "ExtVL 0": {
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                "invariantUuid": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                "description": "ECOMP generic virtual link (network) base type for all other service-level and global networks",
+                "name": "ExtVL",
+                "version": "37.0",
+                "customizationUuid": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                "inputs": {
+                  "vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "Gbps"
+                  },
+                  "bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "10"
+                  },
+                  "AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "ASN": {
+                    "type": "string",
+                    "description": "AV/PE",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "AV_vPE"
+                  },
+                  "vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": null,
+                    "constraints": [],
+                    "required": true,
+                    "default": "mtnj309me6"
+                  }
+                },
+                "commands": {},
+                "properties": {
+                  "network_role": "network role 1, network role 2",
+                  "min_instances": 1,
+                  "max_instances": 10,
+                  "network_assignments": "{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}",
+                  "exVL_naming": "{ecomp_generated_naming=true}",
+                  "network_flows": "{is_network_policy=false, is_bound_to_vpn=false}",
+                  "network_homing": "{ecomp_selected_instance_node_target=false}"
+                },
+                "type": "VL",
+                "modelCustomizationName": "ExtVL 0"
+              }
+            },
+            "collectionResource": {},
+            "configurations": {},
+            "fabricConfigurations": {},
+            "serviceProxies": {},
+            "vfModules": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "AIC_CLLI"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                },
+                "volumeGroupAllowed": true
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                "invariantUuid": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                "customizationUuid": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "version": "5",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                "properties": {
+                  "minCountInstances": 1,
+                  "maxCountInstances": 1,
+                  "initialCount": 1,
+                  "vfModuleLabel": "ADIOD_base_vPE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": false
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {},
+                "volumeGroupAllowed": true
+              }
+            },
+            "volumeGroups": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                "invariantUuid": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                "customizationUuid": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vRE_BV"
+                },
+                "inputs": {
+                  "adiodvpe0_bandwidth": {
+                    "type": "string",
+                    "description": "Requested VPE bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "10"
+                  },
+                  "2017488_adiodvpe0_vnf_instance_name": {
+                    "type": "string",
+                    "description": "The hostname assigned to the vpe.",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_instance_name"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "mtnj309me6"
+                  },
+                  "2017488_adiodvpe0_vnf_config_template_version": {
+                    "type": "string",
+                    "description": "VPE Software Version",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "vnf_config_template_version"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "17.2"
+                  },
+                  "2017488_adiodvpe0_AIC_CLLI": {
+                    "type": "string",
+                    "description": "AIC Site CLLI",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "AIC_CLLI"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "ATLMY8GA"
+                  },
+                  "adiodvpe0_bandwidth_units": {
+                    "type": "string",
+                    "description": "Units of bandwidth",
+                    "entry_schema": null,
+                    "inputProperties": {
+                      "sourceType": "HEAT",
+                      "vfModuleLabel": "ADIOD_vRE_BV",
+                      "paramName": "bandwidth_units"
+                    },
+                    "constraints": null,
+                    "required": true,
+                    "default": "Gbps"
+                  }
+                }
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vPFE_BV..module-2": {
+                "uuid": "0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a",
+                "invariantUuid": "eff8cc59-53a1-4101-aed7-8cf24ecf8339",
+                "customizationUuid": "3cd946bb-50e0-40d8-96d3-c9023520b557",
+                "description": null,
+                "name": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "version": "6",
+                "modelCustomizationName": "2017488AdiodVpe..ADIOD_vPFE_BV..module-2",
+                "properties": {
+                  "minCountInstances": 0,
+                  "maxCountInstances": null,
+                  "initialCount": 0,
+                  "vfModuleLabel": "ADIOD_vPFE_BV"
+                },
+                "inputs": {}
+              }
+            },
+            "pnfs": {}
+          }
+        },
+        "serviceInstance": {
+          "6e59c5de-f052-46fa-aa7e-2fca9d674c44": {
+            "vnfGroups": {
+              "VF_vMee 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "vf_vmee0..VfVmee..base_vmme..module-0": {
+                    "vf_vmee0..VfVmee..base_vmme..module-0vmvzo": {
+                      "isMissingData": false,
+                      "sdncPreReload": null,
+                      "modelInfo": {
+                        "modelType": "VFmodule",
+                        "modelInvariantId": "a6f9e51a-2b35-416a-ae15-15e58d61f36d",
+                        "modelVersionId": "a27f5cfc-7f12-4f99-af08-0af9c3885c87",
+                        "modelName": "VfVmee..base_vmme..module-0",
+                        "modelVersion": "2",
+                        "modelCustomizationId": "f8c040f1-7e51-4a11-aca8-acf256cfd861",
+                        "modelCustomizationName": "VfVmee..base_vmme..module-0"
+                      },
+                      "instanceParams": [
+                        {}
+                      ],
+                      "trackById": "wmtm6sy2uj"
+                    }
+                  }
+                },
+                "isMissingData": true,
+                "originalName": "VF_vMee 0",
+                "vnfGroupStoreKey": "VF_vMee 0",
+                "trackById": "p3wk448m5do",
+                "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+                "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+                "lcpCloudRegionId": null,
+                "tenantId": null,
+                "lineOfBusiness": null,
+                "platformName": null,
+                "modelInfo": {
+                  "modelType": "VnfGroup",
+                  "modelInvariantId": "4160458e-f648-4b30-a176-43881ffffe9e",
+                  "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+                  "modelName": "VF_vMee",
+                  "modelVersion": "2.0",
+                  "modelCustomizationName": "VF_vMee 0"
+                }
+              }
+            },
+            "networks": {},
+            "instanceParams": [
+              {}
+            ],
+            "validationCounter": 1,
+            "existingNames": {},
+            "existingVNFCounterMap": {
+              "d6557200-ecf2-4641-8094-5393ae3aae60": 1
+            },
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "lcpCloudRegionId": "hvf6",
+            "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+            "aicZoneId": "JAG1",
+            "projectName": "x1",
+            "rollbackOnFailure": "true",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+              "modelName": "ComplexService",
+              "modelVersion": "1.0",
+              "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44"
+            },
+            "isALaCarte": false,
+            "name": "ComplexService",
+            "version": "1.0",
+            "description": "ComplexService",
+            "category": "Emanuel",
+            "uuid": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isEcompGeneratedNaming": false,
+            "isMultiStepDesign": false
+          },
+          "6b528779-44a3-4472-bdff-9cd15ec93450": {
+            "networks": {
+              "ExtVL 0": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "sf3zth68xjf",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [
+                  {}
+                ],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0:0001": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0",
+                "trackById": "2mdxioxca9h",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [
+                  {}
+                ],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              },
+              "ExtVL 0_1": {
+                "rollbackOnFailure": "true",
+                "isMissingData": false,
+                "originalName": "ExtVL 0",
+                "networkStoreKey": "ExtVL 0_1",
+                "trackById": "z7vd1gmpbs",
+                "instanceName": "ExtVL",
+                "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "platformName": "xxx1",
+                "lineOfBusiness": "zzz1",
+                "instanceParams": [
+                  {
+                    "vnf_config_template_version": "17.2",
+                    "bandwidth_units": "Gbps",
+                    "bandwidth": "10",
+                    "AIC_CLLI": "ATLMY8GA",
+                    "ASN": "AV_vPE",
+                    "vnf_instance_name": "yoav"
+                  }
+                ],
+                "modelInfo": {
+                  "modelInvariantId": "379f816b-a7aa-422f-be30-17114ff50b7c",
+                  "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+                  "modelName": "ExtVL",
+                  "modelVersion": "37.0",
+                  "modelCustomizationId": "94fdd893-4a36-4d70-b16a-ec29c54c184f",
+                  "modelCustomizationName": "ExtVL 0",
+                  "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+                },
+                "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986"
+              }
+            },
+            "vnfGroups": {
+              "2017-488_ADIOD-vPE 0": {
+                "rollbackOnFailure": "true",
+                "vfModules": {
+                  "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                    "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1sgoqi": {
+                      "instanceName": "yoav",
+                      "volumeGroupName": "123",
+                      "modelInfo": {
+                        "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                        "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                        "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "modelVersion": "6",
+                        "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                        "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                        "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                      },
+                      "uuid": "25284168-24bb-4698-8cb4-3f509146eca5",
+                      "isMissingData": false,
+                      "instanceParams": [
+                        {
+                          "adiodvpe0_bandwidth": "10",
+                          "2017488_adiodvpe0_vnf_instance_name": "mtnj309me6",
+                          "2017488_adiodvpe0_vnf_config_template_version": "17.2",
+                          "2017488_adiodvpe0_AIC_CLLI": "ATLMY8GA",
+                          "adiodvpe0_bandwidth_units": "Gbps"
+                        }
+                      ]
+                    }
+                  }
+                },
+                "isMissingData": false,
+                "originalName": "2017-488_ADIOD-vPE 0",
+                "vnfGroupStoreKey": "2017-488_ADIOD-vPE 0",
+                "trackById": "o65b26t2thj",
+                "instanceName": "2017488_ADIODvPE",
+                "productFamilyId": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+                "lcpCloudRegionId": "hvf6",
+                "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "platformName": "platform",
+                "lineOfBusiness": "ONAP",
+                "instanceParams": [
+                  {}
+                ],
+                "modelInfo": {
+                  "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+                  "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+                  "modelName": "2017-488_ADIOD-vPE",
+                  "modelVersion": "5.0",
+                  "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+                  "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+                  "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+                },
+                "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+              }
+            },
+            "instanceParams": [
+              {
+                "2017488_adiodvpe0_ASN": "AV_vPE"
+              }
+            ],
+            "validationCounter": 0,
+            "existingNames": {
+              "123": "",
+              "instancename": "",
+              "yoav": "",
+              "extvl": ""
+            },
+            "existingVnfGroupCounterMap": {
+              "69e09f68-8b63-4cc9-b9ff-860960b5db09": 1
+            },
+            "existingNetworksCounterMap": {
+              "ddc3f20c-08b5-40fd-af72-c6d14636b986": 3
+            },
+            "instanceName": "InstanceName",
+            "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "subscriptionServiceType": "TYLER SILVIA",
+            "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+            "productFamilyId": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "aicZoneId": "JAG1",
+            "projectName": null,
+            "rollbackOnFailure": "true",
+            "aicZoneName": "YUDFJULP-JAG1",
+            "owningEntityName": "WayneHolland",
+            "testApi": "GR_API",
+            "isEcompGeneratedNaming": true,
+            "tenantName": "USP-SIP-IC-24335-T-01",
+            "bulkSize": 1,
+            "modelInfo": {
+              "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+              "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+              "modelName": "action-data",
+              "modelVersion": "1.0",
+              "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+            },
+            "isALaCarte": false,
+            "name": "action-data",
+            "version": "1.0",
+            "description": "",
+            "category": "",
+            "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+            "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "serviceType": "",
+            "serviceRole": "",
+            "isMultiStepDesign": false
+          }
+        },
+        "lcpRegionsAndTenants": {
+          "lcpRegionList": [
+            {
+              "id": "JANET25",
+              "name": "JANET25",
+              "isPermitted": true
+            },
+            {
+              "id": "hvf6",
+              "name": "hvf6",
+              "isPermitted": true
+            }
+          ],
+          "lcpRegionsTenantsMap": {
+            "JANET25": [
+              {
+                "id": "092eb9e8e4b7412e8787dd091bc58e86",
+                "name": "USP-SIP-IC-24335-T-01",
+                "isPermitted": true
+              }
+            ],
+            "hvf6": [
+              {
+                "id": "bae71557c5bb4d5aac6743a4e5f1d054",
+                "name": "AIN Web Tool-15-D-testalexandria",
+                "isPermitted": true
+              },
+              {
+                "id": "229bcdc6eaeb4ca59d55221141d01f8e",
+                "name": "AIN Web Tool-15-D-STTest2",
+                "isPermitted": true
+              },
+              {
+                "id": "1178612d2b394be4834ad77f567c0af2",
+                "name": "AIN Web Tool-15-D-SSPtestcustome",
+                "isPermitted": true
+              },
+              {
+                "id": "19c5ade915eb461e8af52fb2fd8cd1f2",
+                "name": "AIN Web Tool-15-D-UncheckedEcopm",
+                "isPermitted": true
+              },
+              {
+                "id": "de007636e25249238447264a988a927b",
+                "name": "AIN Web Tool-15-D-dfsdf",
+                "isPermitted": true
+              },
+              {
+                "id": "62f29b3613634ca6a3065cbe0e020c44",
+                "name": "AIN/SMS-16-D-Multiservices1",
+                "isPermitted": true
+              },
+              {
+                "id": "649289e30d3244e0b48098114d63c2aa",
+                "name": "AIN Web Tool-15-D-SSPST66",
+                "isPermitted": true
+              },
+              {
+                "id": "3f21eeea6c2c486bba31dab816c05a32",
+                "name": "AIN Web Tool-15-D-ASSPST47",
+                "isPermitted": true
+              },
+              {
+                "id": "f60ce21d3ee6427586cff0d22b03b773",
+                "name": "CESAR-100-D-sspjg67246",
+                "isPermitted": true
+              },
+              {
+                "id": "8774659e425f479895ae091bb5d46560",
+                "name": "CESAR-100-D-sspjg68359",
+                "isPermitted": true
+              },
+              {
+                "id": "624eb554b0d147c19ff8885341760481",
+                "name": "AINWebTool-15-D-iftach",
+                "isPermitted": true
+              },
+              {
+                "id": "214f55f5fc414c678059c383b03e4962",
+                "name": "CESAR-100-D-sspjg612401",
+                "isPermitted": true
+              },
+              {
+                "id": "c90666c291664841bb98e4d981ff1db5",
+                "name": "CESAR-100-D-sspjg621340",
+                "isPermitted": true
+              },
+              {
+                "id": "ce5b6bc5c7b348e1bf4b91ac9a174278",
+                "name": "sspjg621351cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "b386b768a3f24c8e953abbe0b3488c02",
+                "name": "AINWebTool-15-D-eteancomp",
+                "isPermitted": true
+              },
+              {
+                "id": "dc6c4dbfd225474e9deaadd34968646c",
+                "name": "AINWebTool-15-T-SPFET",
+                "isPermitted": true
+              },
+              {
+                "id": "02cb5030e9914aa4be120bd9ed1e19eb",
+                "name": "AINWebTool-15-X-eeweww",
+                "isPermitted": true
+              },
+              {
+                "id": "f2f3830e4c984d45bcd00e1a04158a79",
+                "name": "CESAR-100-D-spjg61909",
+                "isPermitted": true
+              },
+              {
+                "id": "05b91bd5137f4929878edd965755c06d",
+                "name": "CESAR-100-D-sspjg621512cloned",
+                "isPermitted": true
+              },
+              {
+                "id": "7002fbe8482d4a989ddf445b1ce336e0",
+                "name": "AINWebTool-15-X-vdr",
+                "isPermitted": true
+              },
+              {
+                "id": "4008522be43741dcb1f5422022a2aa0b",
+                "name": "AINWebTool-15-D-ssasa",
+                "isPermitted": true
+              },
+              {
+                "id": "f44e2e96a1b6476abfda2fa407b00169",
+                "name": "AINWebTool-15-D-PFNPT",
+                "isPermitted": true
+              },
+              {
+                "id": "b69a52bec8a84669a37a1e8b72708be7",
+                "name": "AINWebTool-15-X-vdre",
+                "isPermitted": true
+              },
+              {
+                "id": "fac7d9fd56154caeb9332202dcf2969f",
+                "name": "AINWebTool-15-X-NONPODECOMP",
+                "isPermitted": true
+              },
+              {
+                "id": "2d34d8396e194eb49969fd61ffbff961",
+                "name": "DN5242-Nov16-T5",
+                "isPermitted": true
+              },
+              {
+                "id": "cb42a77ff45b48a8b8deb83bb64acc74",
+                "name": "ro-T11",
+                "isPermitted": true
+              },
+              {
+                "id": "fa45ca53c80b492fa8be5477cd84fc2b",
+                "name": "ro-T112",
+                "isPermitted": true
+              },
+              {
+                "id": "4914ab0ab3a743e58f0eefdacc1dde77",
+                "name": "DN5242-Nov21-T1",
+                "isPermitted": true
+              },
+              {
+                "id": "d0a3e3f2964542259d155a81c41aadc3",
+                "name": "test-hvf6-09",
+                "isPermitted": true
+              },
+              {
+                "id": "cbb99fe4ada84631b7baf046b6fd2044",
+                "name": "DN5242-Nov16-T3",
+                "isPermitted": true
+              }
+            ]
+          }
+        },
+        "productFamilies": [
+          {
+            "id": "ebc3bc3d-62fd-4a3f-a037-f619df4ff034",
+            "name": "SCOTTIE",
+            "isPermitted": true
+          },
+          {
+            "id": "17cc1042-527b-11e6-beb8-9e71128cae77",
+            "name": "IGNACIO",
+            "isPermitted": true
+          },
+          {
+            "id": "36b4733a-53f4-4cc8-8ff0-9172e5fc4b8e",
+            "name": "Christie",
+            "isPermitted": true
+          },
+          {
+            "id": "a4f6f2ae-9bf5-4ed7-b904-06b2099c4bd7",
+            "name": "Enhanced Services",
+            "isPermitted": true
+          },
+          {
+            "id": "vTerrance",
+            "name": "vTerrance",
+            "isPermitted": true
+          },
+          {
+            "id": "323d69d9-2efe-4r45-ay0a-89ea7ard4e6f",
+            "name": "vSCP",
+            "isPermitted": true
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": true
+          },
+          {
+            "id": "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+            "name": "BVOIP",
+            "isPermitted": true
+          },
+          {
+            "id": "db171b8f-115c-4992-a2e3-ee04cae357e0",
+            "name": "LINDSEY",
+            "isPermitted": true
+          },
+          {
+            "id": "LRSI-OSPF",
+            "name": "LRSI-OSPF",
+            "isPermitted": true
+          },
+          {
+            "id": "vRosemarie",
+            "name": "HNGATEWAY",
+            "isPermitted": true
+          },
+          {
+            "id": "vHNPaas",
+            "name": "WILKINS",
+            "isPermitted": true
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "TYLER SILVIA",
+            "isPermitted": true
+          },
+          {
+            "id": "b6a3f28c-eebf-494c-a900-055cc7c874ce",
+            "name": "VROUTER",
+            "isPermitted": true
+          },
+          {
+            "id": "Cisneros",
+            "name": "vMuriel",
+            "isPermitted": true
+          },
+          {
+            "id": "0ee8c1bc-7cbd-4b0a-a1ac-e9999255abc1",
+            "name": "CARA Griffin",
+            "isPermitted": true
+          },
+          {
+            "id": "c7611ebe-c324-48f1-8085-94aef0c6ef3d",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          },
+          {
+            "id": "e30755dc-5673-4b6b-9dcf-9abdd96b93d1",
+            "name": "Transport",
+            "isPermitted": true
+          },
+          {
+            "id": "vSalvatore",
+            "name": "vSalvatore",
+            "isPermitted": true
+          },
+          {
+            "id": "d7bb0a21-66f2-4e6d-87d9-9ef3ced63ae4",
+            "name": "Josefina",
+            "isPermitted": true
+          },
+          {
+            "id": "vHubbard",
+            "name": "vHubbard",
+            "isPermitted": true
+          },
+          {
+            "id": "12a96a9d-4b4c-4349-a950-fe1159602621",
+            "name": "DARREN MCGEE",
+            "isPermitted": true
+          }
+        ],
+        "serviceTypes": {
+          "e433710f-9217-458d-a79d-1c7aff376d89": [
+            {
+              "id": "0",
+              "name": "vRichardson",
+              "isPermitted": false
+            },
+            {
+              "id": "1",
+              "name": "TYLER SILVIA",
+              "isPermitted": true
+            },
+            {
+              "id": "2",
+              "name": "Emanuel",
+              "isPermitted": false
+            },
+            {
+              "id": "3",
+              "name": "vJamie",
+              "isPermitted": false
+            },
+            {
+              "id": "4",
+              "name": "vVoiceMail",
+              "isPermitted": false
+            },
+            {
+              "id": "5",
+              "name": "Kennedy",
+              "isPermitted": false
+            },
+            {
+              "id": "6",
+              "name": "vSEGW",
+              "isPermitted": false
+            },
+            {
+              "id": "7",
+              "name": "vVM",
+              "isPermitted": false
+            },
+            {
+              "id": "8",
+              "name": "vOTA",
+              "isPermitted": false
+            },
+            {
+              "id": "9",
+              "name": "vMME",
+              "isPermitted": false
+            },
+            {
+              "id": "10",
+              "name": "vMNS",
+              "isPermitted": false
+            },
+            {
+              "id": "11",
+              "name": "vSCP",
+              "isPermitted": false
+            },
+            {
+              "id": "12",
+              "name": "VPMS",
+              "isPermitted": false
+            },
+            {
+              "id": "13",
+              "name": "vMMSC",
+              "isPermitted": false
+            },
+            {
+              "id": "14",
+              "name": "SSD",
+              "isPermitted": false
+            },
+            {
+              "id": "15",
+              "name": "vMOG",
+              "isPermitted": false
+            },
+            {
+              "id": "16",
+              "name": "LINDSEY",
+              "isPermitted": false
+            },
+            {
+              "id": "17",
+              "name": "JOHANNA_SANTOS",
+              "isPermitted": false
+            },
+            {
+              "id": "18",
+              "name": "vCarroll",
+              "isPermitted": false
+            }
+          ]
+        },
+        "aicZones": [
+          {
+            "id": "NFT1",
+            "name": "NFTJSSSS-NFT1"
+          },
+          {
+            "id": "JAG1",
+            "name": "YUDFJULP-JAG1"
+          },
+          {
+            "id": "YYY1",
+            "name": "UUUAIAAI-YYY1"
+          },
+          {
+            "id": "BAN1",
+            "name": "VSDKYUTP-BAN1"
+          },
+          {
+            "id": "DKJ1",
+            "name": "DKJSJDKA-DKJ1"
+          },
+          {
+            "id": "MCS1",
+            "name": "ASACMAMS-MCS1"
+          },
+          {
+            "id": "UIO1",
+            "name": "uioclli1-UIO1"
+          },
+          {
+            "id": "RAJ1",
+            "name": "YGBIJNLQ-RAJ1"
+          },
+          {
+            "id": "OPA1",
+            "name": "opaclli1-OPA1"
+          },
+          {
+            "id": "SDE1",
+            "name": "ZXCVBNMA-SDE1"
+          },
+          {
+            "id": "VEN2",
+            "name": "FGHJUHIL-VEN2"
+          },
+          {
+            "id": "ORL1",
+            "name": "ORLDFLMA-ORL1"
+          },
+          {
+            "id": "JAD1",
+            "name": "JADECLLI-JAD1"
+          },
+          {
+            "id": "ZXL1",
+            "name": "LWLWCANN-ZXL1"
+          },
+          {
+            "id": "CKL1",
+            "name": "CLKSKCKK-CKL1"
+          },
+          {
+            "id": "SDF1",
+            "name": "sdfclli1-SDF1"
+          },
+          {
+            "id": "RAD1",
+            "name": "RADICAL1-RAD1"
+          },
+          {
+            "id": "KIT1",
+            "name": "BHYJFGLN-KIT1"
+          },
+          {
+            "id": "REL1",
+            "name": "INGERFGT-REL1"
+          },
+          {
+            "id": "JNL1",
+            "name": "CJALSDAC-JNL1"
+          },
+          {
+            "id": "OLK1",
+            "name": "OLKOLKLS-OLK1"
+          },
+          {
+            "id": "CHI1",
+            "name": "CHILLIWE-CHI1"
+          },
+          {
+            "id": "UUU4",
+            "name": "UUUAAAUU-UUU4"
+          },
+          {
+            "id": "TUF1",
+            "name": "TUFCLLI1-TUF1"
+          },
+          {
+            "id": "KJN1",
+            "name": "CKALDKSA-KJN1"
+          },
+          {
+            "id": "SAM1",
+            "name": "SNDGCA64-SAN1"
+          },
+          {
+            "id": "SCK1",
+            "name": "SCKSCKSK-SCK1"
+          },
+          {
+            "id": "HJH1",
+            "name": "AOEEQQQD-HJH1"
+          },
+          {
+            "id": "HGD1",
+            "name": "SDFQWHGD-HGD1"
+          },
+          {
+            "id": "KOR1",
+            "name": "HYFLNBVT-KOR1"
+          },
+          {
+            "id": "ATL43",
+            "name": "AICLOCID-ATL43"
+          },
+          {
+            "id": "ATL54",
+            "name": "AICFTAAI-ATL54"
+          },
+          {
+            "id": "ATL66",
+            "name": "CLLIAAII-ATL66"
+          },
+          {
+            "id": "VEL1",
+            "name": "BNMLKUIK-VEL1"
+          },
+          {
+            "id": "ICC1",
+            "name": "SANJITAT-ICC1"
+          },
+          {
+            "id": "MNT11",
+            "name": "WSXEFBTH-MNT11"
+          },
+          {
+            "id": "DEF2",
+            "name": "WSBHGTYL-DEF2"
+          },
+          {
+            "id": "MAD11",
+            "name": "SDFQWGKL-MAD11"
+          },
+          {
+            "id": "OLG1",
+            "name": "OLHOLHOL-OLG1"
+          },
+          {
+            "id": "GAR1",
+            "name": "NGFVSJKO-GAR1"
+          },
+          {
+            "id": "SAN22",
+            "name": "GNVLSCTL-SAN22"
+          },
+          {
+            "id": "HRG1",
+            "name": "HRGHRGGS-HRG1"
+          },
+          {
+            "id": "JCS1",
+            "name": "JCSJSCJS-JCS1"
+          },
+          {
+            "id": "DHA12",
+            "name": "WSXEDECF-DHA12"
+          },
+          {
+            "id": "HJE1",
+            "name": "AOEEWWWD-HJE1"
+          },
+          {
+            "id": "NCA1",
+            "name": "NCANCANN-NCA1"
+          },
+          {
+            "id": "IOP1",
+            "name": "iopclli1-IOP1"
+          },
+          {
+            "id": "RTY1",
+            "name": "rtyclli1-RTY1"
+          },
+          {
+            "id": "KAP1",
+            "name": "HIOUYTRQ-KAP1"
+          },
+          {
+            "id": "ZEN1",
+            "name": "ZENCLLI1-ZEN1"
+          },
+          {
+            "id": "HKA1",
+            "name": "JAKHLASS-HKA1"
+          },
+          {
+            "id": "CQK1",
+            "name": "CQKSCAKK-CQK1"
+          },
+          {
+            "id": "SAI1",
+            "name": "UBEKQLPD-SAI1"
+          },
+          {
+            "id": "ERT1",
+            "name": "ertclli1-ERT1"
+          },
+          {
+            "id": "IBB1",
+            "name": "PLMKOIJU-IBB1"
+          },
+          {
+            "id": "TIR2",
+            "name": "PLKINHYI-TIR2"
+          },
+          {
+            "id": "HSD1",
+            "name": "CHASKCDS-HSD1"
+          },
+          {
+            "id": "SLF78",
+            "name": "SDCTLFN1-SLF78"
+          },
+          {
+            "id": "SEE78",
+            "name": "SDCTEEE4-SEE78"
+          },
+          {
+            "id": "SAN13",
+            "name": "TOKYJPFA-SAN13"
+          },
+          {
+            "id": "SAA78",
+            "name": "SDCTAAA1-SAA78"
+          },
+          {
+            "id": "LUC1",
+            "name": "ATLDFGYC-LUC1"
+          },
+          {
+            "id": "AMD13",
+            "name": "MEMATLAN-AMD13"
+          },
+          {
+            "id": "TOR1",
+            "name": "TOROONXN-TOR1"
+          },
+          {
+            "id": "QWE1",
+            "name": "QWECLLI1-QWE1"
+          },
+          {
+            "id": "ZOG1",
+            "name": "ZOGASTRO-ZOG1"
+          },
+          {
+            "id": "CAL33",
+            "name": "CALIFORN-CAL33"
+          },
+          {
+            "id": "SHH78",
+            "name": "SDIT1HHH-SHH78"
+          },
+          {
+            "id": "DSA1",
+            "name": "LKJHGFDS-DSA1"
+          },
+          {
+            "id": "CLG1",
+            "name": "CLGRABAD-CLG1"
+          },
+          {
+            "id": "BNA1",
+            "name": "BNARAGBK-BNA1"
+          },
+          {
+            "id": "ATL84",
+            "name": "CANTTCOC-ATL84"
+          },
+          {
+            "id": "APP1",
+            "name": "WBHGTYUI-APP1"
+          },
+          {
+            "id": "RJN1",
+            "name": "RJNRBZAW-RJN1"
+          },
+          {
+            "id": "EHH78",
+            "name": "SDCSHHH5-EHH78"
+          },
+          {
+            "id": "mac10",
+            "name": "PKGTESTF-mac10"
+          },
+          {
+            "id": "SXB78",
+            "name": "SDCTGXB1-SXB78"
+          },
+          {
+            "id": "SAX78",
+            "name": "SDCTAXG1-SAX78"
+          },
+          {
+            "id": "SYD1",
+            "name": "SYDNAUBV-SYD1"
+          },
+          {
+            "id": "TOK1",
+            "name": "TOKYJPFA-TOK1"
+          },
+          {
+            "id": "KGM2",
+            "name": "KGMTNC20-KGM2"
+          },
+          {
+            "id": "DCC1b",
+            "name": "POIUYTGH-DCC1b"
+          },
+          {
+            "id": "SKK78",
+            "name": "SDCTKKK1-SKK78"
+          },
+          {
+            "id": "SGG78",
+            "name": "SDCTGGG1-SGG78"
+          },
+          {
+            "id": "SJJ78",
+            "name": "SDCTJJJ1-SJJ78"
+          },
+          {
+            "id": "SBX78",
+            "name": "SDCTBXG1-SBX78"
+          },
+          {
+            "id": "LAG1",
+            "name": "LARGIZON-LAG1"
+          },
+          {
+            "id": "IAA1",
+            "name": "QAZXSWED-IAA1"
+          },
+          {
+            "id": "POI1",
+            "name": "PLMNJKIU-POI1"
+          },
+          {
+            "id": "LAG1a",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "PBL1",
+            "name": "PBLAPBAI-PBL1"
+          },
+          {
+            "id": "LAG45",
+            "name": "LARGIZON-LAG1a"
+          },
+          {
+            "id": "MAR1",
+            "name": "MNBVCXZM-MAR1"
+          },
+          {
+            "id": "HST70",
+            "name": "HSTNTX70-HST70"
+          },
+          {
+            "id": "DCC1a",
+            "name": "POIUYTGH-DCC1a"
+          },
+          {
+            "id": "TOL1",
+            "name": "TOLDOH21-TOL1"
+          },
+          {
+            "id": "LON1",
+            "name": "LONEENCO-LON1"
+          },
+          {
+            "id": "SJU78",
+            "name": "SDIT1JUB-SJU78"
+          },
+          {
+            "id": "STN27",
+            "name": "HSTNTX01-STN27"
+          },
+          {
+            "id": "SSW56",
+            "name": "ss8126GT-SSW56"
+          },
+          {
+            "id": "SBB78",
+            "name": "SDIT1BBB-SBB78"
+          },
+          {
+            "id": "DCC3",
+            "name": "POIUYTGH-DCC3"
+          },
+          {
+            "id": "GNV1",
+            "name": "GNVLSCTL-GNV1"
+          },
+          {
+            "id": "WAS1",
+            "name": "WASHDCSW-WAS1"
+          },
+          {
+            "id": "TOY1",
+            "name": "TORYONNZ-TOY1"
+          },
+          {
+            "id": "STT1",
+            "name": "STTLWA02-STT1"
+          },
+          {
+            "id": "STG1",
+            "name": "STTGGE62-STG1"
+          },
+          {
+            "id": "SLL78",
+            "name": "SDCTLLL1-SLL78"
+          },
+          {
+            "id": "SBU78",
+            "name": "SDIT1BUB-SBU78"
+          },
+          {
+            "id": "ATL2",
+            "name": "ATLNGANW-ATL2"
+          },
+          {
+            "id": "BOT1",
+            "name": "BOTHWAKY-BOT1"
+          },
+          {
+            "id": "SNG1",
+            "name": "SNGPSIAU-SNG1"
+          },
+          {
+            "id": "NYC1",
+            "name": "NYCMNY54-NYC1"
+          },
+          {
+            "id": "LAG1b",
+            "name": "LARGIZON-LAG1b"
+          },
+          {
+            "id": "AMD15",
+            "name": "AMDFAA01-AMD15"
+          },
+          {
+            "id": "SNA1",
+            "name": "SNANTXCA-SNA1"
+          },
+          {
+            "id": "PLT1",
+            "name": "PLTNCA60-PLT1"
+          },
+          {
+            "id": "TLP1",
+            "name": "TLPNXM18-TLP1"
+          },
+          {
+            "id": "SDD81",
+            "name": "SAIT1DD6-SDD81"
+          },
+          {
+            "id": "DCC1",
+            "name": "POIUYTGH-DCC1"
+          },
+          {
+            "id": "DCC2",
+            "name": "POIUYTGH-DCC2"
+          },
+          {
+            "id": "OKC1",
+            "name": "OKCBOK55-OKC1"
+          },
+          {
+            "id": "PAR1",
+            "name": "PARSFRCG-PAR1"
+          },
+          {
+            "id": "TES36",
+            "name": "ABCEETES-TES36"
+          },
+          {
+            "id": "COM1",
+            "name": "PLMKOPIU-COM1"
+          },
+          {
+            "id": "ANI1",
+            "name": "ATLNGTRE-ANI1"
+          },
+          {
+            "id": "SDG78",
+            "name": "SDIT1BDG-SDG78"
+          },
+          {
+            "id": "mac20",
+            "name": "PKGTESTF-mac20"
+          },
+          {
+            "id": "DSF45",
+            "name": "DSFBG123-DSF45"
+          },
+          {
+            "id": "HST25",
+            "name": "HSTNTX01-HST25"
+          },
+          {
+            "id": "AMD18",
+            "name": "AUDIMA01-AMD18"
+          },
+          {
+            "id": "SAA80",
+            "name": "SAIT9AA3-SAA80"
+          },
+          {
+            "id": "SSA56",
+            "name": "SSIT2AA7-SSA56"
+          },
+          {
+            "id": "SDD82",
+            "name": "SAIT1DD9-SDD82"
+          },
+          {
+            "id": "JCV1",
+            "name": "JCVLFLBW-JCV1"
+          },
+          {
+            "id": "SUL2",
+            "name": "WERTYUJK-SUL2"
+          },
+          {
+            "id": "PUR1",
+            "name": "purelyde-PUR1"
+          },
+          {
+            "id": "FDE55",
+            "name": "FDERT555-FDE55"
+          },
+          {
+            "id": "SITE",
+            "name": "LONEENCO-SITE"
+          },
+          {
+            "id": "ATL1",
+            "name": "ATLNGAMA-ATL1"
+          },
+          {
+            "id": "JUL1",
+            "name": "ZXCVBNMM-JUL1"
+          },
+          {
+            "id": "TAT34",
+            "name": "TESAAISB-TAT34"
+          },
+          {
+            "id": "XCP12",
+            "name": "CHKGH123-XCP12"
+          },
+          {
+            "id": "RAI1",
+            "name": "poiuytre-RAI1"
+          },
+          {
+            "id": "HPO1",
+            "name": "ATLNGAUP-HPO1"
+          },
+          {
+            "id": "KJF12",
+            "name": "KJFDH123-KJF12"
+          },
+          {
+            "id": "SCC80",
+            "name": "SAIT9CC3-SCC80"
+          },
+          {
+            "id": "SAA12",
+            "name": "SAIT9AF8-SAA12"
+          },
+          {
+            "id": "SAA14",
+            "name": "SAIT1AA9-SAA14"
+          },
+          {
+            "id": "ATL35",
+            "name": "TTESSAAI-ATL35"
+          },
+          {
+            "id": "CWY1",
+            "name": "CWYMOWBS-CWY1"
+          },
+          {
+            "id": "ATL76",
+            "name": "TELEPAAI-ATL76"
+          },
+          {
+            "id": "DSL12",
+            "name": "DSLFK242-DSL12"
+          },
+          {
+            "id": "ATL53",
+            "name": "AAIATLTE-ATL53"
+          },
+          {
+            "id": "SAA11",
+            "name": "SAIT9AA2-SAA11"
+          },
+          {
+            "id": "ATL62",
+            "name": "TESSASCH-ATL62"
+          },
+          {
+            "id": "AUG1",
+            "name": "ASDFGHJK-AUG1"
+          },
+          {
+            "id": "POI22",
+            "name": "POIUY123-POI22"
+          },
+          {
+            "id": "SAA13",
+            "name": "SAIT1AA9-SAA13"
+          },
+          {
+            "id": "BHY17",
+            "name": "BHYTFRF3-BHY17"
+          },
+          {
+            "id": "LIS1",
+            "name": "HOSTPROF-LIS1"
+          },
+          {
+            "id": "SIP1",
+            "name": "ZXCVBNMK-SIP1"
+          },
+          {
+            "id": "ATL99",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "ATL64",
+            "name": "FORLOAAJ-ATL64"
+          },
+          {
+            "id": "TAT33",
+            "name": "TESAAISA-TAT33"
+          },
+          {
+            "id": "RAD10",
+            "name": "INDIPUNE-RAD10"
+          },
+          {
+            "id": "RTW5",
+            "name": "BHYTFRY4-RTW5"
+          },
+          {
+            "id": "JGS1",
+            "name": "KSJKKKKK-JGS1"
+          },
+          {
+            "id": "ATL98",
+            "name": "TEESTAAI-ATL43"
+          },
+          {
+            "id": "WAN1",
+            "name": "LEIWANGW-WAN1"
+          },
+          {
+            "id": "ATL44",
+            "name": "ATLSANAB-ATL44"
+          },
+          {
+            "id": "RTD2",
+            "name": "BHYTFRk4-RTD2"
+          },
+          {
+            "id": "NIR1",
+            "name": "ORFLMANA-NIR1"
+          },
+          {
+            "id": "ATL75",
+            "name": "SANAAIRE-ATL75"
+          },
+          {
+            "id": "NUM1",
+            "name": "QWERTYUI-NUM1"
+          },
+          {
+            "id": "MTN32",
+            "name": "MDTWNJ21-MTN32"
+          },
+          {
+            "id": "RTZ4",
+            "name": "BHYTFRZ6-RTZ4"
+          },
+          {
+            "id": "ATL56",
+            "name": "ATLSANAC-ATL56"
+          },
+          {
+            "id": "AMS1",
+            "name": "AMSTNLBW-AMS1"
+          },
+          {
+            "id": "RCT1",
+            "name": "AMSTERNL-RCT1"
+          },
+          {
+            "id": "JAN1",
+            "name": "ORFLMATT-JAN1"
+          },
+          {
+            "id": "ABC14",
+            "name": "TESAAISA-ABC14"
+          },
+          {
+            "id": "TAT37",
+            "name": "TESAAISD-TAT37"
+          },
+          {
+            "id": "MIC54",
+            "name": "MICHIGAN-MIC54"
+          },
+          {
+            "id": "ABC11",
+            "name": "ATLSANAI-ABC11"
+          },
+          {
+            "id": "AMF11",
+            "name": "AMDOCS01-AMF11"
+          },
+          {
+            "id": "ATL63",
+            "name": "ATLSANEW-ATL63"
+          },
+          {
+            "id": "ABC12",
+            "name": "ATLSECIA-ABC12"
+          },
+          {
+            "id": "MTN20",
+            "name": "MDTWNJ21-MTN20"
+          },
+          {
+            "id": "ABC15",
+            "name": "AAITESAN-ABC15"
+          },
+          {
+            "id": "AVT1",
+            "name": "AVTRFLHD-AVT1"
+          },
+          {
+            "id": "ATL34",
+            "name": "ATLSANAI-ATL34"
+          }
+        ],
+        "categoryParameters": {
+          "owningEntityList": [
+            {
+              "id": "aaa1",
+              "name": "aaa1"
+            },
+            {
+              "id": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+              "name": "WayneHolland"
+            },
+            {
+              "id": "Melissa",
+              "name": "Melissa"
+            }
+          ],
+          "projectList": [
+            {
+              "id": "WATKINS",
+              "name": "WATKINS"
+            },
+            {
+              "id": "x1",
+              "name": "x1"
+            },
+            {
+              "id": "yyy1",
+              "name": "yyy1"
+            }
+          ],
+          "lineOfBusinessList": [
+            {
+              "id": "ONAP",
+              "name": "ONAP"
+            },
+            {
+              "id": "zzz1",
+              "name": "zzz1"
+            }
+          ],
+          "platformList": [
+            {
+              "id": "platform",
+              "name": "platform"
+            },
+            {
+              "id": "xxx1",
+              "name": "xxx1"
+            }
+          ]
+        },
+        "type": "[LCP_REGIONS_AND_TENANTS] Update",
+        "subscribers": [
+          {
+            "id": "CAR_2020_ER",
+            "name": "CAR_2020_ER",
+            "isPermitted": true
+          },
+          {
+            "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+            "name": "JULIO ERICKSON",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-2",
+            "name": "DALE BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "DHV1707-TestSubscriber-1",
+            "name": "LLOYD BRIDGES",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example",
+            "name": "JimmyExampleCust-20161102",
+            "isPermitted": false
+          },
+          {
+            "id": "jimmy-example2",
+            "name": "JimmyExampleCust-20161103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-102",
+            "name": "ERICA5779-TestSub-PWT-102",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-101",
+            "name": "ERICA5779-TestSub-PWT-101",
+            "isPermitted": false
+          },
+          {
+            "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+            "name": "Emanuel",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-4",
+            "name": "ERICA5779-Subscriber-5",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-TestSub-PWT-103",
+            "name": "ERICA5779-TestSub-PWT-103",
+            "isPermitted": false
+          },
+          {
+            "id": "ERICA5779-Subscriber-2",
+            "name": "ERICA5779-Subscriber-2",
+            "isPermitted": false
+          },
+          {
+            "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "name": "SILVIA ROBBINS",
+            "isPermitted": true
+          },
+          {
+            "id": "ERICA5779-Subscriber-3",
+            "name": "ERICA5779-Subscriber-3",
+            "isPermitted": false
+          },
+          {
+            "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+            "name": "CRAIG/ROBERTS",
+            "isPermitted": false
+          }
+        ]
+      }
+    };
+  }
+}
+
+class MockFeatureFlagsService {}
+
+describe('vnf group new popup service', () => {
+  let injector;
+  let service: VnfGroupPopupService;
+  let genericFormService: GenericFormService
+  let defaultDataGeneratorService: DefaultDataGeneratorService;
+  let fb: FormBuilder;
+  let iframeService: IframeService;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      providers : [
+        VnfGroupPopupService,
+        DefaultDataGeneratorService,
+        GenericFormService,
+        FormBuilder,
+        IframeService,
+        {provide:FeatureFlagsService, useClass: MockFeatureFlagsService},
+        AaiService,
+        LogService,
+        BasicPopupService,
+        VfModulePopuopService,
+        BasicControlGenerator,
+        VnfGroupControlGenerator,
+        {provide: NgRedux, useClass: MockReduxStore},
+        {provide: HttpClient, useClass: MockAppStore}]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(VnfGroupPopupService);
+    genericFormService = injector.get(GenericFormService);
+    defaultDataGeneratorService = injector.get(DefaultDataGeneratorService);
+    fb = injector.get(FormBuilder);
+    iframeService = injector.get(IframeService);
+
+  })().then(done).catch(done.fail));
+
+  test('getTitle vnf group should return the correct title for edit and create mode', () => {
+    expect(service.getTitle(false)).toBe('Set a new VNF Group');
+    expect(service.getTitle(true)).toBe('Edit VNF Group instance');
+  });
+
+  test('getSubRightTitle vnf should return popup type', () => {
+    expect(service.getSubRightTitle()).toBe('VNF Group Instance Details');
+  });
+
+  test('getModelInformation vnfGroup should update modelInformations', () => {
+    const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+    const vnfGroupModelName: string = '2017-388_ADIOD-vPE 1';
+    service.getModelInformation(serviceId, vnfGroupModelName);
+    expect(service.modelInformations.length).toEqual(14);
+
+    expect(service.modelInformations[0].label).toEqual("Model version");
+    expect(service.modelInformations[0].values).toEqual(['1.0']);
+
+    expect(service.modelInformations[1].label).toEqual("Description");
+    expect(service.modelInformations[1].values).toEqual(['Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM']);
+
+    expect(service.modelInformations[2].label).toEqual("Category");
+    expect(service.modelInformations[2].values).toEqual([undefined]);
+
+    expect(service.modelInformations[3].label).toEqual("Sub Category");
+    expect(service.modelInformations[3].values).toEqual([undefined]);
+
+    expect(service.modelInformations[4].label).toEqual("UUID");
+    expect(service.modelInformations[4].values).toEqual(['0903e1c0-8e03-4936-b5c2-260653b96413']);
+
+    expect(service.modelInformations[5].label).toEqual("Invariant UUID");
+    expect(service.modelInformations[5].values).toEqual(['00beb8f9-6d39-452f-816d-c709b9cbb87d']);
+
+    expect(service.modelInformations[6].label).toEqual("Type");
+    expect(service.modelInformations[6].values).toEqual([undefined]);
+
+    expect(service.modelInformations[7].label).toEqual("Role");
+    expect(service.modelInformations[7].values).toEqual([undefined]);
+
+    expect(service.modelInformations[8].label).toEqual("Function");
+    expect(service.modelInformations[8].values).toEqual([undefined]);
+
+    expect(service.modelInformations[9].label).toEqual("Member resource type");
+    expect(service.modelInformations[9].values).toEqual(['VNF']);
+
+    expect(service.modelInformations[10].label).toEqual("Members service Invariant UUID");
+    expect(service.modelInformations[10].values).toEqual([]);
+
+    expect(service.modelInformations[11].label).toEqual("Members service model name");
+    expect(service.modelInformations[11].values).toEqual([]);
+
+    expect(service.modelInformations[12].label).toEqual("Minimum to instantiate");
+    expect(service.modelInformations[12].values).toEqual(['0']);
+
+    expect(service.modelInformations[13].label).toEqual("Maximum to instantiate");
+    expect(service.modelInformations[13].values).toEqual(['Unlimited']);
+  });
+
+  test('getSubLeftTitle new vnf group popup should return service model name', () => {
+    service.uuidData = {
+      serviceId: '6e59c5de-f052-46fa-aa7e-2fca9d674c44',
+      modelName: 'VF_vMee 0'
+    };
+    expect(service.getSubLeftTitle()).toBe('VNF Group : VF_vMee');
+  });
+
+  test('getInstance with empty storekey should be created', () => {
+    const serviceId: string = '6e59c5de-f052-46fa-aa7e-2fca9d674c44';
+    const vnfGroupModelName: string = '2017-388_ADIOD-vPE 1';
+    const newInstance = service.getInstance(serviceId, vnfGroupModelName, null);
+    expect(newInstance).toBeDefined();
+  });
+
+  test('getInstance with not empty storekey should return vnfGroupStoreKey', () => {
+    const serviceId: string = '6b528779-44a3-4472-bdff-9cd15ec93450';
+    const vnfGroupModelName: string = '2017-388_ADIOD-vPE 1';
+    const vnfGroupStoreKey: string = '2017-488_ADIOD-vPE 0';
+    const newInstance = service.getInstance(serviceId, vnfGroupModelName, vnfGroupStoreKey);
+    expect(newInstance.vnfGroupStoreKey).toEqual('2017-488_ADIOD-vPE 0');
+  });
+
+  test('getGenericFormPopupDetails returns the FormPopupDetails object', () => {
+      const serviceId: string = '6e59c5de-f052-46fa-aa7e-2fca9d674c44';
+      const vnfGroupModelName: string = 'VF_vMee 0';
+      const vnfGroupStoreKey: string = 'VF_vMee 0';
+      let uuidData: UUIDData = <any>{
+        serviceId: "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+        modelName: "VF_vMee 0",
+        vnfGroupStoreKey: "VF_vMee 0"
+      };
+      const formPopupDetailsObject = service.getGenericFormPopupDetails(serviceId, vnfGroupModelName, vnfGroupStoreKey, null, uuidData, true);
+      expect(formPopupDetailsObject).toBeDefined();
+    }
+  );
+});
diff --git a/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.ts b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.ts
new file mode 100644
index 0000000..748edd2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service.ts
@@ -0,0 +1,158 @@
+import {Injectable} from '@angular/core';
+import {GenericPopupInterface} from "../generic-popup.interface";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {FormPopupDetails, PopupType} from "../../../../models/formControlModels/formPopupDetails.model";
+import {FormGroup} from "@angular/forms";
+import {ModelInformationItem} from "../../../model-information/model-information.component";
+import {ServiceModel} from "../../../../models/serviceModel";
+import {Subject} from "rxjs/Subject";
+import {BasicControlGenerator} from "../../../genericForm/formControlsServices/basic.control.generator";
+import {IframeService} from "../../../../utils/iframe.service";
+import {DefaultDataGeneratorService} from "../../../../services/defaultDataServiceGenerator/default.data.generator.service";
+import {AaiService} from "../../../../services/aaiService/aai.service";
+import {BasicPopupService} from "../basic.popup.service";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../../../store/reducers";
+import {Subscriber} from "../../../../models/subscriber";
+import {Constants} from "../../../../utils/constants";
+import {ModelInfo} from "../../../../models/modelInfo";
+import {changeInstanceCounter} from "../../../../storeUtil/utils/general/general.actions";
+import * as _ from 'lodash';
+import {VnfGroupControlGenerator} from "../../../genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator";
+import {VnfGroupInstance} from "../../../../models/vnfGroupInstance";
+import {createVnfGroupInstance, updateVnfGroupInstance} from "../../../../storeUtil/utils/vnfGroup/vnfGroup.actions";
+
+@Injectable()
+export class VnfGroupPopupService implements GenericPopupInterface{
+  dynamicInputs: any;
+  instance: any;
+  model:any;
+  serviceModel:ServiceModel;
+  modelInformations: ModelInformationItem[] = [];
+  uuidData: Object;
+  closeDialogEvent: Subject<any> = new Subject<any>();
+  isUpdateMode: boolean;
+
+  constructor(
+    private _basicControlGenerator: BasicControlGenerator,
+    private _vnfGroupControlGenerator: VnfGroupControlGenerator,
+    private _iframeService: IframeService,
+    private _defaultDataGeneratorService: DefaultDataGeneratorService,
+    private _aaiService: AaiService,
+    private _basicPopupService: BasicPopupService,
+    private _store: NgRedux<AppState>) {
+  }
+
+  getGenericFormPopupDetails(serviceId: string, modelName: string, vnfGroupStoreKey: string, node: ITreeNode, uuidData: Object, isUpdateMode: boolean): FormPopupDetails {
+    this.uuidData = uuidData;
+    this.isUpdateMode = isUpdateMode;
+    this.instance = this.getInstance(serviceId, modelName, vnfGroupStoreKey);
+    this.getModelInformation(serviceId, modelName);
+
+    return new FormPopupDetails(this,
+      PopupType.VNF_GROUP,
+      uuidData,
+      this.getTitle(isUpdateMode),
+      this.getSubLeftTitle(),
+      this.getSubRightTitle(),
+      this.getControls(serviceId, modelName, vnfGroupStoreKey),
+      this._basicPopupService.getDynamicInputs(serviceId, modelName, vnfGroupStoreKey, 'vnfGroups'),
+      this.modelInformations,
+      (that, form: FormGroup) => {that.onSubmit(that, form);},
+      (that: any, form: FormGroup) => {that.onCancel(that, form); }
+      )
+  }
+
+  getControls(serviceId: string, modelName: string, vnfGroupStoreKey: string){
+    if(this._store.getState().service.serviceHierarchy[serviceId].service.instantiationType === 'Macro') {
+      return this._vnfGroupControlGenerator.getMacroFormControls(serviceId, vnfGroupStoreKey, modelName);
+    } else {
+      return this._vnfGroupControlGenerator.getAlaCarteFormControls(serviceId, vnfGroupStoreKey, modelName);
+    }
+  }
+
+  getInstance(serviceId: string, modelName: string, vnfGroupStoreKey: string): any {
+    if(_.isNil(vnfGroupStoreKey)){
+      return new VnfGroupInstance();
+    }
+    return this._store.getState().service.serviceInstance[serviceId].vnfGroups[vnfGroupStoreKey];
+  }
+
+  getModelInformation(serviceId: string, modelName: string): void {
+    this._aaiService.getServiceModelById(serviceId).subscribe((result: any) => {
+      this.serviceModel = new ServiceModel(result);
+      this.model = this._basicPopupService.getModelFromResponse(result, 'vnfGroups', modelName);
+      const serviceInstance = this._store.getState().service.serviceInstance[serviceId];
+      this.modelInformations = [
+        new ModelInformationItem("Model version", "modelVersion", [this.model.version], "", true),
+        new ModelInformationItem("Description", "description", [this.model.description]),
+        new ModelInformationItem("Category", "category", [this.model.category]),
+        new ModelInformationItem("Sub Category", "subCategory", [this.model.subCategory]),
+        new ModelInformationItem("UUID", "uuid", [this.model.uuid], Constants.ServicePopup.TOOLTIP_UUID, true),
+        new ModelInformationItem("Invariant UUID", "invariantUuid", [this.model.invariantUuid], Constants.ServicePopup.TOOLTIP_INVARIANT_UUID, true),
+        new ModelInformationItem("Type", "type", [this.model.properties.type], "", true),
+        new ModelInformationItem("Role", "role", [this.model.properties.role]),
+        new ModelInformationItem("Function", "function", [this.model.properties.function]),
+        new ModelInformationItem("Member resource type", "contained_resource_type", ["VNF"], "", true),
+        new ModelInformationItem("Members service Invariant UUID", "Members service Invariant UUID", _.toArray(_.mapValues(this.model.members, 'sourceModelInvariant'))),
+        new ModelInformationItem("Members service model name", "sourceModelName", _.toArray(_.mapValues(this.model.members, 'sourceModelName'))),
+        new ModelInformationItem("Minimum to instantiate", "vnfGroup-min", ['0'], "", false),
+        new ModelInformationItem("Maximum to instantiate", "vnfGroup-max", ['Unlimited'], "", false)
+        ];
+    })
+  }
+
+  getSubLeftTitle(): string {
+    return "VNF Group : " + this._store.getState().service.serviceHierarchy[this.uuidData['serviceId']].vnfGroups[this.uuidData['modelName']].name;
+  }
+
+  getSubRightTitle(): string {
+    return "VNF Group Instance Details";
+  }
+
+  storeVnfGroup = (that, formValues: any): void => {
+    formValues.modelInfo = new ModelInfo(that.model);
+    formValues.uuid = formValues.modelInfo.uuid;
+    formValues.isMissingData = false;
+    if(!that.isUpdateMode){
+      that._store.dispatch(changeInstanceCounter(formValues.modelInfo.modelCustomizationId || formValues.uuid, that.uuidData.serviceId, 1 , <any> {data: {type: 'VnfGroup'}}));
+      this._store.dispatch(createVnfGroupInstance(formValues, that.uuidData['modelName'], that.uuidData['serviceId'], that.uuidData['modelName']));
+    }else {
+      that._store.dispatch(updateVnfGroupInstance(formValues, that.uuidData.modelName, that.uuidData.serviceId, that.uuidData.vnfGroupStoreKey))
+    }
+  };
+
+  getTitle(isUpdateMode: boolean): string {
+    return isUpdateMode  ? "Edit VNF Group instance": "Set a new VNF Group" ;
+  }
+
+  onCancel(that, form): void {
+    form.reset();
+    that._iframeService.removeClassCloseModal('content');
+    this.closeDialogEvent.next(that);
+  }
+
+  onSubmit(that, form: FormGroup, ...args): void {
+    form.value['instanceParams'] = [{}];
+    that.storeVnfGroup(that, form.value);
+    window.parent.postMessage( {
+      eventId: 'submitIframe',
+      data: {
+        serviceModelId: that.uuidData.serviceId
+      }
+    }, "*");
+    that.onCancel(that, form);
+  }
+
+  extractSubscriberNameBySubscriberId(subscriberId: string, store: NgRedux<AppState>) {
+    let result: string = null;
+    let filteredArray: any = _.filter(store.getState().service.subscribers, function (o: Subscriber) {
+      return o.id === subscriberId
+    });
+    if (filteredArray.length > 0) {
+      result = filteredArray[0].name;
+    }
+    return result;
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts
index 08e199c..c610110 100644
--- a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts
+++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.component.ts
@@ -30,7 +30,7 @@
 import { Component } from '@angular/core';
 import { MessageBoxData} from './messageBox.data';
 import { MessageBoxService } from './messageBox.service';
-import { SdcUiComponents } from 'sdc-ui/lib/angular';
+import { SdcUiServices} from "onap-ui-angular";
 
 @Component({
   selector: 'message-box',
@@ -38,12 +38,17 @@
 })
 
 export class MessageBoxComponent {
-  modalService: SdcUiComponents.ModalService;
-
-  constructor(modalService: SdcUiComponents.ModalService, private _messageBoxService : MessageBoxService) {
+  modalService: SdcUiServices.ModalService;
+  isOpened : boolean = false;
+  constructor(modalService: SdcUiServices.ModalService, private _messageBoxService : MessageBoxService) {
     this.modalService = modalService;
+
     MessageBoxService.openModal.subscribe((messageBoxData: MessageBoxData) => {
-      modalService.openModal(this._messageBoxService.setConfig(messageBoxData))
+      if(this.isOpened) return;
+      this.isOpened = true;
+      modalService.openModal(this._messageBoxService.setConfig(messageBoxData)).onDestroy(()=>{
+        this.isOpened = false;
+      })
     });
   }
 }
diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts
index 165140b..e67b1f7 100644
--- a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts
+++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.data.ts
@@ -1,13 +1,14 @@
-import { Subject } from 'rxjs/Subject';
+import { SdcUiCommon} from "onap-ui-angular";
+import {IModalButtonComponent} from "onap-ui-angular/dist/modals/models/modal-config";
 
 export class  MessageBoxData {
   title?: string;
   message?: string;
-  size : ModalSize;
-  type: ModalType;
-  buttons: Array<IModalButtonComponent>;
+  size : SdcUiCommon.ModalSize;
+  type: SdcUiCommon.ModalType;
+  buttons: IModalButtonComponent[];
 
-  constructor(title: string, message: string, type: ModalType, size : ModalSize, buttons: Array<IModalButtonComponent>) {
+  constructor(title: string, message: string, type: SdcUiCommon.ModalType, size : SdcUiCommon.ModalSize, buttons: IModalButtonComponent[]) {
     this.title = title;
     this.message = message;
     this.size = size;
@@ -15,37 +16,3 @@
     this.buttons = buttons;
   }
 }
-
-export interface IModalConfig {
-  size?: string;
-  title?: string;
-  message?: string;
-  buttons?: Array<IModalButtonComponent>;
-  type?: string;
-}
-export interface IButtonComponent {
-  text: string;
-  disabled?: boolean;
-  type?: string;
-  size?: string;
-}
-export interface IModalButtonComponent extends IButtonComponent {
-  callback?: Function;
-  closeModal?: boolean;
-}
-export  enum ModalType {
-  alert = "alert",
-  error = "error",
-  standard = "info",
-  custom = "custom",
-}
-export enum ModalSize {
-  xlarge = "xl",
-  large = "l",
-  medium = "md",
-  small = "sm",
-  xsmall = "xsm",
-}
-
-
-
diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts
index 89562ac..1d0e18f 100644
--- a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts
+++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.spec.ts
@@ -3,35 +3,37 @@
   HttpClientTestingModule,
   HttpTestingController
 } from '@angular/common/http/testing';
-
 import { MessageBoxService } from './messageBox.service';
-import {MessageBoxData, ModalSize, ModalType } from './messageBox.data';
+import {MessageBoxData} from './messageBox.data';
+import { SdcUiCommon} from "onap-ui-angular";
 
 describe('MessageBoxService', () => {
   let injector;
   let service: MessageBoxService;
   let httpMock: HttpTestingController;
 
-  beforeEach(() => {
+  beforeAll(done => (async () => {
     TestBed.configureTestingModule({
       imports: [HttpClientTestingModule],
       providers: [MessageBoxService]
     });
+    await TestBed.compileComponents();
 
     injector = getTestBed();
     service = injector.get(MessageBoxService);
     httpMock = injector.get(HttpTestingController);
-  });
+
+  })().then(done).catch(done.fail));
 
   describe('#setConfig', () => {
-    it('should return <IModalConfig>', (done: DoneFn) => {
+    test('should return <IModalConfig>', () => {
       let title = "Delete Instantiation";
       let message = "You are about to stop the instantiation process of this service. \nAll data will be lost. Are you sure you want to stop?";
       let messageBoxData : MessageBoxData = new MessageBoxData(
         title,
         message,
-        ModalType.alert,
-        ModalSize.medium,
+        SdcUiCommon.ModalType.warning,
+        SdcUiCommon.ModalSize.medium,
         [
           {text:"Stop Instantiation", size:"large", closeModal:true},
           {text:"Cancel", size:"medium", closeModal:true}
@@ -41,9 +43,8 @@
       expect(result.title).toEqual(title);
       expect(result.message).toEqual(message);
       expect(result.buttons.length).toEqual(2);
-      expect(result.type).toEqual(ModalType.alert);
-      expect(result.size).toEqual(ModalSize.medium);
-      done();
+      expect(result.type).toEqual(SdcUiCommon.ModalType.warning);
+      expect(result.size).toEqual(SdcUiCommon.ModalSize.medium);
     });
   });
 });
diff --git a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts
index eaa012d..d73631a 100644
--- a/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts
+++ b/vid-webpack-master/src/app/shared/components/messageBox/messageBox.service.ts
@@ -1,18 +1,18 @@
 import { Injectable } from '@angular/core';
 import { Subject } from 'rxjs/Subject';
-import { IModalConfig, MessageBoxData, ModalSize, ModalType } from './messageBox.data';
+import {MessageBoxData} from "./messageBox.data";
+import { SdcUiCommon} from "onap-ui-angular";
 
 @Injectable()
 export class MessageBoxService {
   static openModal: Subject<MessageBoxData> = new Subject<MessageBoxData>();
-  setConfig(messageBoxData: MessageBoxData) : IModalConfig{
+  setConfig(messageBoxData: MessageBoxData) : SdcUiCommon.IModalConfig{
     return {
-      size : ModalSize.medium,
+      size : SdcUiCommon.ModalSize.medium,
       title : messageBoxData.title,
       type : messageBoxData.type,
       message : messageBoxData.message,
       buttons: messageBoxData.buttons
     };
   }
-
 }
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts
index fea4c44..9401aca 100644
--- a/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts
+++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.component.ts
@@ -1,5 +1,6 @@
 import {Component, Input} from '@angular/core';
-import * as _ from 'lodash';
+import {ModelInformationService} from "./model-information.service";
+
 
 @Component({
   selector: 'model-information',
@@ -8,17 +9,21 @@
 })
 
 export class ModelInformationComponent {
-  private _modelInformationItems: Array<ModelInformationItem>;
 
+  constructor(private _modelInformationService : ModelInformationService){}
 
-  get modelInformationItems(): Array<ModelInformationItem> {
+  private _modelInformationItems: ModelInformationItem[];
+
+  @Input() itemClass: string = 'item'; //default class for item is "item"
+
+  get modelInformationItems(): ModelInformationItem[] {
     return this._modelInformationItems;
   }
 
   @Input()
-  set modelInformationItems(_modelInformationItems: Array<ModelInformationItem>) {
+  set modelInformationItems(_modelInformationItems: ModelInformationItem[]) {
     if (_modelInformationItems) {
-      this._modelInformationItems = _modelInformationItems.filter(x => x.mandatory || (!_.isEmpty(x.values) && !_.isEmpty(x.values[0])));
+      this._modelInformationItems = this._modelInformationService.filterModelItems(_modelInformationItems);
     }
   }
 }
@@ -27,11 +32,11 @@
 export class ModelInformationItem {
   label: string;
   testsId: string;
-  values: Array<string>;
+  values: string[];
   toolTipText: string;
   mandatory: boolean;
 
-  constructor(label: string, testsId: string, values: Array<any>, toolTipText: string = "", mandatory: boolean = false,nested:boolean=false) {
+  constructor(label: string, testsId: string, values: any[], toolTipText: string = "", mandatory: boolean = false) {
     this.label = label;
     this.testsId = testsId;
     this.values = values;
@@ -39,4 +44,8 @@
     this.mandatory = mandatory;
   }
 
+  static createInstance(label: string, value: any):ModelInformationItem {
+    return new ModelInformationItem(label, label, [value]);
+  }
+
 }
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.html b/vid-webpack-master/src/app/shared/components/model-information/model-information.html
index 456dfde..78548b0 100644
--- a/vid-webpack-master/src/app/shared/components/model-information/model-information.html
+++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.html
@@ -1,12 +1,12 @@
 <div id="model-information">
-  <div *ngFor="let item of modelInformationItems" class="item" attr.data-tests-id="model-item-{{item.label}}">
+  <div *ngFor="let item of modelInformationItems" ngClass={{itemClass}} attr.data-tests-id="model-item-{{item.label}}">
     <tooltip-content #a>
       <span> {{item.toolTipText}}</span>
     </tooltip-content>
 
     <div class="wrapper" [tooltip]="a" [tooltipDisabled]="!item.toolTipText" tooltipPlacement="top" [tooltipAnimation]="false">
       <label attr.data-tests-id="model-item-label-{{item.testsId}}">{{item.label}}</label>
-      <div *ngFor="let value of item.values" attr.data-tests-id="model-item-value-{{item.testsId}}">{{value}}</div>
+      <div *ngFor="let value of item.values" class="model-item-value" attr.data-tests-id="model-item-value-{{item.testsId}}">{{value}}</div>
     </div>
   </div>
 </div>
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts
new file mode 100644
index 0000000..418493f
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.spec.ts
@@ -0,0 +1,32 @@
+import {ModelInformationService} from "./model-information.service";
+import {ModelInformationItem} from "./model-information.component";
+
+describe('ModelInformationService', () => {
+  let underTest:ModelInformationService;
+
+  beforeEach(() => {
+    underTest = new ModelInformationService();
+  });
+
+  test('when call to filterModelItems then items with empty values are filtered', () =>{
+    expect(underTest.filterModelItems([
+      ModelInformationItem.createInstance("emptyValue", ""),
+      ModelInformationItem.createInstance("nullValue", null),
+      ModelInformationItem.createInstance("undefinedValue", undefined),
+      ModelInformationItem.createInstance("spacesValue", " "),
+      new ModelInformationItem("emptyArray", "id", [], "c", false)
+    ])).toHaveLength(0);
+  });
+
+  test('when call to filterModelItems then mandatory items with empty values are not filtered', () =>{
+    const mandatoryItem:ModelInformationItem = new ModelInformationItem("a", "b", [""], "c", true);
+    expect(underTest.filterModelItems([mandatoryItem])).toEqual([mandatoryItem]);
+  });
+
+  test('when call to filterModelItems then items with values are not filtered', () =>{
+    expect(underTest.filterModelItems([
+      ModelInformationItem.createInstance("withString", "a"),
+      ModelInformationItem.createInstance("withNumber", 1),
+    ])).toHaveLength(2);
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts
new file mode 100644
index 0000000..7c0a96b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.service.ts
@@ -0,0 +1,16 @@
+import {Injectable} from "@angular/core";
+import * as _ from 'lodash';
+import {ModelInformationItem} from "./model-information.component";
+
+@Injectable()
+export class ModelInformationService {
+
+  filterModelItems(_modelInformationItems: ModelInformationItem[]) {
+    return _modelInformationItems.filter(x => x.mandatory || (
+      !_.isEmpty(x.values)
+      && !_.isNil(x.values[0])
+      && x.values[0].toString().trim()!=""
+      ));
+  }
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts b/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts
new file mode 100644
index 0000000..cdba11f
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/model-information/model-information.spec.ts
@@ -0,0 +1,12 @@
+import {ModelInformationItem} from "./model-information.component";
+
+describe('ModelInformationItem', () => {
+  test('when use createInstance, values initialized as expected', () =>{
+    const modelInformationItem:ModelInformationItem = ModelInformationItem.createInstance("aStr", 4);
+    expect(modelInformationItem.label).toEqual("aStr");
+    expect(modelInformationItem.testsId).toEqual("aStr");
+    expect(modelInformationItem.values).toEqual([4]);
+    expect(modelInformationItem.mandatory).toBeFalsy();
+    expect(modelInformationItem.toolTipText).toEqual("");
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html
index bbe7bc7..1820028 100644
--- a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html
+++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.html
@@ -1,5 +1,6 @@
 <div class="width-100">
-  <div class="text-title" [ngClass]="titleClass">{{title}}</div>
-  <div class="text-subtitle" [ngClass]="subtitleClass">{{subtitle}}</div>
+  <div class="text-title" [ngClass]="titleClass" [attr.data-tests-id]="'text-title'">{{title}}</div>
+  <div class="text-title" [ngClass]="titleClass" [attr.data-tests-id]="'text-title2'">{{title2}}</div>
+  <div class="text-subtitle" [ngClass]="subtitleClass" [attr.data-tests-id]="'text-subtitle'">{{subtitle}}</div>
   <img  id="not-node-img-id" src="{{iconPath}}" alt="" class="no-content-icon" [ngClass]="iconClass" data-tests-id="no-content-icon">
 </div>
diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss
index 1320ef7..3829f06 100644
--- a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss
+++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.scss
@@ -9,6 +9,7 @@
   font-size: 16px;
   color: #4A4A4A;
   text-align: center;
+  padding-bottom: 7px;
 }
 
 .text-subtitle {
@@ -16,7 +17,7 @@
   font-size: 16px;
   color: #959595;
   text-align: center;
-  margin-top: 7px;
+  margin-top: 2px;
 }
 
 .no-content-icon {
diff --git a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts
index 7f4e982..da66f3f 100644
--- a/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts
+++ b/vid-webpack-master/src/app/shared/components/no-content-message-and-icon/no-content-message-and-icon.component.ts
@@ -11,6 +11,7 @@
   constructor() {}
 
   @Input() title: string;
+  @Input() title2?: string;
   @Input() subtitle: string;
   @Input() iconPath: string;
 
diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.html b/vid-webpack-master/src/app/shared/components/popover/popover.component.html
index c551559..4dc8096 100644
--- a/vid-webpack-master/src/app/shared/components/popover/popover.component.html
+++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.html
@@ -2,7 +2,10 @@
   triggers="mouseenter:mouseleave"
   popover="{{value}}"
   [hidden]="value == null"
-  container="body">
+  container="body"
+  containerClass="{{popoverType}}"
+  placement="{{placement}}"
+  [attr.data-tests-id]="'popover-test-id'">
   <ng-content ></ng-content>
 </div>
 
diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.scss b/vid-webpack-master/src/app/shared/components/popover/popover.component.scss
index ca2800a..946b62d 100644
--- a/vid-webpack-master/src/app/shared/components/popover/popover.component.scss
+++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.scss
@@ -1,4 +1,5 @@
 .popover.popover-top.top {
   color : green !important;
   font-size: 10px;
+  word-wrap: break-word;
 }
diff --git a/vid-webpack-master/src/app/shared/components/popover/popover.component.ts b/vid-webpack-master/src/app/shared/components/popover/popover.component.ts
index d6a4c3a..9dbbe63 100644
--- a/vid-webpack-master/src/app/shared/components/popover/popover.component.ts
+++ b/vid-webpack-master/src/app/shared/components/popover/popover.component.ts
@@ -1,17 +1,29 @@
 import {Component, Input} from "@angular/core";
-
 @Component({
   selector: 'custom-popover',
-  templateUrl: 'popover.component.html',
-  styles: [`
-        :host >>> .popover {
-          font-size: 13px;
-          text-align: left;
-          z-index: 10000;
-        }
-    `]
+  templateUrl: 'popover.component.html'
 })
 
-export class PopoverComponent {
-  @Input() value: String;
+export class PopoverComponent{
+  @Input() value: string;
+  @Input() extraStyle : string;
+  @Input() placement : string = PopoverPlacement.LEFT;
+  @Input() popoverType : string = PopoverType.CUSTOM;
+
 }
+
+export enum PopoverPlacement{
+  TOP = 'top',
+  BOTTOM = 'bottom',
+  LEFT = 'left',
+  RIGHT = 'right',
+  AUTO ='auto',
+}
+
+export enum PopoverType {
+  ERROR  = 'error',
+  WARNING = 'warning',
+  SUCCESS = 'success',
+  CUSTOM = 'custom'
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/member-table-row.model.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/member-table-row.model.ts
new file mode 100644
index 0000000..c5f1a7a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/member-table-row.model.ts
@@ -0,0 +1,6 @@
+import {VnfMember} from "../../../models/VnfMember";
+
+export class MemberTableRowModel  extends VnfMember{
+  isSelected : boolean = false;
+}
+
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.html b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.html
new file mode 100644
index 0000000..3a29ed8
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.html
@@ -0,0 +1,75 @@
+<div class="table-header">
+  <div class="left-header">
+    <span class="title-header">{{description}}</span>
+    <div class="sub-title-header">
+      <span class="vnf-match-your-criteria" class="total" [attr.data-tests-id]="'total-amount'" style="margin-right: 5px;"><span
+        [attr.data-tests-id]="'numberOfNotHideVnfMembers'">{{membersTableService.numberOfNotHideVnfMembers}}</span> VNFs match your criteria</span>
+      <span class="vnf-selected" class="total" [attr.data-tests-id]="'total-selected'"><span
+        [attr.data-tests-id]="'numberOfSelectedVnfMembers'">{{membersTableService.numberOfSelectedVnfMembers}}</span> VNF{{membersTableService.numberOfSelectedVnfMembers>1?'s':'' }} selected</span>
+    </div>
+  </div>
+
+  <div class="search-container">
+    <sdc-filter-bar
+      [placeHolder]="'Search...'"
+      [debounceTime]="250"
+      [testId]="'vnf-members-search'"
+      (valueChange)="search($event)">
+    </sdc-filter-bar>
+  </div>
+</div>
+<table id="member-table" class="table table-bordered" *ngIf="data?.length > 0">
+  <thead class="thead-dark">
+  <tr>
+    <th class="allCheckboxAreSelected" style="position: relative;">
+      <sdc-checkbox
+        [(checked)]="membersTableService.allCheckboxAreSelected"
+        [testId]="'all-checkbox-selected'"
+        (checkedChange)="changeAllCheckboxStatus($event)"
+      ></sdc-checkbox>
+    </th>
+    <th class="header-title" *ngFor="let header of headers">{{header.displayName}}</th>
+  </tr>
+  </thead>
+  <tbody>
+  <tr class="member-table-row" *ngFor="let vnf of membersTableService.filteredMembers">
+    <td class="sdcCheckboxMember" style="position: relative;" [attr.data-tests-id]="vnf?.instanceId">
+      <sdc-checkbox
+        [checked]="membersTableService.allMemberStatusMap[vnf.instanceId]?.isSelected"
+        [testId]="vnf?.instanceId"
+        (checkedChange)="changeCheckboxStatus(vnf.instanceId)"
+      ></sdc-checkbox></td>
+    <td id="vnfName">
+      <custom-ellipsis [id]="vnf?.instanceName" [value]="vnf?.instanceName"
+                       [hightlight]="filterValue"></custom-ellipsis>
+      <custom-ellipsis class="second-line" [id]="vnf?.instanceId" [value]="'UUID: '+ vnf?.instanceId"
+                       [hightlight]="filterValue"></custom-ellipsis>
+    </td>
+    <td id="version">
+      <custom-ellipsis [id]="vnf?.modelInfo?.modelVersion" [value]="vnf?.modelInfo?.modelVersion" [hightlight]="filterValue"></custom-ellipsis>
+    </td>
+    <td id="modelName">
+      <custom-ellipsis [id]="vnf?.modelInfo?.modelName" [value]="vnf?.modelInfo?.modelName" [hightlight]="filterValue"></custom-ellipsis>
+    </td>
+    <td id="provStatus">
+      <custom-ellipsis [id]="vnf?.provStatus" [value]="vnf?.provStatus" [hightlight]="filterValue"></custom-ellipsis>
+    </td>
+    <td id="serviceInstance">
+      <custom-ellipsis [id]="vnf?.serviceInstanceName" [value]="vnf?.serviceInstanceName"
+                       [hightlight]="filterValue"></custom-ellipsis>
+      <custom-ellipsis class="second-line" [id]="vnf?.serviceInstanceId" [value]="'UUID: '+ vnf?.serviceInstanceId"
+                       [hightlight]="filterValue"></custom-ellipsis>
+    </td>
+    <td id="cloudRegion">
+      <custom-ellipsis [id]="vnf?.lcpCloudRegionId" [value]="vnf?.lcpCloudRegionId" [hightlight]="filterValue"></custom-ellipsis>
+    </td>
+    <td id="tenantName">
+      <custom-ellipsis [id]="vnf?.tenantName" [value]="vnf?.tenantName" [hightlight]="filterValue"></custom-ellipsis>
+    </td>
+  </tr>
+
+  </tbody>
+</table>
+<div class="no-result" *ngIf="data?.length == 0">No VNFs were found that can belong to this group.</div>
+
+
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.scss b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.scss
new file mode 100644
index 0000000..3be9752
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.scss
@@ -0,0 +1,91 @@
+.table-header {
+  display: flex;
+  margin-bottom: 5px;
+  .left-header{
+    .title-header{
+      font-family: OpenSans-SemiBold;
+      color: #191919;
+      font-size: 15px;
+      margin-bottom: 5px;
+      display: block;
+    }
+
+    .sub-title-header{
+
+      .vnf-selected{
+        margin-left: 25px;
+      }
+
+      .vnf-match-your-criteria{
+      }
+    }
+    .total{
+      font-family: OpenSans-Regular;
+      color: #191919;
+      font-size: 15px;
+      margin-right: 10px;
+    }
+
+  }
+
+  .search-container{
+    flex-basis: 300px;
+    margin-left: auto;
+  }
+}
+
+#member-table>tbody+tbody {
+  border-top: 1px solid #ddd;
+}
+
+
+
+#member-table {
+  border: 1px solid #D2D2D2;
+  thead {
+    background: #F8F8F8;
+    th.allCheckboxAreSelected {
+      vertical-align: middle !important;
+      width: 48px;
+      max-width: 48px;
+      min-width: 48px;
+      height: 48px;
+    }
+    th.header-title {
+      font-family: OpenSans-SemiBold;
+      vertical-align: middle !important;
+      height: 48px;
+      font-size: 12px;
+    }
+  }
+  tbody {
+    td{
+      text-align: center;
+      height: 60px;
+      padding-top: 0;
+      padding-bottom: 0;
+      max-height: 60px;
+      vertical-align: middle;
+      .second-line {
+        font-size: 12px;
+      }
+    }
+  }
+
+
+  //font-size: 12px;
+
+  th.allCheckboxAreSelected {
+    text-align: center;
+  }
+}
+
+.no-result {
+  font-family: OpenSans-Regular;
+  width: 100%;
+  height: 100%;
+  border: 1px solid #d2d2d2;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.ts
new file mode 100644
index 0000000..9736563
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.component.ts
@@ -0,0 +1,57 @@
+import {Component, Input, OnChanges, Output, SimpleChanges, EventEmitter} from '@angular/core';
+import {VnfMember} from "../../../models/VnfMember";
+import {MembersTableService} from "./members-table.service";
+import * as _ from 'lodash';
+
+export class CustomTableColumnDefinition {
+  public displayName = '';
+  public key : any = '';
+  public type? = 'text';
+  public filter? = '';
+}
+
+@Component({
+  selector: 'app-members-table',
+  templateUrl: './members-table.component.html',
+  styleUrls: ['./members-table.component.scss']
+})
+
+export class MembersTableComponent implements OnChanges{
+  filterValue: string = null;
+  allMemberStatusMap = null;
+  membersTableService : MembersTableService;
+  headers: CustomTableColumnDefinition[] = MembersTableService.getHeaders();
+  @Input() data: VnfMember[];
+  @Input() description: string;
+  @Output() selectedMembersAmountChange : EventEmitter<number> = new EventEmitter();
+  constructor(private _membersTableService : MembersTableService){
+    this.membersTableService = this._membersTableService;
+  }
+
+  ngOnChanges(changes: SimpleChanges): void {
+    if(_.isNil(this.data)){
+      this._membersTableService.resetAll();
+    }else {
+      this._membersTableService.allMemberStatusMap = MembersTableService.generateAllMembersStatus(this.data);
+      this._membersTableService.filteredMembers = MembersTableService.sortVnfMembersByName(this.data, "instanceName");
+      this._membersTableService.updateAmountsAndCheckAll();
+    }
+  }
+  
+  search(searchStr: string): void {
+    this.filterValue = searchStr;
+    this._membersTableService.filterMembers(this.filterValue);
+  }
+
+  changeAllCheckboxStatus(status: boolean) : void {
+    this._membersTableService.changeAllCheckboxStatus(status);
+    this.selectedMembersAmountChange.emit(this._membersTableService.numberOfSelectedVnfMembers);
+  }
+
+
+  changeCheckboxStatus(vnfInstanceId: string) : void {
+    this._membersTableService.changeCheckboxStatus(vnfInstanceId);
+    this.selectedMembersAmountChange.emit(this._membersTableService.numberOfSelectedVnfMembers);
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.spec.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.spec.ts
new file mode 100644
index 0000000..e53c63b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.spec.ts
@@ -0,0 +1,270 @@
+import {MembersTableService} from "./members-table.service";
+import {TestBed, getTestBed} from "@angular/core/testing";
+import {NgRedux} from "@angular-redux/store";
+import {CustomTableColumnDefinition} from "./members-table.component";
+import {AppState} from "../../../store/reducers";
+import {createRelatedVnfMemberInstance} from "../../../storeUtil/utils/relatedVnfMember/relatedVnfMember.actions";
+import {DataFilterPipe} from "../../../pipes/dataFilter/data-filter.pipe";
+import {VnfMember} from "../../../models/VnfMember";
+
+
+
+class MockAppStore<T> {
+  dispatch() {
+  }
+  getState() {
+    return {
+      service : {
+        serviceHierarchy: {
+        },
+        serviceInstance : {
+          "serviceModelId" : {
+            vnfGroups:{
+              "aa1":{
+                vnfs:{
+                   "VNF1_INSTANCE_ID":{
+                      "action": "None",
+                      "instanceName": "VNF1_INSTANCE_NAME",
+                      "instanceId": "VNF1_INSTANCE_ID",
+                      "orchStatus": null,
+                      "lcpCloudRegionId": "mtn23b",
+                      "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a",
+                      "tenantName": "APPC-24595-T-IST-02C",
+                      "modelInfo": {
+                      "modelInvariantId": "vnf-instance-model-invariant-id",
+                        "modelVersionId": "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+                        "modelVersion": "2.0",
+                        "modelName": "vf_vEPDG",
+                        "modelType": "vnf"
+                    },
+                      "instanceType": "VNF1_INSTANCE_TYPE",
+                      "provStatus": null,
+                      "inMaint": false,
+                      "uuid": "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+                      "trackById": "7a6ee536-f052-46fa-aa7e-2fca9d674c44:002",
+                      "serviceInstanceId": "service-instance-id1",
+                      "serviceInstanceName": "service-instance-name"
+
+                  },
+                  "aa1-vnf1":{
+                    vnfName: "",
+                    instanceId:"",
+                    serviceInstanceId:""
+                  }
+                }
+              }
+            }
+          }
+
+        }
+      }
+    }
+  }
+}
+
+describe('MembersTableService view member count', () => {
+  let injector;
+  let service: MembersTableService;
+  let store: NgRedux<AppState>;
+  let data = loadMockMembers();
+
+  beforeAll(done => (async () => {
+
+    TestBed.configureTestingModule(
+      {
+        providers: [
+          MembersTableService,
+          {provide: NgRedux, useClass: MockAppStore},
+          DataFilterPipe
+
+        ],
+        declarations: [DataFilterPipe]
+      });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(MembersTableService);
+    store = injector.get(NgRedux)
+
+  })().then(done).catch(done.fail));
+
+
+  test('should return number of displayed members', () => {
+    service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
+    service.filteredMembers = <any>data;
+    expect(service.calculateNotHideVnfMembers()).toEqual(2);
+  });
+
+  test('should return number of selected members', () => {
+    service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
+    service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true;
+    service.allMemberStatusMap['VNF2_INSTANCE_ID'].isSelected = true;
+    expect(service.calculateSelectedVnfMembers()).toEqual(2);
+  });
+
+  test('should return number of selected members', () => {
+    service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
+    service.filteredMembers = <any>data;
+    service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true;
+    service.filterMembers('VNF2');
+    service.allMemberStatusMap['VNF2_INSTANCE_ID'].isSelected = true;
+    expect(service.calculateNotHideVnfMembers()).toEqual(1);
+  });
+
+  test('getHeader should return labels with array of keys', () => {
+    const headers: CustomTableColumnDefinition[] = MembersTableService.getHeaders();
+    expect(headers).toEqual([
+      {displayName: 'VNF instance name', key: ['instanceName']},
+      {displayName: 'VNF version', key: ['modelInfo', 'modelVersion']},
+      {displayName: 'VNF model name', key: ['modelInfo', 'modelName']},
+      {displayName: 'Prov Status', key: ['provStatus']},
+      {displayName: 'Service instance name', key: ['serviceInstanceName']},
+      {displayName: 'Cloud Region', key: ['lcpCloudRegionId']},
+      {displayName: 'Tenant Name', key: ['tenantName']}
+    ]);
+  });
+
+
+  test('setMembers should dispatch action only on selected members', () => {
+    const vnfGroupStoreKey: string = 'vnfGroupStoreKey';
+    const serviceId: string = 'serviceId';
+
+    jest.spyOn(store, 'dispatch');
+    service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
+    service.allMemberStatusMap['VNF1_INSTANCE_ID'].isSelected = true;
+    service.setMembers({serviceId: serviceId, vnfGroupStoreKey: vnfGroupStoreKey});
+    expect(store.dispatch).toHaveBeenCalledTimes(1);
+    expect(store.dispatch).toHaveBeenCalledWith(createRelatedVnfMemberInstance(vnfGroupStoreKey, serviceId, service.allMemberStatusMap['VNF1_INSTANCE_ID']));
+  });
+
+  test('generateAllMembersStatus should add to each instance isHide and isSelected and convert to map', () => {
+
+    let allMemberStatusMapMock = MembersTableService.generateAllMembersStatus(<any>data);
+    for (const key in allMemberStatusMapMock) {
+      expect(allMemberStatusMapMock[key].isSelected).toBeFalsy();
+    }
+  });
+
+  test('changeAllCheckboxStatus', () => {
+    let data = loadMockMembers();
+    service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
+    service.filteredMembers = <any>data;
+    service.changeAllCheckboxStatus(true);
+    for (let key in service.allMemberStatusMap) {
+      expect(service.allMemberStatusMap[key].isSelected).toEqual(true);
+    }
+  });
+
+  test('should reset all numbers and lists', () => {
+    let data = loadMockMembers();
+    service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>data);
+    service.filteredMembers = <any>data;
+    service.changeAllCheckboxStatus(true);
+    service.resetAll();
+    expect(service.numberOfNotHideVnfMembers).toEqual(0);
+    expect(service.numberOfSelectedAndNotHideVnfMembers).toEqual(0);
+    expect(service.numberOfSelectedVnfMembers).toEqual(0);
+    expect(service.allMemberStatusMap).toEqual({});
+    expect(service.filteredMembers.length).toEqual(0);
+  });
+
+  test('checkAllCheckboxStatus should be false if not all are selected', () => {
+    service.allMemberStatusMap = MembersTableService.generateAllMembersStatus(<any>loadMockMembers());
+    service.updateAmountsAndCheckAll();
+
+    expect(service.allCheckboxAreSelected).toEqual(false);
+  });
+
+
+  test('sortVnfMembersByName should sort list by vnf name', () => {
+    let data = <any>loadMockMembers();
+    let sortedList = MembersTableService.sortVnfMembersByName(data, "instanceName");
+
+    expect(sortedList[0].instanceName).toEqual("VNF1_INSTANCE_NAME");
+    expect(sortedList[1].instanceName).toEqual("VNF2_INSTANCE_NAME");
+
+    let tmp = data[0];
+    data[0] = data[1];
+    data[1] = tmp;
+
+    sortedList = MembersTableService.sortVnfMembersByName(data, "instanceName");
+
+    expect(sortedList[1].instanceName).toEqual("VNF1_INSTANCE_NAME");
+    expect(sortedList[0].instanceName).toEqual("VNF2_INSTANCE_NAME");
+    sortedList = MembersTableService.sortVnfMembersByName(null, "instanceName");
+    expect(sortedList).toEqual([]);
+    sortedList = MembersTableService.sortVnfMembersByName(data, undefined);
+    expect(sortedList).toEqual([]);
+  });
+
+  test('should return only vnf members not associated to any vnf group', ()=>{
+    const result: VnfMember[] = service.filterUsedVnfMembers("serviceModelId",loadMockMembers());
+    expect(result.length).toEqual(1);
+    expect(result[0].instanceId).toEqual("VNF2_INSTANCE_ID");
+  });
+
+});
+
+
+function loadMockMembers(): any[] {
+  return [
+    {
+      "action": "None",
+      "instanceName": "VNF1_INSTANCE_NAME",
+      "instanceId": "VNF1_INSTANCE_ID",
+      "orchStatus": null,
+      "productFamilyId": null,
+      "lcpCloudRegionId": "mtn23b",
+      "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a",
+      "tenantName": "APPC-24595-T-IST-02C",
+      "modelInfo": {
+        "modelInvariantId": "vnf-instance-model-invariant-id",
+        "modelVersionId": "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+        "modelVersion": "2.0",
+        "modelName": "vf_vEPDG",
+        "modelType": "vnf"
+      },
+      "instanceType": "VNF1_INSTANCE_TYPE",
+      "provStatus": null,
+      "inMaint": false,
+      "uuid": "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+      "originalName": null,
+      "legacyRegion": null,
+      "lineOfBusiness": null,
+      "platformName": null,
+      "trackById": "7a6ee536-f052-46fa-aa7e-2fca9d674c44:002",
+      "serviceInstanceId": "service-instance-id1",
+      "serviceInstanceName": "service-instance-name"
+    },
+    {
+      "action": "None",
+      "instanceName": "VNF2_INSTANCE_NAME",
+      "instanceId": "VNF2_INSTANCE_ID",
+      "orchStatus": null,
+      "productFamilyId": null,
+      "lcpCloudRegionId": "mtn23b",
+      "tenantId": "3e9a20a3e89e45f884e09df0cc2d2d2a",
+      "tenantName": "APPC-24595-T-IST-02C",
+      "modelInfo": {
+        "modelInvariantId": "vnf-instance-model-invariant-id",
+        "modelVersionId": "eb5f56bf-5855-4e61-bd00-3e19a953bf02",
+        "modelVersion": "1.0",
+        "modelName": "vf_vEPDG",
+        "modelType": "vnf"
+      },
+      "instanceType": "VNF2_INSTANCE_TYPE",
+      "provStatus": null,
+      "inMaint": true,
+      "uuid": "eb5f56bf-5855-4e61-bd00-3e19a953bf02",
+      "originalName": null,
+      "legacyRegion": null,
+      "lineOfBusiness": null,
+      "platformName": null,
+      "trackById": "eb5f56bf-5855-4e61-bd00-3e19a953bf02:003",
+      "serviceInstanceId": "service-instance-id2",
+      "serviceInstanceName": "service-instance-name"
+    }
+  ];
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts
new file mode 100644
index 0000000..5b9cd39
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/members-table/members-table.service.ts
@@ -0,0 +1,153 @@
+import {Injectable} from "@angular/core";
+import {VnfMember} from "../../../models/VnfMember";
+import {CustomTableColumnDefinition} from "./members-table.component";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../../store/reducers";
+import {createRelatedVnfMemberInstance} from "../../../storeUtil/utils/relatedVnfMember/relatedVnfMember.actions";
+import * as _ from 'lodash';
+import {DataFilterPipe} from "../../../pipes/dataFilter/data-filter.pipe";
+import {MemberTableRowModel} from "./member-table-row.model";
+
+@Injectable()
+export class MembersTableService {
+  allMemberStatusMap : { [key:string]: MemberTableRowModel; };
+  filteredMembers :  VnfMember[];
+  allCheckboxAreSelected : boolean;
+  numberOfNotHideVnfMembers : number;
+  numberOfSelectedVnfMembers : number;
+  numberOfSelectedAndNotHideVnfMembers : number;
+
+  constructor(private _store: NgRedux<AppState>, private dataFilter: DataFilterPipe){
+    this.resetAll();
+  }
+
+   filterUsedVnfMembers = (serviceModelId: string, result: VnfMember[]): VnfMember[] => {
+    const allMembersMap =  _.keyBy(result as VnfMember[], 'instanceId');
+    const vnfGroupsData = this._store.getState().service.serviceInstance[serviceModelId].vnfGroups;
+    const vnfMembersArr = _.flatMap(vnfGroupsData).map((vnfGroup) =>vnfGroup.vnfs );
+    for( let vnf of vnfMembersArr ){
+      for(let member in vnf){
+        delete allMembersMap[member];
+      }
+    }
+    return _.flatMap(allMembersMap);
+  };
+
+  updateAmountsAndCheckAll = () : void => {
+    this.numberOfSelectedVnfMembers = this.calculateSelectedVnfMembers();
+    this.numberOfNotHideVnfMembers = this.calculateNotHideVnfMembers();
+    this.numberOfSelectedAndNotHideVnfMembers = this.calculateSelectedAndNotHide();
+    this.allCheckboxAreSelected = this.numberOfNotHideVnfMembers > 0 && this.numberOfNotHideVnfMembers === this.numberOfSelectedAndNotHideVnfMembers;
+  };
+
+  resetAll = () : void => {
+    this.allMemberStatusMap = {};
+    this.filteredMembers = [];
+    this.numberOfSelectedVnfMembers = 0;
+    this.numberOfNotHideVnfMembers = 0;
+    this.numberOfSelectedAndNotHideVnfMembers = 0;
+    this.allCheckboxAreSelected = false;
+  };
+
+  changeAllCheckboxStatus = (status : boolean) : void =>{
+    for(const member of this.filteredMembers){
+        this.allMemberStatusMap[member.instanceId].isSelected = status;
+      }
+    this.updateAmountsAndCheckAll();
+  };
+
+  changeCheckboxStatus = (vnfInstanceId : string ) : void =>{
+    this.allMemberStatusMap[vnfInstanceId].isSelected = !this.allMemberStatusMap[vnfInstanceId].isSelected;
+    this.updateAmountsAndCheckAll();
+  };
+
+  /************************************************
+   iterate over all current vnf members:
+   1) if vnf member is selected then update REDUX store
+   2) if vnf member is not selected then delete member
+   @allMemberStatusMap: current vnf member status
+   @vnfGroupStoreKey: vnf group store key
+   @serviceId: service model id
+   ************************************************/
+  setMembers = (data : {serviceId : string, vnfGroupStoreKey : string}) : void =>{
+    let tmpMembers = this.allMemberStatusMap;
+    for(let key in tmpMembers){
+      if(tmpMembers[key].isSelected){
+        this._store.dispatch(createRelatedVnfMemberInstance( data.vnfGroupStoreKey, data.serviceId, tmpMembers[key]));
+      }
+    }
+  };
+
+  filterMembers(searchStr: string): void {
+    const keys: string[][] =  MembersTableService.getDataKeys();
+    this.filteredMembers = this.dataFilter.transform(_.values(this.allMemberStatusMap), searchStr || '', keys);
+    this.updateAmountsAndCheckAll();
+  }
+
+  /************************************
+   generate  vnf member data for select/ unselect rows
+   ************************************/
+  static generateAllMembersStatus(tableData : VnfMember[]) : { [key:string]: MemberTableRowModel; }{
+
+    tableData.map((vnf) => {
+      vnf['isSelected'] = false
+    });
+    return _.keyBy(tableData as MemberTableRowModel[], 'instanceId');
+  }
+
+
+  static sortVnfMembersByName(list : VnfMember[], keyName : string) :VnfMember[]{
+    if(!_.isNil(list) && !_.isNil(keyName)) {
+      return list.sort(function(itemA, itemB) { return itemA[keyName]- itemB[keyName];})
+    }
+    return [];
+
+  }
+
+  /********************************
+   table columns headers and key's
+   ********************************/
+  static getHeaders() : CustomTableColumnDefinition[] {
+    return  [
+      {displayName: 'VNF instance name', key: ['instanceName']},
+      {displayName: 'VNF version', key: ['modelInfo', 'modelVersion']},
+      {displayName: 'VNF model name', key: ['modelInfo', 'modelName']},
+      {displayName: 'Prov Status', key: ['provStatus']},
+      {displayName: 'Service instance name', key: ['serviceInstanceName']},
+      {displayName: 'Cloud Region', key: ['lcpCloudRegionId']},
+      {displayName: 'Tenant Name', key: ['tenantName']}
+    ];
+  }
+
+  static getDataKeys(): string[][]{
+    const headers = MembersTableService.getHeaders();
+    return headers.map((header)=> header.key).concat([['instanceId']],[['serviceInstanceId']]);
+  }
+
+  /*************************************************************************************
+   calculate the number of selected vnf members - include not visible and visible rows
+   @allMemberStatusMap: current vnf member status
+   *************************************************************************************/
+  calculateSelectedVnfMembers() : number {
+    const flatObject = _.values(this.allMemberStatusMap);
+    return  _.filter(flatObject, (item) => { if (item.isSelected) return item }).length;
+  }
+
+  /************************************************
+   calculate the number of display vnf members
+   @allMemberStatusMap: current vnf member status
+   ************************************************/
+  calculateNotHideVnfMembers() : number {
+    return this.filteredMembers.length;
+  }
+
+  /************************************************
+   calculate the number of display vnf members
+   @allMemberStatusMap: current vnf member status
+   ************************************************/
+  calculateSelectedAndNotHide() : number {
+    return  _.filter(this.filteredMembers, (item) => { if ( this.allMemberStatusMap[item.instanceId].isSelected) return item }).length;
+  }
+
+
+}
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.html b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.html
new file mode 100644
index 0000000..899bc98
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.html
@@ -0,0 +1,35 @@
+<div class="modal-search-member-content">
+  <div class="header">
+    <vid-svg-icon
+      [attr.data-tests-id]="'cancelBtn'"
+      (click)="closeDialog()"
+      class="navigation-arrow-back"
+      [mode]="'primary'"
+      [size]="'large'"
+      [name]="'navigation-arrow-back'"
+      [clickable]="true"
+      [fill]="'#FFFFFF'"
+      [widthViewBox]="'24'"
+      [heightViewBox]="'24'">
+    </vid-svg-icon>
+
+    <span class="title">
+      {{title}}
+    </span>
+    <button type="submit" data-tests-id="setMembersBtn" [disabled]="disableSetMembers" (click)="setMembers()" class="sdc-button sdc-button__primary">SET MEMBERS</button>
+  </div>
+  <div class="content-wrapper">
+    <div class="sidebar-left">
+      <div class="search-criteria-wrapper">
+        <div class="search-criteria-title">SEARCH CRITERIA</div>
+         <div class="search-item" *ngFor="let searchFieldItem of searchFields">
+           <span class="label-item">{{searchFieldItem.title}}</span>
+           <span attr.data-tests-id="{{searchFieldItem.dataTestId}}" class="text-item">{{searchFieldItem.value}}</span>
+         </div>
+      </div>
+    </div>
+    <div class="sidebar-right">
+      <app-members-table [data]="membersData" [description]="description" (selectedMembersAmountChange)="selectedMembersAmountChange($event)"></app-members-table>
+    </div>
+  </div>
+</div>
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.scss b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.scss
new file mode 100644
index 0000000..d496539
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.scss
@@ -0,0 +1,89 @@
+.modal-search-member-content {
+  height: 100vh;
+  width: 100vw;
+  position: relative;
+  background: white;
+  .header {
+    height: 60px;
+    font-family: OpenSans-Regular;
+    display: -webkit-box;
+    display: flex;
+    font-size: 14px;
+    box-shadow: 2px 2px 6px #D2D2D2;
+    color: white;
+    background: #009fdb;
+    z-index: 1;
+    position: relative;
+    .navigation-arrow-back {
+      border-right: 1px solid #1eb9f3;
+      width: 60px;
+      height: 60px;
+      cursor: pointer;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+    }
+    .title {
+      font-size: 18px;
+      line-height: 60px;
+      margin-left: 20px;
+    }
+    button {
+      width: 125px;
+      font-family: OpenSans-Regular;
+      font-size: 14px;
+      margin-left: auto;
+      margin-right: 20px;
+      margin-top: 12px;
+      border: 1px solid white;
+      &:disabled {
+        opacity: 0.5;
+        background: none;
+      }
+    }
+  }
+
+  .content-wrapper {
+    display: flex;
+
+    .sidebar-left {
+      flex-basis: 285px;
+      border-right: 1px solid #D2D2D2;
+      height: calc(100vh - 60px);
+
+      .search-criteria-wrapper{
+
+        .search-criteria-title{
+          font-family: OpenSans-SemiBold;
+          font-size: 14px;
+          color: #191919;
+          border-bottom: 1px solid #D2D2D2;
+          line-height: 50px;
+          padding-left: 30px;
+        }
+        .search-item{
+          color: #191919;
+          display: flex;
+          flex-direction: column;
+          margin: 25px 30px;
+          .label-item {
+            font-family: OpenSans-SemiBold;
+            font-size: 12px;
+          }
+          .text-item{
+            font-family: OpenSans-Regular;
+            font-size: 14px;
+            color: #5a5a5a;
+            word-break: break-all;
+          }
+
+        }
+      }
+    }
+
+    .sidebar-right {
+      flex: 1;
+      margin: 80px 50px;
+    }
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.ts b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.ts
new file mode 100644
index 0000000..9c65d22
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/searchMembersModal/search-members-modal.component.ts
@@ -0,0 +1,82 @@
+import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core';
+import {DialogComponent, DialogService} from "ng2-bootstrap-modal";
+import {IframeService} from "../../utils/iframe.service";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {VnfMember} from "../../models/VnfMember";
+import {VnfGroupModel} from "../../models/vnfGroupModel";
+import {MembersTableService} from "./members-table/members-table.service";
+import {VnfGroupInstance} from "../../models/vnfGroupInstance";
+
+
+export interface PopupModel {
+  title: string;
+  serviceModelId : string;
+  searchFields: ISearchField[];
+  description : string;
+  subscriberId: string,
+  serviceType: string,
+  node: VnfGroupInstance,
+  vnfGroupModel: VnfGroupModel;
+
+}
+
+export interface ISearchField {
+  title: string;
+  value: any;
+  dataTestId: string;
+}
+
+@Component({
+  selector : 'search-members-modal',
+  templateUrl : 'search-members-modal.component.html',
+  styleUrls : ['search-members-modal.component.scss']
+})
+
+export class SearchMembersModalComponent extends DialogComponent<PopupModel, boolean> implements OnInit, OnDestroy {
+  title: string;
+  serviceModelId : string;
+  parentElementClassName = 'content';
+  membersData: VnfMember[];
+  description : string;
+  searchFields: ISearchField[];
+  vnfGroupModel: VnfGroupModel;
+  subscriberId: string;
+  serviceType: string;
+  node: VnfGroupInstance;
+  disableSetMembers: boolean = true;
+    constructor(dialogService:  DialogService ,
+              private _iframeService : IframeService,
+              private _aaiService : AaiService,
+              private _membersTableService: MembersTableService){
+    super(dialogService);
+
+  }
+  @ViewChild('MembersTableComponent') membersTable;
+
+   ngOnInit() : void{
+    this._aaiService.getOptionalGroupMembers(this.serviceModelId, this.subscriberId, this.serviceType, (Object.values(this.vnfGroupModel.members))[0].sourceModelInvariant, this.vnfGroupModel.properties.type, this.vnfGroupModel.properties.role)
+      .subscribe((result: VnfMember[])=>{
+        this.membersData = this._membersTableService.filterUsedVnfMembers(this.serviceModelId, result);
+      });
+    };
+
+
+  closeDialog() : void{
+    this._iframeService.removeClassCloseModal(this.parentElementClassName);
+    this.dialogService.removeDialog(this);
+    setTimeout(() => {
+      window.parent.postMessage("closeIframe", "*");
+    }, 15);
+  }
+  selectedMembersAmountChange(selectedMembersAmount: number) : void {
+    this.disableSetMembers = selectedMembersAmount==0;
+  }
+
+
+  setMembers() : void {
+    this._membersTableService.setMembers({serviceId : this.serviceModelId, vnfGroupStoreKey : this.node.vnfGroupStoreKey});
+    this.closeDialog();
+  }
+}
+
+
diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html
index cb11fee..238f769 100644
--- a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html
+++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.html
@@ -1,2 +1,6 @@
-<div *ngIf="show"
-     class="spinner"></div>
+<sdc-loader name= "global"
+            #globalLoader
+            [global] = "global"
+            [size]="size"
+            [(active)] = "show"></sdc-loader>
+
diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts
index 531ee8c..57f7b00 100644
--- a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts
+++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.spec.ts
@@ -1,42 +1,50 @@
-import {async, ComponentFixture, TestBed} from '@angular/core/testing';
+import {ComponentFixture, TestBed} from '@angular/core/testing';
 import {HttpClientTestingModule} from '@angular/common/http/testing';
-import { SpinnerComponent } from './spinner.component';
+import {SpinnerComponent, SpinnerInfo} from './spinner.component';
+import {CUSTOM_ELEMENTS_SCHEMA} from "@angular/core";
 
 describe('Spinner component', () => {
   let component: SpinnerComponent;
   let fixture: ComponentFixture<SpinnerComponent>;
 
-  beforeEach(async(() => {
+  beforeAll(done => (async () => {
     TestBed.configureTestingModule({
       imports: [HttpClientTestingModule],
       providers: [],
-      declarations: [SpinnerComponent ]
-    })
-      .compileComponents();
-  }));
+      declarations: [SpinnerComponent],
+      schemas: [ CUSTOM_ELEMENTS_SCHEMA ]
+    });
+    await TestBed.compileComponents();
 
-  beforeEach(() => {
     fixture = TestBed.createComponent(SpinnerComponent);
     component = fixture.componentInstance;
     fixture.detectChanges();
-  });
 
-  it('component should be defined', () => {
+  })().then(done).catch(done.fail));
+
+
+
+  test('component should be defined', () => {
     expect(component).toBeDefined();
   });
 
-
-  it('component constructor should subscribe of showSpinner event with true', ()=> {
-    SpinnerComponent.showSpinner.next(true);
+  test('component constructor should subscribe of showSpinner event with true', ()=> {
+    let spinnerInfo : SpinnerInfo = new SpinnerInfo(true, 'someUrl', 'json');
+    SpinnerComponent.showSpinner.next(spinnerInfo);
     expect(component.show).toBeTruthy();
   });
 
-  it('component constructor should subscribe of showSpinner event with false', ()=> {
-    SpinnerComponent.showSpinner.next(false);
+  test('component constructor should subscribe of showSpinner event with true and then to be false', ()=> {
+    let spinnerInfo : SpinnerInfo = new SpinnerInfo(true, 'someUrl', 'json');
+    SpinnerComponent.showSpinner.next(spinnerInfo);
+    spinnerInfo  = new SpinnerInfo(false, 'someUrl', 'json');
+    SpinnerComponent.showSpinner.next(spinnerInfo);
     expect(component.show).toBeFalsy();
   });
 
-
-
-
+  test('component constructor should subscribe of showSpinner event with false', ()=> {
+    let spinnerInfo : SpinnerInfo = new SpinnerInfo(false, 'someUrl', 'json');
+    SpinnerComponent.showSpinner.next(spinnerInfo);
+    expect(component.show).toBeFalsy();
+  });
 });
diff --git a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts
index 0ce5d20..94a0e1c 100644
--- a/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts
+++ b/vid-webpack-master/src/app/shared/components/spinner/spinner.component.ts
@@ -1,18 +1,50 @@
-import { Component, Input } from '@angular/core';
-import { Subject } from 'rxjs/Subject';
+import {Component} from '@angular/core';
+import {Subject} from 'rxjs/Subject';
+import * as _ from 'lodash';
 
 @Component({
   selector : 'spinner-component',
-  templateUrl : './spinner.component.html',
-  styleUrls : ['./spinner.component.scss']
+  templateUrl: './spinner.component.html',
+  styleUrls : ['./spinner.component.scss'],
+  providers : []
+
 })
-export class SpinnerComponent {
-  show : boolean = false;
-  static showSpinner: Subject<boolean> = new Subject<boolean>();
+export class SpinnerComponent{
+  show : boolean;
+  size = "large";
+  global = true;
+
+  requestMap = {};
+
+  static showSpinner: Subject<SpinnerInfo> = new Subject<SpinnerInfo>();
 
   constructor(){
-    SpinnerComponent.showSpinner.subscribe((status) => {
-      this.show = status;
+    SpinnerComponent.showSpinner.subscribe((spinnerInfo) => {
+      let status = spinnerInfo['status'];
+      let requestType = spinnerInfo['requestType'];
+      let requestUrl = spinnerInfo['requestUrl'];
+
+      if(status && requestType === 'json'){
+        this.requestMap[requestUrl] = true;
+      }else {
+        delete this.requestMap[requestUrl]
+      }
+      console.log(this.requestMap);
+      this.show = !_.isEmpty(this.requestMap) && this.requestMap !== undefined;
+
     })
   }
 }
+
+
+export class SpinnerInfo {
+  status : boolean;
+  requestUrl : string;
+  requestType : string;
+
+  constructor(status : boolean, requestUrl : string, requestType : string){
+    this.status = status;
+    this.requestUrl = requestUrl;
+    this.requestType = requestType;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/svg/svg-component.ts b/vid-webpack-master/src/app/shared/components/svg/svg-component.ts
new file mode 100644
index 0000000..2e46424
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/components/svg/svg-component.ts
@@ -0,0 +1,47 @@
+import {
+  AfterViewChecked,
+  Component,
+  ElementRef,
+  EventEmitter,
+  Input,
+  Output
+} from "@angular/core";
+import * as _ from 'lodash';
+
+@Component({
+  selector : 'vid-svg-icon',
+  template: `    
+      <svg-icon
+        [mode]="mode"
+        [size]="size"
+        [name]="name"
+        [testId]="testId"
+        [clickable]="clickable">
+    </svg-icon>
+  `,
+
+
+})
+export class SvgComponent implements AfterViewChecked{
+  @Input() mode : string = 'primary';
+  @Input() size : string = 'large';
+  @Input() testId : string = null;
+  @Input() name : string = null;
+  @Input() clickable : boolean = false;
+  @Input() fill : string ;
+  @Input() widthViewBox: string = null;
+  @Input() heightViewBox: string = null;
+
+  constructor(private elRef: ElementRef) {}
+
+  ngAfterViewChecked(): void {
+    if(!_.isNil(this.fill)){
+      this.elRef.nativeElement.children[0].children[0].children[0].style.fill = this.fill;
+    }
+
+    if(this.widthViewBox && this.heightViewBox){
+      this.elRef.nativeElement.children[0].children[0].children[0].setAttribute('viewBox', "1 1 " + this.widthViewBox + " " + this.heightViewBox)
+    }
+
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts b/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts
deleted file mode 100644
index ec9f3f7..0000000
--- a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.spec.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-import { ReflectiveInjector } from '@angular/core';
-import { NumbersLettersUnderscoreValidator } from './numbersLettersUnderscore.validator';
-
-describe('Numbers letters underscore validator', () => {
-  let injector;
-  let service: NumbersLettersUnderscoreValidator;
-
-  beforeEach(() => {
-
-    let injector = ReflectiveInjector.resolveAndCreate([
-      NumbersLettersUnderscoreValidator
-    ]);
-
-    service = injector.get(NumbersLettersUnderscoreValidator);
-  });
-
-
-  describe('#valid', () => {
-    it("'legal' should return null", ()=> {
-      let legalVal: string = "legal";
-      let result = NumbersLettersUnderscoreValidator.valid(legalVal);
-      expect(result).toBeNull();
-    });
-
-    it("'illegal' should return object with invalidNumberLettersUnderscore true", ()=> {
-      let illegalVal: string = "illegal-Val";
-      let result = NumbersLettersUnderscoreValidator.valid(illegalVal);
-      expect(result.invalidNumberLettersUnderscore).toBeTruthy();
-    });
-
-    it("'null' should return null", ()=> {
-      let nullVal: string = null
-      let result = NumbersLettersUnderscoreValidator.valid(nullVal);
-      expect(result).toBeNull();
-    });
-
-
-  });
-});
diff --git a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts b/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts
deleted file mode 100644
index 418bdfc..0000000
--- a/vid-webpack-master/src/app/shared/components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Injectable } from '@angular/core';
-import { isNullOrUndefined, isString } from 'util';
-
-@Injectable()
-export class NumbersLettersUnderscoreValidator {
-  static valid(control: any) {
-    let reg =  /^[a-zA-Z0-9_]*$/;
-
-    if(isNullOrUndefined(control)) return null;
-    let val = isString(control) ? control : control.value;
-    if (val === null) {
-      return {'invalidNumberLettersUnderscore': true};
-    }
-    if (reg.test(val)) {
-      return null;
-    } else {
-      return {'invalidNumberLettersUnderscore': true};
-    }
-  }
-}
diff --git a/vid-webpack-master/src/app/shared/directives/clickOutside/clickOutside.directive.spec.ts b/vid-webpack-master/src/app/shared/directives/clickOutside/clickOutside.directive.spec.ts
new file mode 100644
index 0000000..8edfb87
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/directives/clickOutside/clickOutside.directive.spec.ts
@@ -0,0 +1,52 @@
+import {ComponentFixture, TestBed} from '@angular/core/testing';
+import {Component, DebugElement} from "@angular/core";
+import {By} from "@angular/platform-browser";
+import {ClickOutsideDirective} from "./clickOutside.directive";
+
+@Component({
+  template:
+      `<div id="innerDiv" [clickOutside] [classElements]="['outsideDivShouldNotTrigger']"></div>
+       <div class="outsideDivShouldTrigger"></div>
+       <div class="outsideDivShouldNotTrigger"></div>`
+})
+class TestHoverFocusComponent {
+}
+
+
+describe('Click outside Directive', () => {
+  let component: TestHoverFocusComponent;
+  let fixture: ComponentFixture<TestHoverFocusComponent>;
+  let directiveInstance : ClickOutsideDirective;
+  let outsideDivShouldNotTrigger: DebugElement;
+  let outsideDivShouldTrigger: DebugElement;
+  let innerDiv: DebugElement;
+
+  beforeEach(() => {
+    TestBed.configureTestingModule({
+      declarations: [TestHoverFocusComponent, ClickOutsideDirective]
+    });
+    fixture = TestBed.createComponent(TestHoverFocusComponent);
+    component = fixture.componentInstance;
+    outsideDivShouldNotTrigger = fixture.debugElement.query(By.css('.outsideDivShouldNotTrigger'));
+    outsideDivShouldTrigger = fixture.debugElement.query(By.css('.outsideDivShouldTrigger'));
+    innerDiv = fixture.debugElement.query(By.css('#innerDiv'));
+    directiveInstance = innerDiv.injector.get(ClickOutsideDirective);
+  });
+
+  test('directive should be defined', () => {
+    expect(directiveInstance).toBeDefined();
+  });
+
+  test(`should have list of class's`, () => {
+    fixture.detectChanges();
+    expect(directiveInstance.classElements).toEqual(['outsideDivShouldNotTrigger']);
+  });
+
+  test('should not trigger output on click outside', () => {
+    fixture.detectChanges();
+    spyOn(directiveInstance.clickOutsideTrigger, 'next');
+    outsideDivShouldNotTrigger.nativeElement.click();
+    expect(directiveInstance.clickOutsideTrigger.next).toHaveBeenCalledTimes(0);
+  });
+
+});
diff --git a/vid-webpack-master/src/app/shared/directives/clickOutside/clickOutside.directive.ts b/vid-webpack-master/src/app/shared/directives/clickOutside/clickOutside.directive.ts
new file mode 100644
index 0000000..1a43a3e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/directives/clickOutside/clickOutside.directive.ts
@@ -0,0 +1,41 @@
+import {Directive, EventEmitter, HostListener, Input, Output} from "@angular/core";
+import * as _ from 'lodash';
+/**********************************************************************
+  Click outside directive
+  can get one list of class's or id's (Not together)
+  if all elements are not the target then clickOutside is trigger
+ *******************************************************************/
+@Directive({
+  selector : '[clickOutside]'
+})
+export class ClickOutsideDirective {
+  @Input() clickOutside : string;
+  @Input() classElements : string[] = [];
+  @Input() idElements : string[] = [];
+  @Output() public clickOutsideTrigger: EventEmitter<any> = new EventEmitter();
+
+  @HostListener('document:click', ['$event.target']) public onClick(targetElement) {
+    if(!_.isNil(this.classElements)){this.hostListener(targetElement, this.classElements, 'getElementsByClassName');}
+    if(!_.isNil(this.idElements)){this.hostListener(targetElement, this.idElements, 'getElementById');}
+  }
+
+
+/********************************************************************************
+ hostListener - iterate over all elements and check if the element is the target.
+ @param targetElement - the target element
+ @param elements - elements to check
+ @param documentMethod - method to find the element in dom
+ ********************************************************************************/
+hostListener(targetElement, elements, documentMethod): void{
+  let result = true;
+for(let i = 0 ; i < elements.length; i++){
+  const classElements = document[documentMethod](elements[i]);
+  for (let j = 0 ; j < classElements.length; j++){
+    const clickedInside = document[documentMethod](elements[i])[j].contains(targetElement);
+    if(clickedInside) return;
+    result = result && clickedInside;
+  }
+}
+if (!result) {this.clickOutsideTrigger.emit(null); }
+}
+}
diff --git a/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.spec.ts b/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.spec.ts
index 846ff70..ec5bfd8 100644
--- a/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.spec.ts
+++ b/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.spec.ts
@@ -1,19 +1,18 @@
-import {TestBed, ComponentFixture} from '@angular/core/testing';
+import {ComponentFixture, TestBed} from '@angular/core/testing';
 import {Component, DebugElement} from "@angular/core";
 import {By} from "@angular/platform-browser";
-import { InputPreventionPatternDirective } from './inputPreventionPattern.directive';
+import {InputPreventionPatternDirective} from './inputPreventionPattern.directive';
 
 @Component({
-  template: `<input 
+  template: `<input
     patternInput
-    pattern="^[a-zA-Z0-9_]*$">`
+    pattern="^[a-zA-Z0-9._-]*$">`
 })
 class TestHoverFocusComponent {
 }
 
 
 describe('InputPrevention Pattern Directive', () => {
-
   let component: TestHoverFocusComponent;
   let fixture: ComponentFixture<TestHoverFocusComponent>;
   let directiveInstance : InputPreventionPatternDirective;
@@ -29,37 +28,54 @@
     directiveInstance = inputEl.injector.get(InputPreventionPatternDirective);
   });
 
-  it('directive should be defined', () => {
+  test('directive should be defined', () => {
     expect(directiveInstance).toBeDefined();
   });
 
-  it('pattern exists', () => {
-    expect(inputEl.nativeElement.pattern).toEqual('^[a-zA-Z0-9_]*$');
+  test('pattern exists', () => {
+    expect(inputEl.nativeElement.pattern).toEqual('^[a-zA-Z0-9._-]*$');
   });
 
-  it('kepress legal input', () => {
+  test('kepress legal input', () => {
     fixture.detectChanges();
     inputEl.nativeElement.value = "legalInput";
     expect(new RegExp(inputEl.nativeElement.pattern).test(inputEl.nativeElement.value)).toBeTruthy();
   });
 
-  it('kepress illegal input', () => {
+  test('kepress illegal input', () => {
     inputEl.triggerEventHandler('kepress', " ");
     fixture.detectChanges();
     expect(inputEl.nativeElement.value).toBe('');
   });
 
-  it('kepress event legal input should return event', () => {
-    const event = <any>{ key: 'A' };
+
+  test('kepress event legal input should return event', () => {
+    const event = <any>{ key: 'A'};
     inputEl.nativeElement.value = "legalInput";
     let result = directiveInstance.onKeypress(event);
     expect(result).toBe(event);
   });
 
-  it('kepress event illegal input should prevent default', () => {
-    const event = <any>{key: '-', preventDefault : function () {} };
-    spyOn(event, 'preventDefault');
-    inputEl.nativeElement.value = "-";
+
+  test('kepress event legal(-) input should return event', () => {
+    const event = <any>{ key: '-'};
+    inputEl.nativeElement.value = "legalInput";
+    let result = directiveInstance.onKeypress(event);
+    expect(result).toBe(event);
+  });
+
+  test('kepress event legal (.) input should return event', () => {
+    const event = <any>{ key: '.'};
+    inputEl.nativeElement.value = "legalInput";
+    let result = directiveInstance.onKeypress(event);
+    expect(result).toBe(event);
+  });
+
+
+  test('kepress event illegal input should prevent default', () => {
+    const event = <any>{key: '$', preventDefault : function () {} };
+    jest.spyOn(event, 'preventDefault');
+    inputEl.nativeElement.value = "$";
     let result = directiveInstance.onKeypress(event);
     expect(event.preventDefault).toHaveBeenCalled();
   });
diff --git a/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.ts b/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.ts
index dada09b..d00c525 100644
--- a/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.ts
+++ b/vid-webpack-master/src/app/shared/directives/inputPrevention/inputPreventionPattern.directive.ts
@@ -1,18 +1,10 @@
-import {Directive, ElementRef} from '@angular/core';
+import {Directive, ElementRef, HostBinding, HostListener} from '@angular/core';
 
 @Directive({
-  selector: '[patternInput]',
-  host: {
-    '(keypress)': 'onKeypress($event)'
-  }
+  selector: '[patternInput]'
 })
 export class InputPreventionPatternDirective{
-  inputElement : ElementRef;
-  constructor(el: ElementRef) {
-    this.inputElement = el;
-  }
-
-  onKeypress(event: KeyboardEvent) {
+  @HostListener('keypress', ['$event']) onKeypress(event: KeyboardEvent) {
     const pattern = new RegExp(this.inputElement.nativeElement.pattern);
     if(pattern){
       if(!pattern.test(event['key'])){
@@ -21,4 +13,9 @@
     }
     return event;
   }
+
+  inputElement : ElementRef;
+  constructor(el: ElementRef) {
+    this.inputElement = el;
+  }
 }
diff --git a/vid-webpack-master/src/app/shared/directives/svg/svg.directive.ts b/vid-webpack-master/src/app/shared/directives/svg/svg.directive.ts
deleted file mode 100644
index e4dc55a..0000000
--- a/vid-webpack-master/src/app/shared/directives/svg/svg.directive.ts
+++ /dev/null
@@ -1,34 +0,0 @@
-import { AfterContentChecked, AfterViewInit, Directive, ElementRef, Input } from '@angular/core';
-import { isNullOrUndefined } from 'util';
-
-
-/*
-          Temporary
-  Changing svg color and size.
-  color changing according to fill attribute
-  size according to viewBox
-*/
-@Directive({
-  selector: '[svg-directive]'
-})
-export class SvgDirective implements AfterContentChecked {
-  @Input('fill') fill: string = "black";
-  @Input('widthViewBox') widthViewBox: string = null;
-  @Input('heightViewBox') heightViewBox: string = null;
-
-  constructor(private elRef: ElementRef) {}
-  ngAfterContentChecked(): void {
-    if(this.elRef !== undefined && this.elRef.nativeElement.children !== undefined && this.elRef.nativeElement.children[0] !== undefined){
-      this.elRef.nativeElement.children[0].children[1].children[0].style.fill = this.fill;
-      if(this.elRef.nativeElement.children[0].children[1].children.length > 1){
-        this.elRef.nativeElement.children[0].children[1].children[1].style.fill = this.fill;
-        this.elRef.nativeElement.children[0].children[1].children[2].children[0].style.fill = this.fill;
-      }
-
-      if(this.widthViewBox && this.heightViewBox){
-        this.elRef.nativeElement.firstChild.setAttribute('viewBox', "1 1 " + this.widthViewBox + " " + this.heightViewBox)
-      }
-
-    }
-  }
-}
diff --git a/vid-webpack-master/src/app/shared/index.ts b/vid-webpack-master/src/app/shared/index.ts
deleted file mode 100644
index 68fada6..0000000
--- a/vid-webpack-master/src/app/shared/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export * from './api.service';
diff --git a/vid-webpack-master/src/app/shared/models/ServiceNodeTypes.ts b/vid-webpack-master/src/app/shared/models/ServiceNodeTypes.ts
index f72b32d..945c69b 100644
--- a/vid-webpack-master/src/app/shared/models/ServiceNodeTypes.ts
+++ b/vid-webpack-master/src/app/shared/models/ServiceNodeTypes.ts
@@ -2,7 +2,9 @@
   VF = "VF",
   VFmodule = "VFmodule",
   Network = "Network",
-  Configuration = "Configuration"
+  VL = 'VL',
+  Configuration = "Configuration",
+  VnfGroup = 'VnfGroup'
 }
 
 
diff --git a/vid-webpack-master/src/app/shared/models/VnfMember.ts b/vid-webpack-master/src/app/shared/models/VnfMember.ts
new file mode 100644
index 0000000..392f8dd
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/VnfMember.ts
@@ -0,0 +1,11 @@
+import {Level1Instance} from "./level1Instance";
+
+export class VnfMember extends Level1Instance{
+  serviceInstanceName: string;
+  serviceInstanceId: string;
+  tenantName: string;
+  constructor(){
+    super();
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/checkboxFormControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/checkboxFormControl.model.ts
new file mode 100644
index 0000000..f505b56
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/checkboxFormControl.model.ts
@@ -0,0 +1,11 @@
+import {FormControlModel} from "./formControl.model";
+import {FormControlType} from "./formControlTypes.enum";
+
+export class CheckboxFormControl extends FormControlModel{
+
+  constructor(data) {
+    super(data);
+    this.type = FormControlType.CHECKBOX;
+    this.validations = [];
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/dropdownFormControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/dropdownFormControl.model.ts
new file mode 100644
index 0000000..ba3e860
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/dropdownFormControl.model.ts
@@ -0,0 +1,29 @@
+import {FormControlModel} from "./formControl.model";
+import {FormGroup} from "@angular/forms";
+import {FormControlType} from "./formControlTypes.enum";
+import {Observable} from "rxjs";
+
+export class DropdownFormControl extends FormControlModel{
+  options$ : Observable<any[]> = null;
+  args : string[];
+  onInit: (data : DropdownFormControl, form: FormGroup) => Observable<any>;
+  selectedField : string;
+  onInitSelectedField : string[]; // key that should select from API response.
+  ngValue : string;
+  name : string;
+  hasEmptyOptions : boolean; // get empty result from API or REDUX.
+
+
+  constructor(data) {
+    super(data);
+    this.type = FormControlType.DROPDOWN;
+    this.options$ = data.options ? data.options$ : null;
+    this.onInit = data.onInit;
+    this.selectedField = data.selectedField;
+    this.onInitSelectedField = data.onInitSelectedField ? data.onInitSelectedField : null;
+    this.ngValue = data.selectedField ? data.selectedField : 'id';
+    this.name = data.name;
+    this.hasEmptyOptions = false;
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/fileFormControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/fileFormControl.model.ts
new file mode 100644
index 0000000..7803fab
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/fileFormControl.model.ts
@@ -0,0 +1,18 @@
+import {CustomValidatorOptions, FormControlModel, ValidatorModel} from "./formControl.model";
+import {FormControlType} from "./formControlTypes.enum";
+import {InputFormControl} from "./inputFormControl.model";
+
+export class FileFormControl extends FormControlModel{
+  acceptedExtentions : String;
+  selectedFile : String;
+  onDelete? :Function;
+  hiddenFile: InputFormControl[];
+  constructor(data) {
+    super(data);
+    this.type = FormControlType.FILE;
+    this.selectedFile = data.selectedFile ? data.selectedFile : data.placeHolder;
+    this.acceptedExtentions = data.acceptedExtentions ? data.acceptedExtentions : '';
+    this.onDelete = data.onDelete ? data.onDelete : function () {};
+    this.hiddenFile = data.hiddenFile;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/formControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/formControl.model.ts
new file mode 100644
index 0000000..2411654
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/formControl.model.ts
@@ -0,0 +1,121 @@
+import {FormGroup, ValidatorFn, Validators} from "@angular/forms";
+import {Subject} from "rxjs/Subject";
+import {FormControlType} from "./formControlTypes.enum";
+import {CustomValidators} from "../../validators/uniqueName/uniqueName.validator";
+import * as _ from 'lodash';
+
+export class  FormControlModel {
+  formGroup : FormGroup;
+  controlName : string;
+  type : FormControlType;
+  displayName : string;
+  dataTestId : string;
+  placeHolder? : string;
+  tooltip? :string;
+  isDisabled? : boolean;
+  validations? : ValidatorModel[];
+  isVisible? : boolean;
+  value? : any;
+  originalValue?: any;
+  minLength?: number;
+  maxLength?: number;
+  onChange? : Function;
+  onBlur? : Function;
+  preventionsAttribute : AttributeMap[] = [];
+  waitFor? : Subject<string>[] = [];
+  hasErrors : () =>  string[];
+
+
+  constructor(data: any){
+    this.type = data.type;
+    this.displayName = data.displayName;
+    this.dataTestId = data.dataTestId;
+    this.placeHolder = data.placeHolder;
+    this.tooltip = data.tooltip;
+    this.isDisabled = data.isDisabled || false;
+    this.validations = data.validations || [];
+    this.isVisible = !_.isNil(data.isVisible)  ? data.isVisible : true;
+    this.value = data.value;
+    this.originalValue = data.value;
+    this.controlName = data.controlName;
+    this.minLength = data.minLength;
+    this.maxLength = data.maxLength;
+    this.preventionsAttribute = data.preventionsAttribute || [];
+    this.onBlur = function(){};
+    this.onChange = data.onChange ? data.onChange: function () {}
+  }
+
+  isRequired() : boolean {
+    for(let validtorsModel of this.validations){
+      let required = 'required';
+      if(validtorsModel.validatorName.toString() === required){
+        return true;
+      }
+    }
+    return false;
+  }
+
+  getPreventionAttribute() : AttributeMap[] {
+    let result : AttributeMap[] = [new AttributeMap('data-tests-id', this.dataTestId)];
+    return this.preventionsAttribute.concat(result);
+  }
+}
+
+
+
+export class ValidatorModel {
+  validator : ValidatorFn;
+  validatorArg? : any;
+  validatorName : ValidatorOptions | CustomValidatorOptions;
+  errorMsg : string;
+
+  constructor(validatorName : ValidatorOptions | CustomValidatorOptions, errorMsg : string, validatorArg: any = null){
+    this.validatorName = validatorName;
+    this.validator = this.setValidator(validatorName, validatorArg);
+    this.errorMsg = errorMsg;
+    this.validatorArg = validatorArg;
+  }
+
+
+  setValidator(validatorName : ValidatorOptions | CustomValidatorOptions, validatorArg: any = null) : ValidatorFn {
+    if(validatorName in ValidatorOptions){
+      return validatorArg ? Validators[validatorName](validatorArg) : Validators[validatorName];
+    }else {
+      return validatorArg ? CustomValidators[CustomValidatorOptions[validatorName]].apply(this, validatorArg) : CustomValidators[CustomValidatorOptions[validatorName]];
+    }
+  }
+}
+
+
+
+export enum ValidatorOptions {
+  required = 'required',
+  minLength = 'minLength',
+  maxLength = 'maxLength',
+  pattern = 'pattern',
+  nullValidator = 'nullValidator'
+}
+
+
+
+export enum CustomValidatorOptions {
+  uniqueInstanceNameValidator = 'uniqueInstanceNameValidator',
+  emptyDropdownOptions = 'emptyDropdownOptions',
+  isValidJson = 'isValidJson',
+  isFileTooBig = 'isFileTooBig',
+  isStringContainTags = 'isStringContainTags'
+}
+
+export class AttributeMap {
+  key : string;
+  value : string;
+
+  constructor(key : string, value? : string){
+    this.key = key;
+    this.value = value ? value : '';
+  }
+}
+
+
+
+
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/formControlTypes.enum.ts b/vid-webpack-master/src/app/shared/models/formControlModels/formControlTypes.enum.ts
new file mode 100644
index 0000000..eba1b08
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/formControlTypes.enum.ts
@@ -0,0 +1,8 @@
+export enum FormControlType{
+  MULTI_SELECT = 'MULTI_SELECT',
+  FILE = 'FILE',
+  NUMBER = 'NUMBER',
+  INPUT = 'INPUT',
+  DROPDOWN = 'DROPDOWN',
+  CHECKBOX = 'CHECKBOX'
+}
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/formPopupDetails.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/formPopupDetails.model.ts
new file mode 100644
index 0000000..8ea3d2d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/formPopupDetails.model.ts
@@ -0,0 +1,55 @@
+import {FormControlModel} from "./formControl.model";
+import {ModelInformationItem} from "../../components/model-information/model-information.component";
+import {FormGroup} from "@angular/forms";
+
+export class FormPopupDetails {
+  popupTypeName: PopupType;
+  that : any;
+  UUIDData : Object = {}; // TODO uuid tree
+  title: string;
+  leftSubTitle: string;
+  rightSubTitle: string;
+  formControlList: FormControlModel[];
+  dynamicInputsControlList: FormControlModel[];
+  modelInformationItems: ModelInformationItem[];
+  onSubmit : (that : any, form: FormGroup , ...args) =>  void;
+  onCancel : (that : any, form: FormGroup) => void;
+
+  constructor(that : any,
+              popupTypeName : PopupType ,
+              UUIDData : Object,
+              title : string,
+              leftSubTitle : string,
+              rightSubTitle : string,
+              formControlList : FormControlModel[],
+              dynamicInputsControlList : FormControlModel[],
+              modelInformationItems : ModelInformationItem[],
+              onSubmit : (that : any, form : FormGroup, ...args) =>  void,
+              onCancel : (that : any, form : FormGroup) => void){
+    this.title = title;
+    this.leftSubTitle = leftSubTitle;
+    this.rightSubTitle = rightSubTitle;
+    this.formControlList = formControlList;
+    this.dynamicInputsControlList = dynamicInputsControlList;
+    this.modelInformationItems = modelInformationItems;
+    this.onSubmit = onSubmit;
+    this.onCancel = onCancel;
+    this.popupTypeName = popupTypeName;
+    this.UUIDData = UUIDData;
+    this.that = that;
+  }
+}
+
+
+
+export enum PopupType {
+  SERVICE_MACRO = 'service macro',
+  SERVICE_A_LA_CART = 'service a-la-cart',
+  SERVICE = 'service',
+  VNF_MACRO  ='vnf macro',
+  VNF_A_LA_CARTE = 'vnf a-la-carte',
+  VFMODULE = 'vfModule',
+  NETWORK_MACRO = 'network_macro',
+  VNF_GROUP = 'vnfGroup'
+}
+
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/inputFormControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/inputFormControl.model.ts
new file mode 100644
index 0000000..99210af
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/inputFormControl.model.ts
@@ -0,0 +1,19 @@
+import {FormControlModel} from "./formControl.model";
+import {FormControlType} from "./formControlTypes.enum";
+
+export class InputFormControl extends FormControlModel {
+  onBlur ?: Function;
+  onKeypress?: Function;
+  inputType: string = 'text';
+  pattern: string;
+  preventions: string[];
+
+  constructor(data) {
+    super(data);
+    this.type = FormControlType.INPUT;
+    this.pattern = data.pattern;
+    this.onKeypress = data.onKeypress ? data.onKeypress : ()=>{}
+    this.onBlur = data.onBlur ? data.onBlur : ()=>{}
+  }
+}
+
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/multiselectFormControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/multiselectFormControl.model.ts
new file mode 100644
index 0000000..b137451
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/multiselectFormControl.model.ts
@@ -0,0 +1,27 @@
+import {FormControlModel} from "./formControl.model";
+import {Observable} from "rxjs";
+import {FormGroup} from "@angular/forms";
+import {FormControlType} from "./formControlTypes.enum";
+
+export class MultiselectFormControl extends FormControlModel{
+  options$ : Observable<any[]>;
+  args : string[];
+  onInit: (data : MultiselectFormControl, form: FormGroup) => Observable<any>;
+  selectedItems : string;
+  onInitSelectedItems : string[];
+  ngValue : string;
+  settings: {};
+
+
+  constructor(data) {
+    super(data);
+    this.type = FormControlType.MULTI_SELECT;
+    this.options$ = data.options;
+    this.onInit = data.onInit;
+    this.selectedItems = data.selectedItems;
+    this.onInitSelectedItems = data.onInitSelectedItems ? data.onInitSelectedItems : null;
+    this.ngValue = data.selectedField ? data.selectedField : 'id';
+    this.settings = data.settings || {};
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/models/formControlModels/numberFormControl.model.ts b/vid-webpack-master/src/app/shared/models/formControlModels/numberFormControl.model.ts
new file mode 100644
index 0000000..5de38e2
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/formControlModels/numberFormControl.model.ts
@@ -0,0 +1,16 @@
+import {FormControlModel} from "./formControl.model";
+import {FormControlType} from "./formControlTypes.enum";
+
+export class NumberFormControl extends FormControlModel{
+  min: number;
+  max: number;
+
+
+  constructor(data) {
+    super(data);
+    this.type = FormControlType.NUMBER;
+    this.min = data.min;
+    this.max = data.max;
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/models/inputTypes.ts b/vid-webpack-master/src/app/shared/models/inputTypes.ts
index 1f7222f..542c13b 100644
--- a/vid-webpack-master/src/app/shared/models/inputTypes.ts
+++ b/vid-webpack-master/src/app/shared/models/inputTypes.ts
@@ -1,11 +1,11 @@
 export enum  InputType {
-  LCP_REGION = "LCP_REGION",
-  TENANT = "TENANT",
-  LOB  = "LOB",
-  PLATFORM = "PLATFORM",
-  ROLLBACK = "ROLLBACK",
-  PRODUCT_FAMILY = "PRODUCT_FAMILY",
-  VG = "VG"
+  LCP_REGION = "lcpCloudRegionId",
+  TENANT = "tenantId",
+  LOB  = "lineOfBusiness",
+  PLATFORM = "platformName",
+  ROLLBACK = "rollbackOnFailure",
+  PRODUCT_FAMILY = "productFamilyId",
+  VG = "volumeGroupName"
 
 }
 
diff --git a/vid-webpack-master/src/app/shared/models/lcpRegion.ts b/vid-webpack-master/src/app/shared/models/lcpRegion.ts
index e39321d..fe82a3e 100644
--- a/vid-webpack-master/src/app/shared/models/lcpRegion.ts
+++ b/vid-webpack-master/src/app/shared/models/lcpRegion.ts
@@ -2,10 +2,12 @@
   id: string;
   name: string;
   isPermitted: boolean;
+  cloudOwner: string;
 
-  constructor(serviceJson){
-    this.id = serviceJson["cloudRegionID"];
-    this.name = serviceJson["cloudRegionID"];
-    this.isPermitted = serviceJson["is-permitted"];
+  constructor(id: string, name: string, isPermitted: boolean, cloudOwner: string) {
+    this.id = id;
+    this.name = name;
+    this.isPermitted = isPermitted;
+    this.cloudOwner = cloudOwner;
   }
 }
diff --git a/vid-webpack-master/src/app/shared/models/level1Instance.ts b/vid-webpack-master/src/app/shared/models/level1Instance.ts
new file mode 100644
index 0000000..b7925b8
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/level1Instance.ts
@@ -0,0 +1,24 @@
+import {ChildNodeInstance} from "./nodeInstance";
+import {DefaultDataGeneratorService} from "../services/defaultDataServiceGenerator/default.data.generator.service";
+
+export class Level1Instance extends ChildNodeInstance{
+  uuid : string;
+  isEcompGeneratedNaming: boolean;
+  productFamilyId: string;
+  lcpCloudRegionId: string;
+  legacyRegion: string;
+  tenantId: string;
+  platformName: string;
+  lineOfBusiness: string;
+  rollbackOnFailure: string;
+  originalName: string;
+
+  constructor() {
+    super();
+    this.rollbackOnFailure = 'true';
+    this.originalName = null;
+    this.isMissingData= false;
+    this.trackById = DefaultDataGeneratorService.createRandomTrackById();
+    this.inMaint= false;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/modelInfo.ts b/vid-webpack-master/src/app/shared/models/modelInfo.ts
index 091c02e..eb599cb 100644
--- a/vid-webpack-master/src/app/shared/models/modelInfo.ts
+++ b/vid-webpack-master/src/app/shared/models/modelInfo.ts
@@ -1,11 +1,13 @@
 
 export class ModelInfo {
-  modelInvariantId: string;
-  modelVersionId: string;
+  modelInvariantId?: string;
+  modelVersionId?: string;
   modelName: string;
   modelVersion: string;
-  modelCustomizationId: string;
-  modelCustomizationName: string;
+  modelCustomizationId?: string;
+  modelCustomizationName?: string;
+  uuid? : string;
+  modelUniqueId?: String;
 
 
 
@@ -16,6 +18,8 @@
     this.modelVersion = instanceModel.version;
     this.modelCustomizationId = instanceModel.customizationUuid;
     this.modelCustomizationName = instanceModel.modelCustomizationName;
+    this.uuid = instanceModel.uuid;
+    this.modelUniqueId = this.modelCustomizationId||this.uuid;
   }
 }
 
diff --git a/vid-webpack-master/src/app/shared/models/networkInstance.ts b/vid-webpack-master/src/app/shared/models/networkInstance.ts
new file mode 100644
index 0000000..ded95a7
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/networkInstance.ts
@@ -0,0 +1,14 @@
+
+
+import {Level1Instance} from "./level1Instance";
+
+export class NetworkInstance extends Level1Instance{
+  networkStoreKey : string;
+  isFailed: boolean;
+  statusMessage?: string;
+
+  constructor() {
+    super();
+    this.networkStoreKey = null;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/networkModel.ts b/vid-webpack-master/src/app/shared/models/networkModel.ts
new file mode 100644
index 0000000..03f118e
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/networkModel.ts
@@ -0,0 +1,32 @@
+import {
+  Level1Model, Level1ModelProperties,
+  Level1ModelResponseInterface
+} from "./nodeModel";
+import {VfcInstanceGroupMap} from "./vfcInstanceGroupMap";
+
+
+export interface NetworkProperties extends Level1ModelProperties{
+  ecomp_generated_naming: string;
+  network_role: string;
+}
+
+export interface NetworkModelResponseInterface extends Level1ModelResponseInterface{
+  properties: NetworkProperties;
+}
+
+export class NetworkModel extends Level1Model{
+
+  roles: string[] = [];
+  properties: NetworkProperties;
+
+  constructor(networkJson?: NetworkModelResponseInterface){
+    super(networkJson);
+    if(networkJson && networkJson.properties){
+      this.properties = networkJson.properties;
+      // expecting network_role to be a comma-saparated list
+      this.roles = networkJson.properties.network_role ? networkJson.properties.network_role.split(',') : [];
+    }
+  }
+
+
+}
diff --git a/vid-webpack-master/src/app/shared/models/networkTreeNode.ts b/vid-webpack-master/src/app/shared/models/networkTreeNode.ts
new file mode 100644
index 0000000..d09d5e4
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/networkTreeNode.ts
@@ -0,0 +1,23 @@
+import {NetworkInstance} from "./networkInstance";
+import {TreeNodeModel} from "./treeNodeModel";
+import {Level1Model} from "./nodeModel";
+
+
+
+export class NetworkTreeNode extends TreeNodeModel {
+  networkStoreKey : string;
+  typeName: string;
+  menuActions: { [p: string]: { method: Function; visible: Function; enable: Function } };
+  isFailed: boolean;
+  statusMessage?: string;
+
+  constructor(instance: NetworkInstance, networkModel: Level1Model, networkStoreKey : string){
+    super(instance, networkModel);
+    this.name = instance.instanceName? instance.instanceName: !networkModel.isEcompGeneratedNaming ? networkModel.modelCustomizationName : '&lt;Automatically Assigned&gt;';
+    this.modelName = networkModel.modelCustomizationName;
+    this.type = networkModel.type;
+    this.isEcompGeneratedNaming = networkModel.isEcompGeneratedNaming;
+    this.networkStoreKey = networkStoreKey;
+  }
+}
+
diff --git a/vid-webpack-master/src/app/shared/models/nodeInstance.ts b/vid-webpack-master/src/app/shared/models/nodeInstance.ts
new file mode 100644
index 0000000..7656a0c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/nodeInstance.ts
@@ -0,0 +1,21 @@
+import {ServiceInstanceActions} from "./serviceInstanceActions";
+import {ModelInfo} from "./modelInfo";
+
+export class NodeInstance {
+  instanceName: string;
+  orchStatus?:string;
+  action: ServiceInstanceActions = ServiceInstanceActions.Create;
+  originalAction : ServiceInstanceActions;
+  modelInfo?: ModelInfo;
+  instanceId?: string;
+  trackById?: string;
+}
+export class ChildNodeInstance extends NodeInstance {
+  isMissingData: boolean;
+  provStatus?:string;
+  inMaint?:boolean;
+  constructor() {
+    super();
+    this.inMaint = false;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/nodeModel.ts b/vid-webpack-master/src/app/shared/models/nodeModel.ts
index 4b22b8d..ee57ec0 100644
--- a/vid-webpack-master/src/app/shared/models/nodeModel.ts
+++ b/vid-webpack-master/src/app/shared/models/nodeModel.ts
@@ -1,12 +1,27 @@
+import {VfcInstanceGroupMap} from "./vfcInstanceGroupMap";
+
 export interface NodeModelResponseInterface {
+  customizationUuid: string;
   name: string;
   version: string;
   description: string;
   category: string;
   uuid: string;
   invariantUuid: string;
+  max: number;
+  min:number;
 }
-
+export interface Level1ModelResponseInterface extends NodeModelResponseInterface{
+  serviceType: string;
+  serviceRole: string;
+  subCategory: string;
+  customizationUuid: string;
+  serviceEcompNaming: boolean;
+  type: string;
+  modelCustomizationName: string;
+  vfcInstanceGroups: VfcInstanceGroupMap;
+  properties: Level1ModelProperties;
+}
 export class NodeModel {
   name: string;
   version: string;
@@ -14,16 +29,65 @@
   category: string;
   uuid: string;
   invariantUuid: string;
+  max: number;
+  min: number;
+  customizationUuid?: string;
 
   constructor(serviceJson?: NodeModelResponseInterface) {
     if (serviceJson) {
+      this.customizationUuid = serviceJson.customizationUuid;
       this.name = serviceJson.name;
       this.version = serviceJson.version;
       this.description = serviceJson.description;
       this.category = serviceJson.category;
       this.uuid = serviceJson.uuid;
       this.invariantUuid = serviceJson.invariantUuid;
+      this.max = serviceJson.max;
+      this.min = serviceJson.min;
     }
   }
 
 }
+export class Level1ModelProperties {
+  max_instances : number;
+  min_instances : number;
+}
+
+
+
+export class Level1Model extends NodeModel{
+  serviceType: string;
+  serviceRole: string;
+  subCategory: string;
+  customizationUuid: string;
+  serviceEcompNaming: boolean;
+  type: string;
+  modelCustomizationName: string;
+  vfcInstanceGroups: VfcInstanceGroupMap;
+  isEcompGeneratedNaming: boolean;
+  constructor(nodeJson?: Level1ModelResponseInterface) {
+    super(nodeJson);
+    if (nodeJson) {
+      this.serviceType = nodeJson.serviceType;
+      this.serviceRole = nodeJson.serviceRole;
+      this.subCategory = nodeJson.subCategory;
+      this.customizationUuid = nodeJson.customizationUuid;
+      this.isEcompGeneratedNaming = this.getIsEcompGeneratedNaming(nodeJson);
+      this.type = nodeJson.type;
+      this.modelCustomizationName = nodeJson.modelCustomizationName;
+      this.vfcInstanceGroups = nodeJson.vfcInstanceGroups;
+      this.max = 1;
+      this.min = 0;
+      if (nodeJson.properties) {
+        this.min = nodeJson.properties.min_instances || 0;
+        this.max = nodeJson.properties.max_instances || 1;
+      }
+
+
+    }
+  }
+  private getIsEcompGeneratedNaming(vnfJson) {
+    const ecompGeneratedNaming = vnfJson.properties.ecomp_generated_naming;
+    return ecompGeneratedNaming === "true";
+  };
+}
diff --git a/vid-webpack-master/src/app/shared/models/productFamily.ts b/vid-webpack-master/src/app/shared/models/productFamily.ts
index 3c55ac0..1ed2579 100644
--- a/vid-webpack-master/src/app/shared/models/productFamily.ts
+++ b/vid-webpack-master/src/app/shared/models/productFamily.ts
@@ -1,4 +1,4 @@
-import {ServiceResponseInterface} from "../../services/aaiService/responseInterfaces/getServicesResponseInterface";
+import {ServiceResponseInterface} from "../services/aaiService/responseInterfaces/getServicesResponseInterface";
 
 export class ProductFamily {
   id: string;
diff --git a/vid-webpack-master/src/app/shared/models/serviceInstance.ts b/vid-webpack-master/src/app/shared/models/serviceInstance.ts
index a952430..38b4ac3 100644
--- a/vid-webpack-master/src/app/shared/models/serviceInstance.ts
+++ b/vid-webpack-master/src/app/shared/models/serviceInstance.ts
@@ -1,8 +1,11 @@
 import {VnfInstance} from "./vnfInstance";
+import {NetworkInstance} from "./networkInstance";
+import {NodeInstance} from "./nodeInstance";
+import {VnfGroupInstance} from "./vnfGroupInstance";
+import {VnfMember} from "./VnfMember";
 
-export class ServiceInstance {
-  instanceName: string;
-  isUserProvidedNaming: boolean;
+export class ServiceInstance extends NodeInstance{
+  isEcompGeneratedNaming: boolean;
   globalSubscriberId: string;
   productFamilyId: string;
   subscriptionServiceType: string;
@@ -16,13 +19,37 @@
   owningEntityName: string;
   pause: boolean;
   bulkSize: number;
-  vnfs: { [vnf_module_model_name: string] : VnfInstance; };
-  instanceParams: { [key: string] : string; };
-  rollbackOnFailure : boolean;
-  subscriberName : string;
+  vnfs: { [vnf_module_model_name: string]: VnfInstance; };
+  vnfGroups : {[vnf_module_model_name: string]: VnfGroupInstance; };
+  networks: { [vnf_module_model_name: string]: NetworkInstance; };
+  isDirty : boolean;
+  instanceParams: {[key: string]: string}[];
+  rollbackOnFailure: boolean;
+  subscriberName: string;
+  validationCounter: number;
+  existingNames:  {[key: string] : any};
+  modelInavariantId?: string;
+  existingVNFCounterMap : { [vnf_module_model_name: string]: number; };
+  existingVnfGroupCounterMap : { [vnf_group_module_model_name: string]: number; };
+  existingNetworksCounterMap : { [network_module_model_name: string]: number; };
+  optionalGroupMembersMap?: { [path: string]: VnfMember[]; };
+  isFailed: boolean;
+  statusMessage: string;
 
   constructor() {
+    super();
+    this.isDirty = false;
     this.vnfs = {};
-    this.instanceParams = {};
+    this.instanceParams = [];
+    this.validationCounter = 0;
+    this.existingNames = {};
+    this.existingVNFCounterMap = {};
+    this.existingVnfGroupCounterMap = {};
+    this.existingNetworksCounterMap = {};
+    this.optionalGroupMembersMap = {};
+    this.networks = {};
+    this.vnfGroups = {};
+    this.bulkSize = 1;
   }
+
 }
diff --git a/vid-webpack-master/src/app/shared/models/serviceInstanceActions.ts b/vid-webpack-master/src/app/shared/models/serviceInstanceActions.ts
new file mode 100644
index 0000000..783f133
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/serviceInstanceActions.ts
@@ -0,0 +1,24 @@
+export enum ServiceInstanceActions{
+  Delete = "Delete",
+  Update="Update",
+  Create="Create",
+  None="None",
+  Update_Delete = 'Update_Delete',
+  None_Delete = 'None_Delete'
+}
+export enum ServiceAction {
+  INSTANTIATE = 'INSTANTIATE',
+  DELETE = 'DELETE',
+  UPDATE = 'UPDATE'
+}
+export enum JobStatus {
+  COMPLETED = 'COMPLETED',
+  FAILED = 'FAILED',
+  IN_PROGRESS = 'IN_PROGRESS',
+  RESOURCE_IN_PROGRESS = 'RESOURCE_IN_PROGRESS',
+  PAUSE = 'PAUSE',
+  PENDING = 'PENDING',
+  STOPPED = 'STOPPED',
+  COMPLETED_WITH_ERRORS = 'COMPLETED_WITH_ERRORS',
+  CREATING = 'CREATING'
+}
diff --git a/vid-webpack-master/src/app/shared/models/serviceModel.ts b/vid-webpack-master/src/app/shared/models/serviceModel.ts
index 18d8582..21a34cc 100644
--- a/vid-webpack-master/src/app/shared/models/serviceModel.ts
+++ b/vid-webpack-master/src/app/shared/models/serviceModel.ts
@@ -7,6 +7,7 @@
   serviceType: string;
   serviceRole: string;
   serviceEcompNaming: boolean;
+  vidNotions: any;
 }
 
 export class ServiceModel extends NodeModel{
@@ -14,8 +15,9 @@
   serviceType: string;
   serviceRole: string;
   servicesQty: number;
-  isUserProvidedNaming: boolean;
+  isEcompGeneratedNaming: boolean;
   isMultiStepDesign: boolean;
+  vidNotions?: any;
 
   constructor(serviceModelJson?: any){
     super(serviceModelJson.service);
@@ -23,13 +25,14 @@
       const service: ServiceModelResponseInterface = serviceModelJson.service;
       this.serviceType = service.serviceType;
       this.serviceRole = service.serviceRole;
-      this.isUserProvidedNaming = this.getIsUserProvidedName(service);
+      this.vidNotions= service.vidNotions;
+      this.isEcompGeneratedNaming = this.getServiceEcompNaming(service);
       this.isMultiStepDesign = this.getIsMultiStepDesign(serviceModelJson);
     }
   }
 
-  private getIsUserProvidedName(serviceJson): boolean {
-    return serviceJson.serviceEcompNaming !== undefined && serviceJson.serviceEcompNaming === "false";
+  private getServiceEcompNaming(serviceJson): boolean {
+    return serviceJson.serviceEcompNaming === "true";
   };
 
   private getIsMultiStepDesign(serviceModel): boolean {
diff --git a/vid-webpack-master/src/app/shared/models/serviceProxyModel.ts b/vid-webpack-master/src/app/shared/models/serviceProxyModel.ts
new file mode 100644
index 0000000..31810ca
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/serviceProxyModel.ts
@@ -0,0 +1,22 @@
+
+import {NodeModel, NodeModelResponseInterface} from "./nodeModel";
+
+export interface ServiceProxyModelResponseInterface extends NodeModelResponseInterface{
+  sourceModelUuid: string;
+  sourceModelInvariant: string;
+  sourceModelName: string;
+}
+export class ServiceProxyModel extends NodeModel {
+  sourceModelUuid: string;
+  sourceModelInvariant: string;
+  sourceModelName: string;
+
+  constructor(serviceProxyJson?: ServiceProxyModelResponseInterface)  {
+    if (serviceProxyJson)  {
+      super(serviceProxyJson);
+      this.sourceModelUuid = serviceProxyJson.sourceModelUuid;
+      this.sourceModelInvariant = serviceProxyJson.sourceModelInvariant;
+      this.sourceModelName = serviceProxyJson.sourceModelName;
+    }
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/tenant.ts b/vid-webpack-master/src/app/shared/models/tenant.ts
index 234f1db..26ff69d 100644
--- a/vid-webpack-master/src/app/shared/models/tenant.ts
+++ b/vid-webpack-master/src/app/shared/models/tenant.ts
@@ -2,10 +2,12 @@
   id: string;
   name: string;
   isPermitted: boolean;
+  cloudOwner: string;
 
   constructor(serviceJson){
     this.id = serviceJson["tenantID"];
     this.name = serviceJson["tenantName"];
     this.isPermitted = serviceJson["is-permitted"];
+    this.cloudOwner = serviceJson["cloudOwner"];
   }
 }
diff --git a/vid-webpack-master/src/app/shared/models/treeNodeModel.ts b/vid-webpack-master/src/app/shared/models/treeNodeModel.ts
new file mode 100644
index 0000000..2be8b80
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/treeNodeModel.ts
@@ -0,0 +1,53 @@
+import {ChildNodeInstance} from "./nodeInstance";
+import {NodeModel} from "./nodeModel";
+import {ServiceNodeTypes} from "./ServiceNodeTypes";
+import * as _ from 'lodash';
+import {ServiceInstanceActions} from "./serviceInstanceActions";
+export enum TreeLevel {
+  Level_0 , Level_1, Level_2
+
+}
+interface TreeNodeInstanceInterface {
+  treeLevel: TreeLevel;
+  getModel(): NodeModel;
+  convertToTreeNode(node: any): any;
+  type: ServiceNodeTypes;
+}
+export class TreeNodeModel {
+  type: String;
+  modelId: string;
+  modelCustomizationId?: string;
+  modelUniqueId?: string;
+  id: string;
+  name: string;
+  modelName: string;
+  missingData: boolean;
+  isEcompGeneratedNaming: boolean;
+  orchStatus?:string;
+  provStatus?:string;
+  inMaint?:boolean;
+  action : string ;
+
+  constructor(instance: ChildNodeInstance, nodeModel: NodeModel){
+    this.modelCustomizationId = nodeModel.customizationUuid;
+    this.modelId = nodeModel.uuid;
+    this.modelUniqueId = this.modelCustomizationId || this.modelId;
+    this.missingData = false;
+    this.id = instance.trackById;
+    this.action = !_.isNil(instance.action) ? instance.action : ServiceInstanceActions.Create;
+
+    if(!_.isNil(instance.orchStatus)){
+      this.orchStatus= instance.orchStatus;
+    }
+
+    if(!_.isNil(instance.provStatus)){
+      this.provStatus= instance.provStatus;
+    }
+
+    if(!_.isNil(instance.inMaint)){
+      this.inMaint= instance.inMaint;
+    }
+
+
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/vfModule.ts b/vid-webpack-master/src/app/shared/models/vfModule.ts
index 21f43ed..c752021 100644
--- a/vid-webpack-master/src/app/shared/models/vfModule.ts
+++ b/vid-webpack-master/src/app/shared/models/vfModule.ts
@@ -1,7 +1,7 @@
 import {NodeModel, NodeModelResponseInterface} from "./nodeModel";
 
 
-export interface properties{
+export interface Properties{
   initialCount: number;
   maxCountInstances: number;
   minCountInstances: number;
@@ -10,24 +10,25 @@
 export interface VFModuleResponseInterface extends NodeModelResponseInterface {
   customizationUuid: string;
   modelCustomizationName: string;
-  properties: properties
+  volumeGroupAllowed : boolean;
+  properties: Properties
 }
 
 export class VfModule extends NodeModel {
 
-  min:number;
-  max:number;
   vgName:string;
   rollbackOnFailure:boolean;
   initial:number;
   customizationUuid: string;
   modelCustomizationName: string;
+  volumeGroupAllowed : boolean;
 
   constructor(vf?: VFModuleResponseInterface) {
     super(vf);
     if(vf){
       this.customizationUuid = vf.customizationUuid;
       this.modelCustomizationName = vf.modelCustomizationName;
+      this.volumeGroupAllowed = vf.volumeGroupAllowed || false;
     }
     if (vf && vf.properties) {
       this.min = vf.properties.minCountInstances;
diff --git a/vid-webpack-master/src/app/shared/models/vfModuleInstance.ts b/vid-webpack-master/src/app/shared/models/vfModuleInstance.ts
index c6db000..71140d4 100644
--- a/vid-webpack-master/src/app/shared/models/vfModuleInstance.ts
+++ b/vid-webpack-master/src/app/shared/models/vfModuleInstance.ts
@@ -1,5 +1,14 @@
-export class VfModuleInstance {
-  instanceName: string;
+import {ChildNodeInstance} from "./nodeInstance";
+
+export class VfModuleInstance extends ChildNodeInstance{
   volumeGroupName: string;
   instanceParams: { [key: string] : string; };
+  isFailed: boolean;
+  position: any;
+  statusMessage?: string;
+
+  constructor() {
+    super();
+    this.instanceParams = {};
+  }
 }
diff --git a/vid-webpack-master/src/app/shared/models/vfModuleTreeNode.ts b/vid-webpack-master/src/app/shared/models/vfModuleTreeNode.ts
index d4cc7e9..e3d1b79 100644
--- a/vid-webpack-master/src/app/shared/models/vfModuleTreeNode.ts
+++ b/vid-webpack-master/src/app/shared/models/vfModuleTreeNode.ts
@@ -1,17 +1,23 @@
 import {VfModule} from "./vfModule";
 import {VfModuleInstance} from "./vfModuleInstance";
 import {ServiceNodeTypes} from "./ServiceNodeTypes";
+import {TreeLevel, TreeNodeModel} from "./treeNodeModel";
 
-export class VfModuleTreeNode {
-  modelId: string;
-  name: string;
-  modelName: string;
-  type: string;
+export class VfModuleTreeNode extends TreeNodeModel{
+  dynamicInputs: any;
+  dynamicModelName : string;
+  typeName: string;
+  menuActions: { [p: string]: { method: Function; visible: Function; enable: Function } };
+  isFailed: boolean;
+  statusMessage?: string;
 
-  constructor(vfModuleInstance: VfModuleInstance, vfModuleModel: VfModule, vfModuleModelName: string){
-    this.name = vfModuleInstance.instanceName || vfModuleInstance.volumeGroupName || '<Automatically Assigned>';
-    this.modelId = vfModuleModel.uuid;
+  constructor(vfModuleInstance: VfModuleInstance, vfModuleModel: VfModule, vfModuleModelName: string, dynamicInputs: any, isEcompGeneratedNaming: boolean, dynamicModelName : string){
+    super(vfModuleInstance,vfModuleModel);
+    this.name = vfModuleInstance.instanceName || vfModuleInstance.volumeGroupName || '&lt;Automatically Assigned&gt;';
     this.modelName = vfModuleModelName;
     this.type = ServiceNodeTypes.VFmodule;
+    this.isEcompGeneratedNaming = isEcompGeneratedNaming;
+    this.dynamicInputs = dynamicInputs;
+    this.dynamicModelName  = dynamicModelName;
   }
 }
diff --git a/vid-webpack-master/src/app/shared/models/vnfGroupInstance.ts b/vid-webpack-master/src/app/shared/models/vnfGroupInstance.ts
new file mode 100644
index 0000000..22ca444
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vnfGroupInstance.ts
@@ -0,0 +1,13 @@
+import {Level1Instance} from "./level1Instance";
+import {VnfMember} from "./VnfMember";
+import {NetworkInstance} from "./networkInstance";
+
+export class VnfGroupInstance extends Level1Instance{
+  vnfGroupStoreKey : string;
+  vnfs: { [vnf_module_model_name: string]: VnfMember; };
+  constructor() {
+    super();
+    this.vnfGroupStoreKey = null;
+    this.vnfs ={};
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/vnfGroupModel.ts b/vid-webpack-master/src/app/shared/models/vnfGroupModel.ts
new file mode 100644
index 0000000..5cff86c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vnfGroupModel.ts
@@ -0,0 +1,32 @@
+import {
+  Level1Model,
+  Level1ModelProperties,
+  Level1ModelResponseInterface
+} from "./nodeModel";
+import {ServiceProxyModel} from "./serviceProxyModel";
+
+
+export interface VnfGroupProperties extends Level1ModelProperties{
+  ecomp_generated_naming: string;
+  role?: string;
+  type?: string;
+  quantity?: number;
+}
+
+export interface VnfGroupModelResponseInterface extends Level1ModelResponseInterface{
+  properties: VnfGroupProperties;
+  members: {[key: string]: ServiceProxyModel};
+}
+
+export class VnfGroupModel extends Level1Model{
+  properties: VnfGroupProperties;
+  members: {[key: string]: ServiceProxyModel};
+
+    constructor(vnfGoupJson?: VnfGroupModelResponseInterface) {
+    super(vnfGoupJson);
+    if (vnfGoupJson) {
+      this.properties = vnfGoupJson.properties;
+      this.members = vnfGoupJson.members;
+    }
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/vnfGroupTreeNode.ts b/vid-webpack-master/src/app/shared/models/vnfGroupTreeNode.ts
new file mode 100644
index 0000000..0e71f47
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/models/vnfGroupTreeNode.ts
@@ -0,0 +1,12 @@
+import {NetworkTreeNode} from "./networkTreeNode";
+import {NetworkInstance} from "./networkInstance";
+import {Level1Model} from "./nodeModel";
+
+export class VnfGroupTreeNode extends NetworkTreeNode{
+  vnfGroupStoreKey : string;
+  limitMembers: number;
+  constructor(instance: NetworkInstance, vnfGroupModel: Level1Model, vnfGroupStoreKey : string){
+    super(instance, vnfGroupModel, vnfGroupStoreKey);
+    this.vnfGroupStoreKey = vnfGroupStoreKey;
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/models/vnfInstance.ts b/vid-webpack-master/src/app/shared/models/vnfInstance.ts
index 7f41e48..8959cc5 100644
--- a/vid-webpack-master/src/app/shared/models/vnfInstance.ts
+++ b/vid-webpack-master/src/app/shared/models/vnfInstance.ts
@@ -1,19 +1,18 @@
 import {VfModuleMap} from "./vfModulesMap";
+import {Level1Instance} from "./level1Instance";
 
-export class VnfInstance {
-  instanceName: string;
-  isUserProvidedNaming: boolean;
-  productFamilyId: string;
-  lcpCloudRegionId: string;
-  legacyRegion: string;
-  tenantId: string;
-  platformName: string;
-  lineOfBusiness: string;
-  rollbackOnFailure: string;
+
+export class VnfInstance extends Level1Instance {
+
   vfModules: { [vf_module_model_name: string] : VfModuleMap; };
+  vnfStoreKey : string;
+  isFailed: boolean;
+  position: number;
+  statusMessage?: string;
 
   constructor() {
-    this.rollbackOnFailure = 'true';
+    super();
     this.vfModules = {};
+    this.vnfStoreKey = null;
   }
 }
diff --git a/vid-webpack-master/src/app/shared/models/vnfModel.ts b/vid-webpack-master/src/app/shared/models/vnfModel.ts
index e1302f1..8389606 100644
--- a/vid-webpack-master/src/app/shared/models/vnfModel.ts
+++ b/vid-webpack-master/src/app/shared/models/vnfModel.ts
@@ -1,52 +1,27 @@
-import {NodeModel, NodeModelResponseInterface} from "./nodeModel";
-import {VfcInstanceGroupMap} from "./vfcInstanceGroupMap";
+import {
+  Level1Model,
+  Level1ModelProperties,
+  Level1ModelResponseInterface
+} from "./nodeModel";
 
 
-export interface VnfProperties {
-  ecomp_generated_naming: string
+
+export interface VnfProperties extends Level1ModelProperties{
+  ecomp_generated_naming: string;
 }
 
-export interface VNFModelResponseInterface extends NodeModelResponseInterface{
-
-  serviceType: string;
-  serviceRole: string;
-  subCategory: string;
-  customizationUuid: string;
-  serviceEcompNaming: boolean;
-  type: string;
-  modelCustomizationName: string;
+export interface VNFModelResponseInterface extends Level1ModelResponseInterface{
   properties: VnfProperties;
-  vfcInstanceGroups: VfcInstanceGroupMap;
 }
 
-export class VNFModel extends NodeModel{
+export class VNFModel extends Level1Model{
+  properties: VnfProperties;
 
-  serviceType: string;
-  serviceRole: string;
-  subCategory: string;
-  customizationUuid: string;
-  isUserProvidedNaming: boolean;
-  type: string;
-  modelCustomizationName: string;
-  vfcInstanceGroups: VfcInstanceGroupMap;
-
-  constructor(vnfJson?: VNFModelResponseInterface){
+  constructor(vnfJson?: VNFModelResponseInterface) {
     super(vnfJson);
     if (vnfJson) {
-      this.serviceType = vnfJson.serviceType;
-      this.serviceRole = vnfJson.serviceRole;
-      this.subCategory = vnfJson.subCategory;
-      this.customizationUuid = vnfJson.customizationUuid;
-      this.isUserProvidedNaming = this.getIsUserProvidedName(vnfJson);
-      this.type = vnfJson.type;
-      this.modelCustomizationName = vnfJson.modelCustomizationName;
-      this.vfcInstanceGroups = vnfJson.vfcInstanceGroups;
-
+      this.properties = vnfJson.properties;
     }
   }
 
-  private getIsUserProvidedName(vnfJson) {
-    const ecompGeneratedNaming = vnfJson.properties.ecomp_generated_naming;
-    return ecompGeneratedNaming !== undefined && ecompGeneratedNaming === "false";
-  };
 }
diff --git a/vid-webpack-master/src/app/shared/models/vnfTreeNode.ts b/vid-webpack-master/src/app/shared/models/vnfTreeNode.ts
index 316bf3e..b878d01 100644
--- a/vid-webpack-master/src/app/shared/models/vnfTreeNode.ts
+++ b/vid-webpack-master/src/app/shared/models/vnfTreeNode.ts
@@ -1,18 +1,17 @@
-import {VNFModel} from "./vnfModel";
-import {VnfInstance} from "./vnfInstance";
 import {VfModuleTreeNode} from "./vfModuleTreeNode";
+import {NetworkTreeNode} from "./networkTreeNode";
+import {Level1Model} from "./nodeModel";
+import {VnfInstance} from "./vnfInstance";
+import {ServiceNodeTypes} from "./ServiceNodeTypes";
 
-export class VnfTreeNode {
-  modelId: string;
-  name: string;
-  modelName: string;
-  type: string;
+export class VnfTreeNode extends NetworkTreeNode{
+
   children: VfModuleTreeNode[];
+  vnfStoreKey : string;
 
-  constructor(instance: VnfInstance, vnfModel: VNFModel){
-    this.name = instance.instanceName || vnfModel['properties'].ecomp_generated_naming == 'false' ? vnfModel.modelCustomizationName : '<Automatically Assigned>';
-    this.modelId = vnfModel.uuid;
-    this.modelName = vnfModel.modelCustomizationName;
-    this.type = vnfModel.type;
+  constructor(instance: VnfInstance, vnfModel: Level1Model, vnfStoreKey : string){
+    super(<any>instance, vnfModel, vnfStoreKey);
+    this.type = ServiceNodeTypes.VF;
+    this.vnfStoreKey = vnfStoreKey;
   }
 }
diff --git a/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.spec.ts
index 84d2ff4..f0bcbb0 100644
--- a/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.spec.ts
+++ b/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.spec.ts
@@ -1,25 +1,33 @@
-
 import {CapitalizeAndFormatPipe} from "./capitalize-and-format.pipe";
+import {TestBed} from "@angular/core/testing";
 
 describe('Capitalize And Format Pipe', () => {
   let capitalizeAndFormatPipe: CapitalizeAndFormatPipe;
 
-  beforeEach(() => {
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({});
+    await TestBed.compileComponents();
     capitalizeAndFormatPipe = new CapitalizeAndFormatPipe();
-  });
+  })().then(done).catch(done.fail));
 
-  it('Capitalize And Format Pipe should be defined', () => {
+
+  test('Capitalize And Format Pipe should be defined', () => {
     expect(capitalizeAndFormatPipe).toBeDefined();
   });
 
-  it('Capitalize And Format Pipe :  (UPPERCASE)', ()=> {
+  test('Capitalize And Format Pipe :  (UPPERCASE)', ()=> {
     let result: string = capitalizeAndFormatPipe.transform('PENDING');
     expect(result).toEqual('Pending');
   });
 
-  it('Capitalize And Format Pipe (UPPERCASE) and Underscore should replace by -', ()=> {
+  test('Capitalize And Format Pipe (UPPERCASE) and Underscore should replace by -', ()=> {
     let result: string = capitalizeAndFormatPipe.transform('IN_PROGRESS');
     expect(result).toEqual('In-progress');
   });
 
+  test('Capitalize And Format Pipe (COMPLETED_WITH_ERRORS) and All Underscores should replace by -', ()=> {
+    let result: string = capitalizeAndFormatPipe.transform('COMPLETED_WITH_ERRORS');
+    expect('Completed-with-errors').toEqual(result);
+  });
+
 });
diff --git a/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.ts b/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.ts
index e3ec9ae..12b1eb9 100644
--- a/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.ts
+++ b/vid-webpack-master/src/app/shared/pipes/capitalize/capitalize-and-format.pipe.ts
@@ -4,7 +4,7 @@
 export class CapitalizeAndFormatPipe implements PipeTransform {
   transform(text: string): string {
     if (text) {
-      text = text.toLowerCase().replace('_', '-');
+      text = text.toLowerCase().replace(/_/g, '-');
       return text.charAt(0).toUpperCase() + text.slice(1);
     }
     return text;
diff --git a/vid-webpack-master/src/app/shared/pipes/data-filter.pipe.ts b/vid-webpack-master/src/app/shared/pipes/data-filter.pipe.ts
deleted file mode 100644
index 1ff8367..0000000
--- a/vid-webpack-master/src/app/shared/pipes/data-filter.pipe.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Created by cp2122 on 1/4/2018.
- */
-import { Pipe, PipeTransform } from '@angular/core';
-
-@Pipe({
-  name: 'dataFilter'
-})
-export class DataFilterPipe implements PipeTransform {
-  keys = [];
-  transform(items: any, args: string): any {
-    if (items != null && items.length > 0) {
-      let ans = [];
-
-      if (this.keys.length === 0) {
-        this.keys = Object.keys(items[0]);
-      }
-      for (let i of items) {
-        for (let k of this.keys) {
-          if (i[k] !== null && i[k].toString().match('^.*' + args + '.*$')) {
-            ans.push(i);
-            break;
-          }
-        }
-      }
-      return ans;
-    }
-  }
-}
diff --git a/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.spec.ts
new file mode 100644
index 0000000..378ba25
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.spec.ts
@@ -0,0 +1,52 @@
+import {TestBed} from "@angular/core/testing";
+import {DataFilterPipe} from "./data-filter.pipe";
+
+describe('Data filter pipe', () => {
+
+  let dataFilterPipe: DataFilterPipe;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({});
+    await TestBed.compileComponents();
+
+    dataFilterPipe = new DataFilterPipe();
+
+  })().then(done).catch(done.fail));
+  const items= [{'id':1, 'name': 'aaa'},
+    {'id':12, 'name': 'bbb', 'children':{'first': 155, 'second': 2, 'third': 3}},
+    {'id':3, 'name': 'ccc', 'children':{'first': 1, 'second': 2, 'third': 3}},
+    {'id':4, 'name': 'aad', 'children':{'first': 1, 'second': 2, 'third': 3}}];
+  const keys : string[][] = [["id"],["name"],["children", "first"]];
+
+
+  test('should return items contains substring, keys not provided', () => {
+    const expected =  [{'id':1, 'name': 'aaa'}, {'id':4, 'name': 'aad', 'children':{'first': 1, 'second': 2, 'third': 3}}];
+    let res:any[] = dataFilterPipe.transform(items,'aa');
+    expect(res).toEqual(expected);
+  });
+
+
+  test('should return no result, keys not provided', () => {
+    const expected =  [];
+    let res:any[] = dataFilterPipe.transform(items,'5');
+    expect(res).toEqual(expected);
+  });
+
+  test('should return no result, deep keys provided', () => {
+    const expected =  [];
+    let res:any[] = dataFilterPipe.transform(items,'6', keys);
+    expect(res).toEqual(expected);
+  });
+
+  test('should return expected result, deep keys provided', () => {
+    const expected =  [{'id':12, 'name': 'bbb', 'children':{'first': 155, 'second': 2, 'third': 3}}];
+    let res:any[] = dataFilterPipe.transform(items,'155', keys);
+    expect(res).toEqual(expected);
+  });
+
+  test('should return expected result, case insensitive', () => {
+    const expected =  [{'id':12, 'name': 'bbb', 'children':{'first': 155, 'second': 2, 'third': 3}}];
+    let res:any[] = dataFilterPipe.transform(items,'BBB', keys);
+    expect(res).toEqual(expected);
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.ts b/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.ts
new file mode 100644
index 0000000..4b4f1a5
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/dataFilter/data-filter.pipe.ts
@@ -0,0 +1,47 @@
+/**
+ * Created by cp2122 on 1/4/2018.
+ */
+import { Pipe, PipeTransform } from '@angular/core';
+import * as _ from 'lodash';
+
+@Pipe({
+  name: 'dataFilter'
+})
+export class DataFilterPipe implements PipeTransform {
+
+  transform(items: any, searchStr: string, keys?: string[][]): any {
+    if (items != null && items.length > 0 && !_.isNil(searchStr)) {
+      let ans = [];
+
+      if (_.isNil(keys) || keys.length === 0) {
+        keys = Object.keys(items[0]).map((key)=> new Array(key) );
+      }
+      for (const item of items) {
+        for(const key of keys) {
+
+          let val: string = DataFilterPipe.getDeepObjectValueByKeys(item, key);
+          if (!_.isNil(val) && val.toLowerCase().includes(searchStr.toLowerCase())) {
+            ans.push(item);
+            break;
+          }
+        }
+      }
+      return ans;
+    }
+  }
+  /**********************************************************************
+   get value from obj data by array of keys.
+   @keys: all table column and keys
+   @rowData : row data
+   ************************************************************************/
+  static getDeepObjectValueByKeys(rowData: any , keys: string[]) : string {
+    let obj =  rowData[keys[0]];
+    if(_.isNil(obj)) {
+      return obj;
+    }
+    for(let i = 1; i < keys.length ; i++){
+      obj = obj[keys[i]];
+    }
+    return obj.toString();
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.spec.ts
index 22b6192..9938a1c 100644
--- a/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.spec.ts
+++ b/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.spec.ts
@@ -1,43 +1,47 @@
 import { DynamicInputLabelPipe } from './dynamic-input-label.pipe';
+import {TestBed} from "@angular/core/testing";
 
 describe('Dynamic input label Pipe', () => {
+
   let dynamicInputLabelPipe: DynamicInputLabelPipe;
-
-  beforeEach(() => {
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({});
+    await TestBed.compileComponents();
     dynamicInputLabelPipe = new DynamicInputLabelPipe();
-  });
 
-  it('Dynamic input label Pipe should be defined', () => {
+  })().then(done).catch(done.fail));
+
+  test('Dynamic input label Pipe should be defined', () => {
     expect(dynamicInputLabelPipe).toBeDefined();
   });
 
-  it('Dynamic input label Pipe : Empty string should return empty string', ()=> {
+  test('Dynamic input label Pipe : Empty string should return empty string', ()=> {
       let result: string = dynamicInputLabelPipe.transform('');
-      expect(result).toEqual(':*');
+      expect(result).toEqual(':');
   });
 
-  it('Dynamic input label Pipe: vnf should be VNF (UPPERCASE)', ()=> {
+  test('Dynamic input label Pipe: vnf should be VNF (UPPERCASE)', ()=> {
     let result: string = dynamicInputLabelPipe.transform('vnf');
-    expect(result).toEqual('VNF:*');
+    expect(result).toEqual('VNF:');
   });
 
-  it('Dynamic input label Pipe : nf should be NF (UPPERCASE)\'', ()=> {
+  test('Dynamic input label Pipe : nf should be NF (UPPERCASE)\'', ()=> {
     let result: string = dynamicInputLabelPipe.transform('nf');
-    expect(result).toEqual('NF:*');
+    expect(result).toEqual('NF:');
   });
 
-  it('Dynamic input label Pipe : Underscore should replace by empty character', ()=> {
+  test('Dynamic input label Pipe : Underscore should replace by empty character', ()=> {
     let result: string = dynamicInputLabelPipe.transform('nf_Test');
-    expect(result).toEqual('NF test:*');
+    expect(result).toEqual('NF test:');
   });
 
-  it('Dynamic input label Pipe : Complex string', ()=> {
+  test('Dynamic input label Pipe : Complex string', ()=> {
     let result: string = dynamicInputLabelPipe.transform('nf_Test_vnf_nf');
-    expect(result).toEqual('NF test VNF NF:*');
+    expect(result).toEqual('NF test VNF NF:');
   });
 
-  it('Dynamic input label Pipe : First letter should be uppercase', ()=> {
+  test('Dynamic input label Pipe : First letter should be uppercase', ()=> {
     let result: string = dynamicInputLabelPipe.transform('nfr');
-    expect(result).toEqual('Nfr:*');
+    expect(result).toEqual('Nfr:');
   });
 });
diff --git a/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.ts b/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.ts
index bec87b4..f0896be 100644
--- a/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.ts
+++ b/vid-webpack-master/src/app/shared/pipes/dynamicInputLabel/dynamic-input-label.pipe.ts
@@ -7,6 +7,6 @@
     let uppercase_vnf = split_label.replace(/\bvnf\b/ig, 'VNF');
     let uppercase_nf = uppercase_vnf.replace(/\bnf\b/ig, 'NF');
     let capitalize_sentence = uppercase_nf.charAt(0).toUpperCase() + uppercase_nf.slice(1);
-    return capitalize_sentence + ':*';
+    return capitalize_sentence + ':';
   }
 }
diff --git a/vid-webpack-master/src/app/shared/pipes/highlight/highlight-filter.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/highlight/highlight-filter.pipe.spec.ts
new file mode 100644
index 0000000..6c2fc42
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/highlight/highlight-filter.pipe.spec.ts
@@ -0,0 +1,29 @@
+
+import {HighlightPipe} from "./highlight-filter.pipe";
+import {TestBed} from "@angular/core/testing";
+
+describe('Highlight Pipe', () => {
+  let highlightPipe: HighlightPipe;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({});
+    await TestBed.compileComponents();
+
+    highlightPipe = new HighlightPipe();
+
+  })().then(done).catch(done.fail));
+
+  test('Highlight Pipe should be defined', () => {
+    expect(highlightPipe).toBeDefined();
+  });
+
+  test('Highlight Pipe should return "HTML" with highlight class if match exist', () => {
+    let result : string = highlightPipe.transform('Hello World', 'Wor');
+    expect(result).toEqual('Hello <span class="highlight">Wor</span>ld');
+  });
+
+  test('Highlight Pipe should not return "HTML" with highlight class if no match exist', () => {
+    let result : string = highlightPipe.transform('Hello World', 'ABC');
+    expect(result).toEqual('Hello World');
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/highlight-filter.pipe.ts b/vid-webpack-master/src/app/shared/pipes/highlight/highlight-filter.pipe.ts
similarity index 86%
rename from vid-webpack-master/src/app/shared/pipes/highlight-filter.pipe.ts
rename to vid-webpack-master/src/app/shared/pipes/highlight/highlight-filter.pipe.ts
index 93aecbf..b25458d 100644
--- a/vid-webpack-master/src/app/shared/pipes/highlight-filter.pipe.ts
+++ b/vid-webpack-master/src/app/shared/pipes/highlight/highlight-filter.pipe.ts
@@ -1,8 +1,10 @@
 import {PipeTransform, Pipe} from '@angular/core';
+import * as _ from 'lodash';
 
 @Pipe({ name: 'highlight' })
 export class HighlightPipe implements PipeTransform {
   transform(text: string, search: string): string {
+    if(_.isNil(text)) return text;
     let pattern = search.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
     let regex = new RegExp(pattern, 'gi');
     return search ? text.replace(regex, (match) => `<span class="highlight">${match}</span>`) : text;
diff --git a/vid-webpack-master/src/app/shared/pipes/objectToArray/objectToArray.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/objectToArray/objectToArray.pipe.spec.ts
new file mode 100644
index 0000000..093e173
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/objectToArray/objectToArray.pipe.spec.ts
@@ -0,0 +1,35 @@
+import {TestBed} from "@angular/core/testing";
+import {ObjectToArrayPipe} from "./objectToArray.pipe";
+
+
+describe('Object To Array Pipe', () => {
+  let pipe: ObjectToArrayPipe;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+
+    });
+    await TestBed.compileComponents();
+    pipe = new ObjectToArrayPipe();
+
+  })().then(done).catch(done.fail));
+
+
+  test('should flat object to array', () => {
+    let object = {
+      "a" : {
+        "name" :  "A"
+      },
+      "b" : {
+        "name" :  "B"
+      },
+      "c" : {
+        "name" :  "C"
+      }
+    };
+    let result = pipe.transform(object);
+    expect(result[0]).toEqual({"name" :  "A"});
+    expect(result[1]).toEqual({"name" :  "B"});
+    expect(result[2]).toEqual({"name" :  "C"});
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/objectToArray/objectToArray.pipe.ts b/vid-webpack-master/src/app/shared/pipes/objectToArray/objectToArray.pipe.ts
new file mode 100644
index 0000000..fa201d9
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/objectToArray/objectToArray.pipe.ts
@@ -0,0 +1,8 @@
+import { PipeTransform, Pipe } from '@angular/core';
+import * as _ from 'lodash';
+@Pipe({name: 'objecttoarray'})
+export class ObjectToArrayPipe implements PipeTransform {
+  transform(obj) : any {
+    return _.values(obj);
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/order/orderBy.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/order/orderBy.pipe.spec.ts
new file mode 100644
index 0000000..e6a1d31
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/order/orderBy.pipe.spec.ts
@@ -0,0 +1,60 @@
+import {OrderByPipe} from "./orderBy.pipe";
+import {TestBed} from "@angular/core/testing";
+
+
+describe('Sort Pipe', () => {
+  let pipe: OrderByPipe;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+
+    });
+    await TestBed.compileComponents();
+    pipe = new OrderByPipe();
+
+  })().then(done).catch(done.fail));
+
+
+  test('Sort should order the array with nested objects', () => {
+    let list = [
+      {
+        id: 1,
+        name: 'b'
+      },
+      {
+        id: 3,
+        name: 'a'
+      },
+      {
+        id: 2,
+        name: 'd'
+      }
+    ];
+
+    let result = pipe.transform(list, {property : 'name'});
+    expect(result.length).toEqual(3);
+    expect(result).toEqual(<any>[
+      {
+        'id': 3,
+        'name': 'a'
+      },
+      {
+        'id': 1,
+        'name': 'b'
+      },
+      {
+        'id': 2,
+        'name': 'd'
+      }])
+
+  });
+
+  test('Sort should order the array', () => {
+    let list = ['b', 'd', 'a'];
+
+    let result = pipe.transform(list);
+    expect(result.length).toEqual(3);
+    expect(result).toEqual(<any>['a', 'b', 'd']);
+
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/order/orderBy.pipe.ts b/vid-webpack-master/src/app/shared/pipes/order/orderBy.pipe.ts
new file mode 100644
index 0000000..a3b8232
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/order/orderBy.pipe.ts
@@ -0,0 +1,35 @@
+import { Pipe, PipeTransform } from '@angular/core';
+import * as _ from 'lodash';
+@Pipe({  name: 'orderBy' })
+export class OrderByPipe implements PipeTransform {
+
+  transform(records: any[], args: any = {}): any {
+    args.direction =  !_.isNil(args.direction) ? args.direction : 1;
+
+    if(!_.isNil(records)){
+      return records.sort(function(a, b){
+        if(args.property){
+          if(a[args.property] < b[args.property]){
+            return -1 * args.direction;
+          }
+          else if( a[args.property] > b[args.property]){
+            return 1 * args.direction;
+          }
+          else{
+            return 0;
+          }
+        }else {
+          if(a < b){
+            return -1 * args.direction;
+          }
+          else if( a > b){
+            return 1 * args.direction;
+          }
+          else{
+            return 0;
+          }
+        }
+      });
+    }
+  };
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/safe/safe.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/safe/safe.pipe.spec.ts
new file mode 100644
index 0000000..f047173
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/safe/safe.pipe.spec.ts
@@ -0,0 +1,60 @@
+import {SafePipe} from "./safe.pipe";
+import {DomSanitizer} from "@angular/platform-browser";
+import {getTestBed, TestBed} from "@angular/core/testing";
+
+
+describe('Safe pipe', () => {
+
+  let injector;
+  let pipe: SafePipe;
+  let sanitizer: DomSanitizer;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      providers: [SafePipe]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    sanitizer = injector.get(DomSanitizer);
+    pipe = injector.get(SafePipe);
+
+  })().then(done).catch(done.fail));
+
+  test('safe pipe should return Safe object', () => {
+    let options = [
+      {
+        value: 'value',
+        type: 'html',
+        func: 'bypassSecurityTrustHtml'
+      },
+      {
+        value: 'value',
+        type: 'style',
+        func: 'bypassSecurityTrustStyle'
+      },
+      {
+        value: 'value',
+        type: 'script',
+        func: 'bypassSecurityTrustScript'
+      },
+      {
+        value: 'value',
+        type: 'url',
+        func: 'bypassSecurityTrustUrl'
+      },
+      {
+        value: 'value',
+        type: 'resourceUrl',
+        func: 'bypassSecurityTrustResourceUrl'
+      }
+    ];
+
+    for (let option of options) {
+      jest.spyOn(sanitizer, <any>option.func);
+      pipe.transform(option.value, option.type);
+      expect(sanitizer[option.func]).toHaveBeenCalledWith(option.value);
+    }
+  });
+
+});
diff --git a/vid-webpack-master/src/app/shared/pipes/safe/safe.pipe.ts b/vid-webpack-master/src/app/shared/pipes/safe/safe.pipe.ts
new file mode 100644
index 0000000..cff5b61
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/pipes/safe/safe.pipe.ts
@@ -0,0 +1,22 @@
+// @ts-ignore
+import {DomSanitizer, SafeHtml, SafeResourceUrl, SafeScript, SafeStyle, SafeUrl} from "@angular/platform-browser";
+import {Pipe, PipeTransform} from "@angular/core";
+
+
+@Pipe({
+  name: 'safe'
+})
+export class SafePipe implements PipeTransform {
+
+  constructor(protected sanitizer: DomSanitizer) {}
+
+  public transform(value: any, type: string): SafeHtml | SafeStyle | SafeScript | SafeUrl | SafeResourceUrl {
+    switch (type) {
+      case 'html': return this.sanitizer.bypassSecurityTrustHtml(value);
+      case 'style': return this.sanitizer.bypassSecurityTrustStyle(value);
+      case 'script': return this.sanitizer.bypassSecurityTrustScript(value);
+      case 'url': return this.sanitizer.bypassSecurityTrustUrl(value);
+      case 'resourceUrl': return this.sanitizer.bypassSecurityTrustResourceUrl(value);
+    }
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.spec.ts b/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.spec.ts
index 984e337..670f2f2 100644
--- a/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.spec.ts
+++ b/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.spec.ts
@@ -1,14 +1,23 @@
 import {ServiceInfoPipe} from "./serviceInfo.pipe";
+import {TestBed} from "@angular/core/testing";
 
 
 describe('Service info Pipe', () => {
   let pipe: ServiceInfoPipe;
 
-  beforeEach(() => {
-    pipe = new ServiceInfoPipe();
-  });
 
-  it('Service info Pipe should return model name', () => {
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+
+    });
+    await TestBed.compileComponents();
+    pipe = new ServiceInfoPipe();
+
+
+  })().then(done).catch(done.fail));
+
+
+  test('Service info Pipe should return model name', () => {
     let store = {
       getState : function() {
         return {
@@ -24,7 +33,7 @@
 
 
 
-  it('Service info Pipe should return null if  field name not exist', () => {
+  test('Service info Pipe should return null if  field name not exist', () => {
     let store = {
       getState : function() {
         return {
@@ -38,7 +47,7 @@
     expect(result).toBeNull();
   });
 
-  it('Service info Pipe should return null if  model not exist', () => {
+  test('Service info Pipe should return null if  model not exist', () => {
     let store = {
       getState : function() {
         return {
@@ -53,6 +62,6 @@
   });
 
   function generateserviceHierarchy(){
-    return JSON.parse('{"6e59c5de-f052-46fa-aa7e-2fca9d674c44":{"service":{"uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"ComplexService","version":"1.0","toscaModelURL":null,"category":"Mobility","serviceType":"","serviceRole":"","description":"ComplexService","serviceEcompNaming":"true","instantiationType":"Macro","inputs":{}},"vnfs":{"VF_vMee 0":{"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","description":"VSP_vMee","name":"VF_vMee","version":"2.0","customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","inputs":{},"commands":{},"properties":{"gpb2_Internal2_mac":"00:80:37:0E:02:22","sctp-b-ipv6-egress_src_start_port":"0","sctp-a-ipv6-egress_rule_application":"any","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","sctp-a-egress_rule_application":"any","sctp-b-ingress_action":"pass","sctp-b-ingress_rule_protocol":"icmp","ncb2_Internal1_mac":"00:80:37:0E:0F:12","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:80:37:0E:09:12","fsb_volume_size_0":"320.0","sctp-b-egress_src_addresses":"local","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-ingress_rule_protocol":"icmp","sctp-b-egress-src_start_port":"0.0","sctp-a-egress_src_addresses":"local","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-a-egress-src_start_port":"0.0","sctp-a-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","gpb1_Internal1_mac":"00:80:37:0E:01:22","sctp-b-egress_dst_subnet_prefix_len":"0.0","Internal2_net_cidr":"169.255.0.0","sctp-a-ingress-dst_start_port":"0.0","sctp-a-egress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:80:37:0E:0B:12","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-ipv6-egress_rule_application":"any","sctp-b-egress_action":"pass","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","fsb2_Internal1_mac":"00:80:37:0E:0D:12","sctp-a-ipv6-ingress-src_start_port":"0.0","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"169.253.0.0","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","sctp-a-ipv6-ingress_rule_application":"any","ecomp_generated_naming":"true","sctp-a-IPv6_ethertype":"IPv6","vlc2_Internal1_mac":"00:80:37:0E:02:12","vlc_st_virtualization_type":"virtual-machine","sctp-b-ingress-dst_start_port":"0.0","sctp-b-ingress-dst_end_port":"65535.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","int2_sec_group_name":"int2-sec-group","vlc_flavor_name":"nd.c16r64d1","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress-dst_start_port":"0","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_shared":"false","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:80:37:0E:01:12","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:80:37:0E:09:12","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","sctp-a-ipv6-egress_dst_end_port":"65535","Internal2_forwarding_mode":"l2","fsb2_Internal2_mac":"00:80:37:0E:0D:12","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:80:37:0E:02:22","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-ingress_dst_addresses":"local","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:80:37:0E:0F:12","vlc_st_interface_type_sctp_a":"left","vlc_st_interface_type_sctp_b":"right","sctp-a-src_subnet_prefix_v6":"::","vlc_st_version":"2","sctp-b-egress_ethertype":"IPv4","sctp-a-ingress_rule_application":"any","gpb1_Internal2_mac":"00:80:37:0E:01:22","instance_ip_family_v6":"v6","sctp-a-ipv6-egress_src_start_port":"0","sctp-b-ingress-src_start_port":"0.0","sctp-b-ingress_dst_addresses":"local","fsb1_Internal1_mac":"00:80:37:0E:0B:12","vlc_st_interface_type_oam":"management","multi_stage_design":"false","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"169.255.0.3","sctp-a-ipv6-ingress-dst_end_port":"65535","sctp-b-ipv6-egress-dst_start_port":"0","Internal1_net_gateway":"169.253.0.3","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-a-egress_rule_protocol":"icmp","sctp-b-ipv6-egress_action":"pass","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-a-ingress_action":"pass","sctp-b-egress_rule_protocol":"icmp","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","sctp-b-ipv6-ingress-dst_start_port":"0","vlc2_Internal2_mac":"00:80:37:0E:02:12","vlc_st_availability_zone":"true","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","Internal1_allow_transit":"true","gpb_flavor_name":"nv.c20r64d1","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-ingress_ethertype":"IPv4","vlc1_Internal2_mac":"00:80:37:0E:01:12","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-egress_rule_application":"any","sctp-b-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"},"type":"VF","modelCustomizationName":"VF_vMee 0","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{},"commands":{},"properties":{"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{"Port Mirroring Configuration By Policy 0":{"uuid":"b4398538-e89d-4f13-b33d-ca323434ba50","invariantUuid":"6ef0ca40-f366-4897-951f-abd65d25f6f7","description":"A port mirroring configuration by policy object","name":"Port Mirroring Configuration By Policy","version":"27.0","customizationUuid":"3c3b7b8d-8669-4b3b-8664-61970041fad2","inputs":{},"commands":{},"properties":{},"type":"Configuration","modelCustomizationName":"Port Mirroring Configuration By Policy 0","sourceNodes":[],"collectorNodes":null,"configurationByPolicy":false}},"serviceProxies":{},"vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"pnfs":{}}}');
+    return JSON.parse('{"6e59c5de-f052-46fa-aa7e-2fca9d674c44":{"service":{"uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"ComplexService","version":"1.0","toscaModelURL":null,"category":"Emanuel","serviceType":"","serviceRole":"","description":"ComplexService","serviceEcompNaming":"true","instantiationType":"Macro","inputs":{}},"vnfs":{"VF_vMee 0":{"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","description":"VSP_vMee","name":"VF_vMee","version":"2.0","customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","inputs":{},"commands":{},"properties":{"gpb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_start_port":"0","sctp-a-ipv6-egress_rule_application":"any","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","sctp-a-egress_rule_application":"any","sctp-b-ingress_action":"pass","sctp-b-ingress_rule_protocol":"icmp","ncb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:11:22:EF:AC:DF","fsb_volume_size_0":"320.0","sctp-b-egress_src_addresses":"local","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-ingress_rule_protocol":"icmp","sctp-b-egress-src_start_port":"0.0","sctp-a-egress_src_addresses":"local","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-a-egress-src_start_port":"0.0","sctp-a-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","gpb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-egress_dst_subnet_prefix_len":"0.0","Internal2_net_cidr":"10.0.0.10","sctp-a-ingress-dst_start_port":"0.0","sctp-a-egress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-ipv6-egress_rule_application":"any","sctp-b-egress_action":"pass","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","fsb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-a-ipv6-ingress-src_start_port":"0.0","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"10.0.0.10","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","sctp-a-ipv6-ingress_rule_application":"any","ecomp_generated_naming":"true","sctp-a-IPv6_ethertype":"IPv6","vlc2_Internal1_mac":"00:11:22:EF:AC:DF","vlc_st_virtualization_type":"virtual-machine","sctp-b-ingress-dst_start_port":"0.0","sctp-b-ingress-dst_end_port":"65535.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","int2_sec_group_name":"int2-sec-group","vlc_flavor_name":"nd.c16r64d1","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress-dst_start_port":"0","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_shared":"false","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","sctp-a-ipv6-egress_dst_end_port":"65535","Internal2_forwarding_mode":"l2","fsb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-ingress_dst_addresses":"local","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_sctp_a":"left","vlc_st_interface_type_sctp_b":"right","sctp-a-src_subnet_prefix_v6":"::","vlc_st_version":"2","sctp-b-egress_ethertype":"IPv4","sctp-a-ingress_rule_application":"any","gpb1_Internal2_mac":"00:11:22:EF:AC:DF","instance_ip_family_v6":"v6","sctp-a-ipv6-egress_src_start_port":"0","sctp-b-ingress-src_start_port":"0.0","sctp-b-ingress_dst_addresses":"local","fsb1_Internal1_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_oam":"management","multi_stage_design":"false","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"10.0.0.10","sctp-a-ipv6-ingress-dst_end_port":"65535","sctp-b-ipv6-egress-dst_start_port":"0","Internal1_net_gateway":"10.0.0.10","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-a-egress_rule_protocol":"icmp","sctp-b-ipv6-egress_action":"pass","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-a-ingress_action":"pass","sctp-b-egress_rule_protocol":"icmp","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","sctp-b-ipv6-ingress-dst_start_port":"0","vlc2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_availability_zone":"true","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","Internal1_allow_transit":"true","gpb_flavor_name":"nv.c20r64d1","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-ingress_ethertype":"IPv4","vlc1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-egress_rule_application":"any","sctp-b-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"},"type":"VF","modelCustomizationName":"VF_vMee 0","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{},"commands":{},"properties":{"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{"Port Mirroring Configuration By Policy 0":{"uuid":"b4398538-e89d-4f13-b33d-ca323434ba50","invariantUuid":"6ef0ca40-f366-4897-951f-abd65d25f6f7","description":"A port mirroring configuration by policy object","name":"Port Mirroring Configuration By Policy","version":"27.0","customizationUuid":"3c3b7b8d-8669-4b3b-8664-61970041fad2","inputs":{},"commands":{},"properties":{},"type":"Configuration","modelCustomizationName":"Port Mirroring Configuration By Policy 0","sourceNodes":[],"collectorNodes":null,"configurationByPolicy":false}},"serviceProxies":{},"vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"pnfs":{}}}');
   }
 });
diff --git a/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.ts b/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.ts
index 8cb2e1d..2876362 100644
--- a/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.ts
+++ b/vid-webpack-master/src/app/shared/pipes/serviceInfo/serviceInfo.pipe.ts
@@ -1,11 +1,11 @@
 import {PipeTransform, Pipe} from '@angular/core';
-import {isNullOrUndefined} from "util";
+import * as _ from 'lodash';
 
 @Pipe({ name: 'serviceInfo'})
 export class ServiceInfoPipe implements PipeTransform {
   transform(service: string, store : any , modelId : string, fieldName : string): string {
     const serviceHierarchy = store.getState().service.serviceHierarchy;
-    if(!isNullOrUndefined(serviceHierarchy) && !isNullOrUndefined(serviceHierarchy[modelId])){
+    if(!_.isNil(serviceHierarchy) && !_.isNil(serviceHierarchy[modelId])){
       return serviceHierarchy[modelId].service[fieldName] || null;
     }
     return null;
diff --git a/vid-webpack-master/src/app/shared/resolvers/flag/flag.resolver.spec.ts b/vid-webpack-master/src/app/shared/resolvers/flag/flag.resolver.spec.ts
new file mode 100644
index 0000000..930562c
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/resolvers/flag/flag.resolver.spec.ts
@@ -0,0 +1,61 @@
+import {TestBed, getTestBed} from '@angular/core/testing';
+import {
+  HttpClientTestingModule,
+  HttpTestingController
+} from '@angular/common/http/testing';
+import {NgRedux} from "@angular-redux/store";
+import {FeatureFlagsService} from "../../services/featureFlag/feature-flags.service";
+import {ActivatedRouteSnapshot, convertToParamMap} from "@angular/router";
+import {FlagsResolve} from "./flag.resolver";
+import {ConfigurationService} from "../../services/configuration.service";
+
+class MockAppStore<T> {
+  getState() {
+    return {
+      service: {
+        serviceInstance: {}
+      }
+    }
+  }
+}
+
+
+describe('Flag resolver', () => {
+  let injector;
+  let resolver: FlagsResolve;
+  let configurationService: ConfigurationService;
+  let httpMock: HttpTestingController;
+
+  let activatedRouteSnapshot: ActivatedRouteSnapshot;
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [
+        FlagsResolve,
+        ConfigurationService,
+        FeatureFlagsService,
+        {provide: NgRedux, useClass: MockAppStore},
+        {
+          provide: ActivatedRouteSnapshot, useValue: {
+            queryParamMap:
+              convertToParamMap({ })
+          }
+        },
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    resolver = injector.get(FlagsResolve);
+    httpMock = injector.get(HttpTestingController);
+    activatedRouteSnapshot = injector.get(ActivatedRouteSnapshot);
+    configurationService = injector.get(ConfigurationService);
+
+  })().then(done).catch(done.fail));
+
+  test('should update flags', () => {
+    spyOn(configurationService, 'getFlags');
+    resolver.resolve(activatedRouteSnapshot);
+    expect(configurationService.getFlags).toHaveBeenCalled();
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/resolvers/flag/flag.resolver.ts b/vid-webpack-master/src/app/shared/resolvers/flag/flag.resolver.ts
new file mode 100644
index 0000000..7ebce8b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/resolvers/flag/flag.resolver.ts
@@ -0,0 +1,14 @@
+import {ActivatedRouteSnapshot, Resolve} from "@angular/router";
+import {Injectable} from "@angular/core";
+import {Observable} from "rxjs";
+import {ConfigurationService} from "../../services/configuration.service";
+
+@Injectable()
+export class FlagsResolve implements Resolve<Observable< { [key: string]: boolean }>> {
+
+  constructor(private _configurationService: ConfigurationService) {}
+
+  resolve(route: ActivatedRouteSnapshot) {
+    return this._configurationService.getFlags();
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/resolvers/retry/retry.resolver.spec.ts b/vid-webpack-master/src/app/shared/resolvers/retry/retry.resolver.spec.ts
new file mode 100644
index 0000000..2578d7b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/resolvers/retry/retry.resolver.spec.ts
@@ -0,0 +1,306 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {NgRedux} from "@angular-redux/store";
+import {ActivatedRouteSnapshot, convertToParamMap} from "@angular/router";
+import {AppState} from "../../store/reducers";
+import {RetryResolver} from "./retry.resolver";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {FeatureFlagsService} from "../../services/featureFlag/feature-flags.service";
+import {Observable, of} from "rxjs";
+
+class MockAppStore<T> {
+  getState() {
+    return {
+      global:{
+        drawingBoardStatus: "VIEW"
+      },
+      service: {
+        serviceInstance: {}
+      }
+    }
+  }
+  dispatch(){
+
+  }
+}
+
+
+describe('View Edit resolver', () => {
+  let injector;
+  let aaiService: AaiService;
+  let resolver: RetryResolver;
+  let httpMock: HttpTestingController;
+  let store : NgRedux<AppState>;
+  let activatedRouteSnapshot: ActivatedRouteSnapshot;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [
+        FeatureFlagsService,
+        RetryResolver,
+        AaiService,
+        {provide: NgRedux, useClass: MockAppStore},
+        {
+          provide: ActivatedRouteSnapshot, useValue: {
+            queryParamMap:
+              convertToParamMap({
+                serviceModelId: 'serviceModelId',
+                subscriberId: 'subscriberId',
+                serviceType: 'serviceType',
+                serviceInstanceId : 'serviceInstanceId',
+                jobId : 'jobId'
+              })
+          },
+
+        }
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    aaiService = injector.get(AaiService);
+    resolver = injector.get(RetryResolver);
+    httpMock = injector.get(HttpTestingController);
+    activatedRouteSnapshot = injector.get(ActivatedRouteSnapshot);
+    store = injector.get(NgRedux)
+
+  })().then(done).catch(done.fail));
+
+
+  test("should call get all parameter's from url", () => {
+      expect(activatedRouteSnapshot.queryParamMap.get("serviceModelId")).toBe('serviceModelId');
+      expect(activatedRouteSnapshot.queryParamMap.get("subscriberId")).toBe('subscriberId');
+      expect(activatedRouteSnapshot.queryParamMap.get("serviceType")).toBe('serviceType');
+      expect(activatedRouteSnapshot.queryParamMap.get("serviceInstanceId")).toBe('serviceInstanceId');
+      expect(activatedRouteSnapshot.queryParamMap.get("jobId")).toBe('jobId');
+  });
+
+
+  test("should return retry topology", () => {
+      jest.spyOn(aaiService, 'getServiceModelById').mockReturnValue(of({}));
+      jest.spyOn(aaiService, 'retrieveAndStoreServiceInstanceTopology').mockReturnValue(of({
+        "vnfs": {
+          "2017-388_ADIOD-vPE 0": {
+            "vfModules": {},
+            "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+            "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "lineOfBusiness": "ONAP",
+            "platformName": "platform",
+            "modelInfo": {
+              "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+              "modelVersionId": "afacccf6-397d-45d6-b5ae-94c39734b168",
+              "modelName": "2017-388_ADIOD-vPE",
+              "modelVersion": "4.0",
+              "modelCustomizationId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+              "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+              "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168"
+            },
+            "instanceName": "2017388_ADIODvPEmCaNkinstanceName",
+            "legacyRegion": "some legacy region"
+          },
+          "2017-488_ADIOD-vPE 0": {
+            "vfModules": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0uvfot": {
+                  "instanceName": "VFinstancenameZERO",
+                  "modelInfo": {
+                    "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                    "modelVersionId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                    "modelName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "modelVersion": "5",
+                    "modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+                  },
+                  "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                  "provStatus": "Prov Status",
+                  "orchStatus": "Active",
+                  "inMaint": true
+                }
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1fshmc": {
+                  "instanceName": "VFinstancename",
+                  "volumeGroupName": "VFinstancename_vol_abc",
+                  "orchStatus": "Create",
+                  "provStatus": "Prov Status",
+                  "inMaint": false,
+                  "modelInfo": {
+                    "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "modelVersion": "6",
+                    "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                  },
+                  "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                }
+              }
+            },
+            "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+            "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "lineOfBusiness": "ONAP",
+            "platformName": "platform",
+            "modelInfo": {
+              "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+              "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+              "modelName": "2017-488_ADIOD-vPE",
+              "modelVersion": "5.0",
+              "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+              "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+              "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+            },
+            "orchStatus": "Created",
+            "inMaint": false,
+            "instanceName": "2017488_ADIODvPEVNFinstancename",
+            "legacyRegion": "some legacy region"
+          },
+          "2017-488_ADIOD-vPE 0:0001": {
+            "vfModules": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0uvfot": {
+                  "instanceName": "VFinstancenameZERO_001",
+                  "provStatus": "Prov Status",
+                  "inMaint": true,
+                  "modelInfo": {
+                    "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                    "modelVersionId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                    "modelName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "modelVersion": "5",
+                    "modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+                  },
+                  "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+                }
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1fshmc": {
+                  "instanceName": "VFinstancename_001",
+                  "volumeGroupName": "VFinstancename_vol_abc_001",
+                  "modelInfo": {
+                    "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "modelVersion": "6",
+                    "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                  },
+                  "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                }
+              }
+            },
+
+            "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+            "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "lineOfBusiness": "ONAP",
+            "platformName": "platform",
+            "modelInfo": {
+              "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+              "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+              "modelName": "2017-488_ADIOD-vPE",
+              "modelVersion": "5.0",
+              "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+              "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+              "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+            },
+            "instanceName": "2017488_ADIODvPEVNFinstancename_001",
+            "legacyRegion": "some legacy region"
+          },
+          "2017-488_ADIOD-vPE 0:0002": {
+            "vfModules": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0uvfot": {
+                  "instanceName": "VFinstancenameZERO_002",
+                  "modelInfo": {
+                    "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                    "modelVersionId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                    "modelName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "modelVersion": "5",
+                    "modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                    "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+                  },
+                  "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+                }
+              },
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+                "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1fshmc": {
+                  "instanceName": "VFinstancename_002",
+                  "volumeGroupName": "VFinstancename_vol_abc_002",
+                  "modelInfo": {
+                    "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                    "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                    "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "modelVersion": "6",
+                    "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                    "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                    "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                  },
+                  "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                }
+              }
+            },
+            "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+            "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+            "lcpCloudRegionId": "JANET25",
+            "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+            "lineOfBusiness": "ONAP",
+            "platformName": "platform",
+            "modelInfo": {
+              "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+              "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+              "modelName": "2017-488_ADIOD-vPE",
+              "modelVersion": "5.0",
+              "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+              "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+              "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+            },
+            "instanceName": "2017488_ADIODvPEVNFinstancename_002",
+            "legacyRegion": "some legacy region"
+          }
+        },
+        "vnfGroups": {},
+        "existingVnfGroupCounterMap": {},
+        "validationCounter": 0,
+        "existingVNFCounterMap": {
+          "afacccf6-397d-45d6-b5ae-94c39734b168": 1,
+          "69e09f68-8b63-4cc9-b9ff-860960b5db09": 3
+        },
+        "existingNetworksCounterMap": {},
+        "instanceName": "mCaNkinstancename",
+        "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+        "subscriptionServiceType": "TYLER SILVIA",
+        "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+        "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+        "lcpCloudRegionId": "hvf6",
+        "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+        "aicZoneId": "NFT1",
+        "projectName": "WATKINS",
+        "rollbackOnFailure": "true",
+        "aicZoneName": "NFTJSSSS-NFT1",
+        "owningEntityName": "WayneHolland",
+        "tenantName": "AIN Web Tool-15-D-testalexandria",
+        "modelInfo": {
+          "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+          "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+          "modelName": "action-data",
+          "modelVersion": "1.0",
+          "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+        },
+        "isALaCarte": false,
+        "orchStatus": "Active",
+        "modelInavariantId": "6b528779-44a3-4472-bdff-9cd15ec93450"
+      }));
+  });
+
+});
diff --git a/vid-webpack-master/src/app/shared/resolvers/retry/retry.resolver.ts b/vid-webpack-master/src/app/shared/resolvers/retry/retry.resolver.ts
new file mode 100644
index 0000000..5e2250a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/resolvers/retry/retry.resolver.ts
@@ -0,0 +1,27 @@
+import {ActivatedRouteSnapshot, Resolve} from "@angular/router";
+import {Injectable} from "@angular/core";
+import {Observable} from "rxjs";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {forkJoin} from "rxjs/observable/forkJoin";
+import {AppState} from "../../store/reducers";
+import {NgRedux} from "@angular-redux/store";
+import {createServiceInstance} from "../../storeUtil/utils/service/service.actions";
+
+@Injectable()
+export class RetryResolver implements Resolve<Observable<boolean>> {
+
+  constructor(private _aaiService: AaiService, private _store: NgRedux<AppState>) {}
+
+  resolve(route: ActivatedRouteSnapshot): Observable<boolean> {
+    const serviceModelId: string = route.queryParamMap.get("serviceModelId");
+    const jobId: string = route.queryParamMap.get("jobId");
+
+    let serviceModelApi = this._aaiService.getServiceModelById(serviceModelId);
+
+    let serviceInstanceApi = this._aaiService.retrieveAndStoreServiceInstanceRetryTopology(jobId, serviceModelId);
+    return forkJoin([serviceModelApi, serviceInstanceApi]).map(([serviceModel, serviceInstance ]) => {
+      this._store.dispatch(createServiceInstance( serviceInstance, serviceModelId));
+      return true;
+    });
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/resolvers/viewEdit/viewEdit.resolver.spec.ts b/vid-webpack-master/src/app/shared/resolvers/viewEdit/viewEdit.resolver.spec.ts
new file mode 100644
index 0000000..6e8fdc7
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/resolvers/viewEdit/viewEdit.resolver.spec.ts
@@ -0,0 +1,82 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {NgRedux} from "@angular-redux/store";
+import {ViewEditResolver} from "./viewEdit.resolver";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {FeatureFlagsService} from "../../services/featureFlag/feature-flags.service";
+import {ActivatedRouteSnapshot, convertToParamMap} from "@angular/router";
+import {AppState} from "../../store/reducers";
+import {UpdateDrawingBoardStatusAction} from "../../storeUtil/utils/global/global.actions";
+
+class MockAppStore<T> {
+  getState() {
+    return {
+      global:{
+        drawingBoardStatus: "VIEW"
+      },
+      service: {
+        serviceInstance: {}
+      }
+    }
+  }
+  dispatch(){
+
+  }
+}
+
+
+describe('View Edit resolver', () => {
+  let injector;
+  let aaiService: AaiService;
+  let resolver: ViewEditResolver;
+  let httpMock: HttpTestingController;
+  let store : NgRedux<AppState>;
+
+  let activatedRouteSnapshot: ActivatedRouteSnapshot;
+  let updateDrawingBoardStatusAction: UpdateDrawingBoardStatusAction;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [
+        ViewEditResolver,
+        AaiService,
+        FeatureFlagsService,
+        {provide: NgRedux, useClass: MockAppStore},
+        {
+          provide: ActivatedRouteSnapshot, useValue: {
+            queryParamMap:
+              convertToParamMap({
+                serviceModelId: 'serviceModelId',
+                subscriberId: 'subscriberId',
+                serviceType: 'serviceType',
+                serviceInstanceId : 'serviceInstanceId'
+              })
+          },
+
+        }
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    aaiService = injector.get(AaiService);
+    resolver = injector.get(ViewEditResolver);
+    httpMock = injector.get(HttpTestingController);
+    activatedRouteSnapshot = injector.get(ActivatedRouteSnapshot);
+    store = injector.get(NgRedux)
+
+  })().then(done).catch(done.fail));
+
+
+  test('should call both api', () => {
+    // spyOn(aaiService, 'getServiceModelById');
+    // spyOn(aaiService, 'retrieveAndStoreServiceInstanceTopology');
+    // spyOn(store, 'dispatch');
+    // resolver.resolve(activatedRouteSnapshot);
+    //
+    // expect(aaiService.getServiceModelById).toHaveBeenCalledWith('serviceModelId');
+    // expect(aaiService.retrieveAndStoreServiceInstanceTopology).toHaveBeenCalledWith('serviceInstanceId', 'subscriberId', 'serviceType', 'serviceModelId');
+  });
+
+});
diff --git a/vid-webpack-master/src/app/shared/resolvers/viewEdit/viewEdit.resolver.ts b/vid-webpack-master/src/app/shared/resolvers/viewEdit/viewEdit.resolver.ts
new file mode 100644
index 0000000..d4aef19
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/resolvers/viewEdit/viewEdit.resolver.ts
@@ -0,0 +1,40 @@
+import {ActivatedRouteSnapshot, Resolve} from "@angular/router";
+import {Injectable} from "@angular/core";
+import {Observable} from "rxjs";
+import {AaiService} from "../../services/aaiService/aai.service";
+import {forkJoin} from "rxjs/observable/forkJoin";
+import {AppState} from "../../store/reducers";
+import {NgRedux} from "@angular-redux/store";
+import {createServiceInstance} from "../../storeUtil/utils/service/service.actions";
+
+@Injectable()
+export class ViewEditResolver implements Resolve<Observable<boolean>> {
+
+  constructor(private _aaiService: AaiService, private _store: NgRedux<AppState>) {
+  }
+
+  resolve(route: ActivatedRouteSnapshot): Observable<boolean> {
+    const serviceModeId: string = route.queryParamMap.get("serviceModelId");
+    const serviceInstanceId: string = route.queryParamMap.get("serviceInstanceId");
+    const subscriberId: string = route.queryParamMap.get("subscriberId");
+    const serviceType: string = route.queryParamMap.get("serviceType");
+      let serviceModelApi = this._aaiService.getServiceModelById(serviceModeId);
+      let serviceInstanceApi = this._aaiService.retrieveAndStoreServiceInstanceTopology(serviceInstanceId, subscriberId, serviceType, serviceModeId);
+      return forkJoin([serviceModelApi, serviceInstanceApi]).map(([serviceModel, serviceInstance ]) => {
+        this.setIsALaCarte(serviceInstance,serviceModel.service.instantiationType );
+        this.setTestApi(serviceInstance);
+        this._store.dispatch(createServiceInstance( serviceInstance, serviceModeId));
+          return true;
+        });
+  }
+
+  setTestApi = (service: any) => {
+    if (this._store.getState().global.flags['FLAG_ADD_MSO_TESTAPI_FIELD'] && service.isALaCarte) {
+      service.testApi = sessionStorage.getItem("msoRequestParametersTestApiValue");
+    }
+  };
+  setIsALaCarte = (service: any, instantiationType) => {
+    service.isALaCarte = instantiationType === 'A-La-Carte';
+  };
+
+}
diff --git a/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.spec.ts b/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.spec.ts
deleted file mode 100644
index 36f6349..0000000
--- a/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.spec.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-import {TestBed, inject, getTestBed} from '@angular/core/testing';
-
-import { HealthStatusService } from './health-status.service';
-import {Constants} from "../../utils/constants";
-import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing";
-import {ExternalComponentStatus} from "../../models/externalComponentStatus";
-
-describe('HealthStatusService', () => {
-
-  let injector;
-  let service: HealthStatusService;
-  let httpMock: HttpTestingController;
-
-  beforeEach(() => {
-    TestBed.configureTestingModule({
-      imports: [HttpClientTestingModule],
-      providers: [HealthStatusService]
-    });
-
-    injector = getTestBed();
-    service = injector.get(HealthStatusService);
-    httpMock = injector.get(HttpTestingController);
-  });
-
-  describe('#getProbe', () =>{
-    it('when call probe, there is http GET with right url', () => {
-
-      service.getProbe().subscribe((result: Array<ExternalComponentStatus>)=>{
-        expect(result[0].component).toEqual("AAI");
-        expect(result[0].available).toBeTruthy();
-        expect(result[0].metadata).toEqual({ myKey: 'myValue' });
-
-        expect(result[1].component).toEqual("MSO");
-        expect(result[1].available).toBeFalsy();
-        expect(result[1].metadata).toEqual({otherKey: 123});
-      });
-
-      const req = httpMock.expectOne(Constants.Path.SERVICES_PROBE_PATH);
-      expect(req.request.method).toEqual('GET');
-      req.flush([
-        {
-          "component": "AAI",
-          "available": true,
-          "metadata": {
-            "myKey": "myValue"
-          }
-        },
-        {
-          "component": "MSO",
-          "available": false,
-          "metadata": {
-            "otherKey": 123
-          }
-        },
-      ]);
-    });
-
-  });
-
-});
diff --git a/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.ts b/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.ts
index 4305ab9..71e32f1 100644
--- a/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.ts
+++ b/vid-webpack-master/src/app/shared/server/healthStatusService/health-status.service.ts
@@ -1,6 +1,6 @@
 import { Injectable } from '@angular/core';
 import {HttpClient} from "@angular/common/http";
-import {Observable} from "rxjs/Observable";
+import {Observable} from "rxjs";
 import {Constants} from "../../utils/constants";
 import {ExternalComponentStatus} from "../../models/externalComponentStatus";
 
@@ -10,8 +10,8 @@
   constructor(private _http: HttpClient) {
   }
 
-  getProbe(): Observable<Array<ExternalComponentStatus>> {
+  getProbe(): Observable<ExternalComponentStatus[]> {
     let pathQuery = Constants.Path.SERVICES_PROBE_PATH;
-    return this._http.get<Array<ExternalComponentStatus>>(pathQuery).map(res => res);
+    return this._http.get<ExternalComponentStatus[]>(pathQuery).map(res => res);
   }
 }
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts
index 0b4c70f..a0920a9 100644
--- a/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/AuditStatus.model.ts
@@ -6,5 +6,7 @@
   jobStatus :string;
   source: string;
   requestId: string;
-  additionalInfo :any
+  additionalInfo :any;
+  instanceName: string;
+  instanceType : string;
 }
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts
index 0b46959..a507e07 100644
--- a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.model.ts
@@ -1,4 +1,5 @@
 import {ServiceStatus} from '../../../instantiationStatus/instantiationStatus.component.service';
+import {ServiceAction} from "../../models/serviceInstanceActions";
 
 export class ServiceInfoModel {
   id: number;
@@ -9,6 +10,8 @@
   numRow: number;
   uuid: string;
   userId: string;
+  requestId: string;
+  aLaCarte: boolean;
   jobStatus: string;
   pause: boolean;
   owningEntityId: string;
@@ -22,6 +25,7 @@
   regionName: string;
   serviceType: string;
   subscriberName: string;
+  subscriberId: string;
   serviceInstanceId: string;
   serviceInstanceName: string;
   serviceModelId: string;
@@ -30,6 +34,8 @@
   templateId: string;
   auditUserId: string;
   jobId: string;
+  action: ServiceAction;
+  isRetryEnabled: boolean;
 }
 
 export class ServiceInfoUiModel extends ServiceInfoModel{
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.spec.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.spec.ts
index 78c1b5a..147434b 100644
--- a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.spec.ts
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.spec.ts
@@ -9,59 +9,75 @@
   let service: ServiceInfoService;
   let httpMock: HttpTestingController;
 
-  beforeEach(() => {
+  beforeAll(done => (async () => {
     TestBed.configureTestingModule({
       imports: [HttpClientTestingModule],
       providers: [ServiceInfoService]
     });
+    await TestBed.compileComponents();
+
 
     injector = getTestBed();
     service = injector.get(ServiceInfoService);
     httpMock = injector.get(HttpTestingController);
-  });
 
-  describe('#getServicesJobInfo', () => {
-    it('should return an Observable<ServiceInfoModel[]>', () => {
-      const dummyServiceInfo: ServiceInfoModel[] = generateServiceInfoData();
+  })().then(done).catch(done.fail));
 
-      service.getServicesJobInfo(true).subscribe((serviceInfo:Array<ServiceInfoModel>) => {
-        expect(serviceInfo).toEqual(dummyServiceInfo);
-      });
-    });
+  describe('#getMacroJobAuditStatus', ()=> {
+    test('should return Observable<Object[]>', ()=>{
+      let job: ServiceInfoModel = new ServiceInfoModel();
+      job.jobId = '111';
 
+      service.getJobAuditStatus(job).subscribe();
+      const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + job.jobId + '?source=VID');
+      const req2 = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + job.jobId + '?source=MSO');
 
-  });
-
-  describe('#deleteJob', () =>{
-    it('delete job', () => {
-      const jobId : string = "1111";
-
-      service.deleteJob(jobId).subscribe();
-
-      const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + '/job/' + jobId);
-      expect(req.request.method).toEqual('DELETE');
-
+      expect(req.request.method).toBe('GET');
+      expect(req2.request.method).toBe('GET');
     });
   });
 
-  describe('#hideJob', () =>{
-    it('when call hide job, there is http POST with right url', () => {
-      const jobId : string = "3";
+  describe('#getALaCarteJobAuditStatus Without params', ()=> {
+    test('should return Observable<Object[]>', ()=>{
+      let job: ServiceInfoModel = new ServiceInfoModel();
+      job.aLaCarte = true;
+      job.jobId = '111';
 
-      service.hideJob(jobId).subscribe();
+      service.getJobAuditStatus(job).subscribe();
+      const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + job.jobId + '?source=VID');
+      const req2 = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + job.jobId + '/mso');
 
-      const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + '/hide/' + jobId);
-      expect(req.request.method).toEqual('POST');
+      expect(req.request.method).toEqual('GET');
+      expect(req2.request.method).toEqual('GET');
     });
   });
 
-  describe('#getJobAuditStatus', ()=> {
-    it('should return Observable<Object[]>', ()=>{
-      const jobId : string = '111';
+  describe('#getALaCarteJobAuditStatus With ServiceInstanceId', ()=> {
+    test('should return Observable<Object[]>', ()=>{
+      let job: ServiceInfoModel = new ServiceInfoModel();
+      job.aLaCarte = true;
+      job.jobId = '111';
+      job.serviceInstanceId = '222';
 
-      service.getJobAuditStatus(jobId).subscribe();
-      const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobId + '?source=VID');
-      const req2 = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobId + '?source=MSO');
+      service.getJobAuditStatus(job).subscribe();
+      const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + job.jobId + '?source=VID');
+      const req2 = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + job.jobId + '/mso?serviceInstanceId=' + job.serviceInstanceId);
+
+      expect(req.request.method).toEqual('GET');
+      expect(req2.request.method).toEqual('GET');
+    });
+  });
+
+  describe('#getALaCarteJobAuditStatus With RequestId', ()=> {
+    test('should return Observable<Object[]>', ()=>{
+      let job: ServiceInfoModel = new ServiceInfoModel();
+      job.aLaCarte = true;
+      job.jobId = '111';
+      job.requestId = '333';
+
+      service.getJobAuditStatus(job).subscribe();
+      const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + job.jobId + '?source=VID');
+      const req2 = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + job.jobId + '/mso?requestId=' + job.requestId);
 
       expect(req.request.method).toEqual('GET');
       expect(req2.request.method).toEqual('GET');
@@ -73,6 +89,7 @@
       [{
         "created": 1519956533000,
         "modified": 1521727738000,
+        "action": "INSTANTIATE",
         "createdId": null,
         "modifiedId": null,
         "rowNum": null,
@@ -105,6 +122,7 @@
       {
         "created": 1519956533000,
         "modified": 1521727738000,
+        "action": "INSTANTIATE",
         "createdId": null,
         "modifiedId": null,
         "rowNum": null,
@@ -137,6 +155,7 @@
       {
         "created": 1519956533000,
         "modified": 1521727738000,
+        "action": "INSTANTIATE",
         "createdId": null,
         "modifiedId": null,
         "rowNum": null,
@@ -169,6 +188,7 @@
       {
         "created": 1519956533000,
         "modified": 1521727738000,
+        "action": "INSTANTIATE",
         "createdId": null,
         "modifiedId": null,
         "rowNum": null,
@@ -201,6 +221,7 @@
       {
         "created": 1519956533000,
         "modified": 1521727738000,
+        "action": "INSTANTIATE",
         "createdId": null,
         "modifiedId": null,
         "rowNum": null,
diff --git a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.ts b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.ts
index e0057bb..fe6ebc7 100644
--- a/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.ts
+++ b/vid-webpack-master/src/app/shared/server/serviceInfo/serviceInfo.service.ts
@@ -1,19 +1,23 @@
 import {Injectable} from '@angular/core';
-import {Observable} from 'rxjs/Observable';
+import {Observable} from 'rxjs';
 import {ServiceInfoModel} from './serviceInfo.model';
-import {HttpClient} from '@angular/common/http';
-import 'rxjs/add/operator/map'
+import {HttpClient, HttpHeaders} from '@angular/common/http';
+import { of } from 'rxjs';
+import { map } from 'rxjs/operators';
 import {Constants} from '../../utils/constants';
 import {forkJoin} from "rxjs/observable/forkJoin";
+import * as _ from 'lodash';
+import {AuditStatus} from "./AuditStatus.model";
 
 @Injectable()
 export class ServiceInfoService {
   constructor(private _http: HttpClient) {
   }
 
-  getServicesJobInfo(filterByUser : boolean): Observable<ServiceInfoModel[]> {
+  getServicesJobInfo(filterByUser : boolean, showSpinner: boolean = true): Observable<ServiceInfoModel[]> {
     let pathQuery = Constants.Path.SERVICES_JOB_INFO_PATH;
-    return this._http.get<ServiceInfoModel[]>(pathQuery).map(res => res );
+    let headers = new HttpHeaders({'x-show-spinner': showSpinner.toString()});
+    return this._http.get<ServiceInfoModel[]>(pathQuery, { headers: headers }).map(res => res );
   }
 
   deleteJob(jobId: string): Observable<any> {
@@ -26,13 +30,42 @@
     return this._http.post<any>(pathQuery, null).map(res => res);
   }
 
-  getJobAuditStatus(jobId : string) : Observable<Object[]>{
-    let pathQueryVID = Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobId + '?source=VID';
-    let pathQueryMSO = Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobId + '?source=MSO';
+  getJobAuditStatus(jobData: ServiceInfoModel) : Observable<Object[]>{
+    let pathQueryBySource: string = Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobData.jobId + '?source=';
+    let pathQueryVID: string = pathQueryBySource + 'VID';
+    let pathQueryMSO: string;
+
+    // just call it
+    if(jobData.aLaCarte) {
+      let requestParams: string[] = [];
+      pathQueryMSO = Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + jobData.jobId + '/mso';
+      if (!_.isEmpty(jobData.requestId)) {
+        requestParams[requestParams.length] = 'requestId=' + jobData.requestId;
+      }
+      if (!_.isEmpty(jobData.serviceInstanceId)) {
+        requestParams[requestParams.length] = 'serviceInstanceId=' + jobData.serviceInstanceId;
+      }
+      if (requestParams.length > 0) {
+        pathQueryMSO += '?' + requestParams.join('&');
+      }
+    }
+    else {
+      pathQueryMSO = pathQueryBySource + 'MSO';
+    }
+
 
     let vidObs = this._http.get(pathQueryVID);
     let msoObs = this._http.get(pathQueryMSO);
     return forkJoin([vidObs, msoObs]);
   }
 
+  getInstanceAuditStatus(instanceId: string, type :string) : Observable<AuditStatus[]>{
+    let pathQuery: string =  Constants.Path.SERVICES_JOB_INFO_PATH + Constants.Path.SERVICES_JOB_AUDIT_PATH + '/' + type + '/' + instanceId + '/mso';
+    return this._http.get<any>(pathQuery).map(res => res);
+  }
+
+  getAuditStatusForRetry(trackById: string) : Observable<AuditStatus>{
+    let pathQuery: string = Constants.Path.AUDIT_STATUS_FOR_RETRY_PATH + '/' + trackById ;
+    return this._http.get<any>(pathQuery).map(res => res);
+  }
 }
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/aai.actions.ts b/vid-webpack-master/src/app/shared/services/aaiService/aai.actions.ts
new file mode 100644
index 0000000..dc234bd
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/aai.actions.ts
@@ -0,0 +1,77 @@
+import {Action, ActionCreator} from "redux";
+
+export const LOAD_PRODUCT_FAMILIES = '[PRODUCT_FAMILIES] Load';
+
+export const LOAD_LCP_TENANT = '[LCP_TENANT] Load';
+
+export const LOAD_AIC_ZONES = '[AIC_ZONES] Load';
+
+export const LOAD_CATEGORY_PARAMETERS = '[LOAD_CATEGORY_PARAMETERS] Load';
+
+export const LOAD_SERVICE_MDOEL_BY_UUID = '[LOAD_SERVICE_MDOEL_BY_UUID] Load';
+
+export const LOAD_NETWORK_ACCORDING_TO_NF = '[LOAD_NETWORK_ACCORDING_TO_NF] Load'
+
+export const LOAD_USER_ID = '[LOAD_USER_ID] Load'
+
+
+export interface LoadProductFamiliesAction extends Action {}
+
+interface LoadLcpTenant extends Action {}
+
+interface LoadAicZones extends Action {}
+
+interface LoadCategoryParameters extends Action {}
+
+interface LoadServiceModelByUuid extends Action {}
+
+interface LoadNetworkAccordingToNetworkCF extends Action{}
+
+interface LoadUserId extends Action{}
+
+
+export const loadServiceAccordingToUuid : ActionCreator<LoadServiceModelByUuid> =
+ (uuid : string) =>({
+   type : LOAD_SERVICE_MDOEL_BY_UUID,
+   modelId : uuid
+ })
+
+
+export const loadProductFamiliesAction: ActionCreator<LoadProductFamiliesAction> =
+  () => ({
+    type: LOAD_PRODUCT_FAMILIES,
+  });
+
+
+export const loadUserId: ActionCreator<LoadUserId> =
+() => ({
+  type: LOAD_USER_ID,
+});
+
+
+  export const loadLcpTenant: ActionCreator<LoadLcpTenant> =
+  (subscriberId : string, serviceType : string) => ({
+    type: LOAD_LCP_TENANT,
+    subscriberId : subscriberId,
+    serviceType : serviceType
+  });
+
+
+export const loadAicZones: ActionCreator<LoadAicZones> =
+  () => ({
+    type: LOAD_AIC_ZONES,
+  });
+
+export const loadCategoryParameters: ActionCreator<LoadCategoryParameters> =
+  () => ({
+    type: LOAD_CATEGORY_PARAMETERS,
+  });
+
+
+export const loadAaiNetworkAccordingToNetworkCF: ActionCreator<LoadNetworkAccordingToNetworkCF> =
+  (networkFunction,cloudOwner,cloudRegionId) => ({
+    type: LOAD_NETWORK_ACCORDING_TO_NF,
+    networkFunctions: networkFunction,
+    cloudOwner: cloudOwner,
+    cloudRegionId: cloudRegionId
+  });
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts b/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts
new file mode 100644
index 0000000..a850d55
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/aai.epics.ts
@@ -0,0 +1,81 @@
+import {Injectable} from '@angular/core';
+import {combineEpics, createEpicMiddleware, ofType} from 'redux-observable';
+import 'rxjs/add/operator/catch';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/do';
+import 'rxjs/add/operator/startWith';
+import {
+  LOAD_PRODUCT_FAMILIES,
+  LOAD_LCP_TENANT,
+  LOAD_AIC_ZONES,
+  LOAD_CATEGORY_PARAMETERS,
+  LOAD_SERVICE_MDOEL_BY_UUID,
+  LOAD_NETWORK_ACCORDING_TO_NF,
+  LOAD_USER_ID
+} from "./aai.actions";
+import {AaiService} from "./aai.service";
+import {AppState} from "../../store/reducers";
+import {
+  updateAicZones, updateCategoryParameters,
+  updateLcpRegionsAndTenants,
+  updateNetworkCollectionFunction,
+  updateProductFamilies, updateUserId
+} from "../../storeUtil/utils/general/general.actions";
+import {createServiceInstance} from "../../storeUtil/utils/service/service.actions";
+import {delay, mapTo} from "rxjs/operators";
+
+const notFetchedAlready = (state: AppState): boolean => state.service.productFamilies !== null;
+
+@Injectable()
+export class AAIEpics {
+  constructor(private aaiService: AaiService) {
+  }
+
+  public createEpic() {
+    return combineEpics(
+        this.loadProductFamiliesEpic
+      , this.loadLcpTenants
+      , this.loadAicZones
+      , this.loadCategoryParameters
+      , this.loadServiceAccordingToUuid
+      , this.loadNetworkAccordingToNetworkFunction
+      , this.loadUserId)
+  }
+
+  private loadLcpTenants = (action$, store) =>
+   action$.ofType(LOAD_LCP_TENANT)
+    .switchMap((action) => this.aaiService.getLcpRegionsAndTenants(action.subscriberId, action.serviceType)
+    .map(data => updateLcpRegionsAndTenants(data)));
+
+  private loadProductFamiliesEpic = (action$, store) => action$
+    .ofType(LOAD_PRODUCT_FAMILIES)
+    .switchMap(() => this.aaiService.getProductFamilies().map(data => updateProductFamilies(data)));
+
+  private loadCategoryParameters = (action$, store) => action$
+    .ofType(LOAD_CATEGORY_PARAMETERS)
+    .switchMap(() => this.aaiService.getCategoryParameters(null).map(data => updateCategoryParameters(data)));
+
+
+  private loadNetworkAccordingToNetworkFunction = (action$, store) => action$
+    .ofType(LOAD_NETWORK_ACCORDING_TO_NF)
+    .flatMap((action) => this.aaiService.getCRAccordingToNetworkFunctionId(action.networkFunctions, action.cloudOwner, action.cloudRegionId).map((res) =>
+      updateNetworkCollectionFunction(action.networkFunctions, res)));
+
+  private loadServiceAccordingToUuid = (action$, store) => action$
+    .ofType(LOAD_SERVICE_MDOEL_BY_UUID)
+    .switchMap((action) => this.aaiService.getServiceModelById(action.modelId)
+      .map(data => createServiceInstance(action.uuid, data)));
+
+  private loadUserId = (action$, store) => action$
+    .ofType(LOAD_USER_ID)
+    .switchMap(() => this.aaiService.getUserId()
+      .map(res => updateUserId(res)));
+
+
+  private loadAicZones = (action$, store) => action$
+    .ofType(LOAD_AIC_ZONES)
+    .switchMap(() => this.aaiService.getAicZones().map(data => updateAicZones(data)));
+  // .catch(response => of(this.actions.loadFailed(status)))
+  // .startWith(this.actions.loadStarted()));
+
+}
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/aai.service.spec.ts b/vid-webpack-master/src/app/shared/services/aaiService/aai.service.spec.ts
new file mode 100644
index 0000000..9f19f62
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/aai.service.spec.ts
@@ -0,0 +1,497 @@
+import {ServiceInstance} from "../../models/serviceInstance";
+import {RootObject} from "./model/crawledAaiService";
+import {AaiService} from "./aai.service";
+import {instance, mock, when} from "ts-mockito";
+import {FeatureFlagsService, Features} from "../featureFlag/feature-flags.service";
+import {HttpClientTestingModule, HttpTestingController} from "@angular/common/http/testing";
+import {getTestBed, TestBed} from "@angular/core/testing";
+import {NgRedux} from "@angular-redux/store";
+import {Constants} from "../../utils/constants";
+import {AppState} from "../../store/reducers";
+import {setOptionalMembersVnfGroupInstance} from "../../storeUtil/utils/vnfGroup/vnfGroup.actions";
+import each from 'jest-each';
+
+class MockAppStore<T> {
+  dispatch(){}
+  getState(){}
+}
+
+describe("AaiService", () => {
+
+  let injector;
+  let httpMock: HttpTestingController;
+  let aaiService: AaiService;
+  let mockFeatureFlagsService: FeatureFlagsService = mock(FeatureFlagsService);
+  let store : NgRedux<AppState>;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [
+        AaiService,
+        {provide: NgRedux, useClass: MockAppStore},
+        {provide: FeatureFlagsService, useValue: instance(mockFeatureFlagsService)}
+      ]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    httpMock = injector.get(HttpTestingController);
+    aaiService = injector.get(AaiService);
+    store = injector.get(NgRedux);
+
+  })().then(done).catch(done.fail));
+
+
+
+  describe('#resolve tests', () => {
+    test('aai service resolve should return the right object', () => {
+      let serviceInstance = new ServiceInstance();
+      aaiService.resolve(aaiServiceInstnace.root, serviceInstance);
+
+      expectedResult.vnfs['DROR_vsp'].trackById = serviceInstance.vnfs['DROR_vsp'].trackById;
+      expect(JSON.parse(JSON.stringify(serviceInstance.vnfs))).toEqual(expectedResult.vnfs);
+      expect(JSON.parse(JSON.stringify(serviceInstance.networks))).toEqual(expectedResult.networks);
+    });
+  });
+
+  describe('#serviceInstanceTopology tests', () => {
+    test('aai service get serviceInstanceTopolgetServiceInstanceTopologyResult.jsonogy from backend, and return ServiceInstance', () => {
+
+      const mockedResult = getTopology();
+      const serviceInstanceId: string = "id";
+      const subscriberId: string = "fakeSunId";
+      const serviceType: string = "justServiceType";
+      aaiService.retrieveServiceInstanceTopology(serviceInstanceId, subscriberId, serviceType).subscribe((result: ServiceInstance) => {
+        expect(result.instanceName).toEqual("mCaNkinstancename");
+        expect(result.modelInavariantId).toEqual("6b528779-44a3-4472-bdff-9cd15ec93450");
+        expect(result.vnfs["2017-388_ADIOD-vPE 0"].instanceName).toEqual("2017388_ADIODvPEmCaNkinstanceName");
+        expect(result.vnfs["2017-488_ADIOD-vPE 0"].
+          vfModules["2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0"]
+          ["2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0uvfot"].instanceName
+        ).toEqual("VFinstancenameZERO");
+      });
+
+      const req = httpMock.expectOne(`${Constants.Path.AAI_GET_SERVICE_INSTANCE_TOPOLOGY_PATH}${subscriberId}/${serviceType}/${serviceInstanceId}`);
+      expect(req.request.method).toEqual('GET');
+      req.flush(mockedResult);
+    });
+  });
+
+
+  describe('#retrieveAndStoreServiceInstanceRetryTopology tests', () => {
+    test('aai service get retrieveAndStoreServiceInstanceRetryTopology.jsonogy from backend, and return ServiceInstance', () => {
+
+      let mockedResult = getTopology();
+
+      const jobId: string = "jobId";
+      aaiService.retrieveServiceInstanceRetryTopology(jobId).subscribe((result: ServiceInstance) => {
+        expect(result.instanceName).toEqual("mCaNkinstancename");
+        expect(result.modelInavariantId).toEqual("6b528779-44a3-4472-bdff-9cd15ec93450");
+        expect(result.vnfs["2017-388_ADIOD-vPE 0"].instanceName).toEqual("2017388_ADIODvPEmCaNkinstanceName");
+        expect(result.vnfs["2017-488_ADIOD-vPE 0"].
+          vfModules["2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0"]
+          ["2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0uvfot"].instanceName
+        ).toEqual("VFinstancenameZERO");
+      });
+
+      const req = httpMock.expectOne(`${Constants.Path.SERVICES_RETRY_TOPOLOGY}/${jobId}`);
+      expect(req.request.method).toEqual('GET');
+      req.flush(mockedResult);
+    });
+  });
+
+  describe('# get optional group members tests', () =>{
+    test('aai service get getOptionalGroupMembers and return list of VnfMember', () => {
+      jest.spyOn(store, 'dispatch');
+      jest.spyOn(store, 'getState').mockReturnValue({
+        service :{
+          serviceInstance : {
+            "serviceModelId" : {
+              optionalGroupMembersMap : {}
+            }
+          }
+        }
+      });
+      const mockedResult = getMockMembers();
+      const serviceInvariantId: string = "serviceInvariantId";
+      const subscriberId: string = "subscriberId";
+      const serviceType: string = "serviceType";
+      const groupType: string = "groupType";
+      const groupRole: string = "groupRole";
+      const serviceModelId: string = "serviceModelId";
+       aaiService.getOptionalGroupMembers(serviceModelId, subscriberId, serviceType, serviceInvariantId, groupType, groupRole).subscribe((res)=>{
+         const path = `${Constants.Path.AAI_GET_SERVICE_GROUP_MEMBERS_PATH}${subscriberId}/${serviceType}/${serviceInvariantId}/${groupType}/${groupRole}`;
+         expect(store.dispatch).toHaveBeenCalledWith(setOptionalMembersVnfGroupInstance(serviceModelId, path, res));
+         expect(res.length).toEqual(2);
+        });
+
+
+      const req = httpMock.expectOne(`${Constants.Path.AAI_GET_SERVICE_GROUP_MEMBERS_PATH}${subscriberId}/${serviceType}/${serviceInvariantId}/${groupType}/${groupRole}`);
+      expect(req.request.method).toEqual('GET');
+      req.flush(mockedResult);
+    });
+  });
+  describe('#cloud owner tests', () => {
+    let featureFlagToLcpRegionName = [
+      ['aai service extract lcpRegion, flag is true=> lcp region include cloud owner', true, 'id (OWNER)' ],
+      ['aai service extract lcpRegion, flag is false=> lcp region doesnt include cloud owner', false, 'id']
+    ];
+
+    each(featureFlagToLcpRegionName).test("%s", (desc: string, flag: boolean, expectedName: string ) => {
+        when(mockFeatureFlagsService.getFlagState(Features.FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST)).thenReturn(flag);
+        let name: string = aaiService.extractLcpRegionName("id", "att-owner");
+        expect(name).toEqual(expectedName);
+    });
+
+    let cloudOwnerFormattingDataProvider = [
+      ['classic cloud owner', 'irma-aic', ' (AIC)'],
+      ['upper case cloud owner', 'IRMA-AIC', ' (AIC)'],
+      ['no att cloud owner', 'nc', ' (NC)'],
+    ];
+
+    each(cloudOwnerFormattingDataProvider).test('test cloudOwner trailer formatting %s', (desc: string, cloudOwner: string, expectedTrailer: string) => {
+      expect(AaiService.formatCloudOwnerTrailer(cloudOwner)).toEqual(expectedTrailer);
+    });
+  });
+
+  function getTopology() {
+    return  {
+      "vnfs": {
+        "2017-388_ADIOD-vPE 0": {
+          "vfModules": {},
+          "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+          "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "lcpCloudRegionId": "JANET25",
+          "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+          "lineOfBusiness": "ONAP",
+          "platformName": "platform",
+          "modelInfo": {
+            "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+            "modelVersionId": "afacccf6-397d-45d6-b5ae-94c39734b168",
+            "modelName": "2017-388_ADIOD-vPE",
+            "modelVersion": "4.0",
+            "modelCustomizationId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+            "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+            "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168"
+          },
+          "instanceName": "2017388_ADIODvPEmCaNkinstanceName",
+          "legacyRegion": "some legacy region"
+        },
+        "2017-488_ADIOD-vPE 0": {
+          "vfModules": {
+            "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0uvfot": {
+                "instanceName": "VFinstancenameZERO",
+                "modelInfo": {
+                  "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                  "modelVersionId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                  "modelName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                  "modelVersion": "5",
+                  "modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                  "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                  "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+                },
+                "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                "provStatus": "Prov Status",
+                "orchStatus": "Active",
+                "inMaint": true
+              }
+            },
+            "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1fshmc": {
+                "instanceName": "VFinstancename",
+                "volumeGroupName": "VFinstancename_vol_abc",
+                "orchStatus": "Create",
+                "provStatus": "Prov Status",
+                "inMaint": false,
+                "modelInfo": {
+                  "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                  "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                  "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                  "modelVersion": "6",
+                  "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                  "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                  "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                },
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+              }
+            }
+          },
+          "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+          "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "lcpCloudRegionId": "JANET25",
+          "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+          "lineOfBusiness": "ONAP",
+          "platformName": "platform",
+          "modelInfo": {
+            "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+            "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+            "modelName": "2017-488_ADIOD-vPE",
+            "modelVersion": "5.0",
+            "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+            "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+            "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+          },
+          "orchStatus": "Created",
+          "inMaint": false,
+          "instanceName": "2017488_ADIODvPEVNFinstancename",
+          "legacyRegion": "some legacy region"
+        },
+        "2017-488_ADIOD-vPE 0:0001": {
+          "vfModules": {
+            "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0uvfot": {
+                "instanceName": "VFinstancenameZERO_001",
+                "provStatus": "Prov Status",
+                "inMaint": true,
+                "modelInfo": {
+                  "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                  "modelVersionId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                  "modelName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                  "modelVersion": "5",
+                  "modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                  "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                  "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+                },
+                "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+              }
+            },
+            "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1fshmc": {
+                "instanceName": "VFinstancename_001",
+                "volumeGroupName": "VFinstancename_vol_abc_001",
+                "modelInfo": {
+                  "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                  "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                  "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                  "modelVersion": "6",
+                  "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                  "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                  "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                },
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+              }
+            }
+          },
+
+          "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+          "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "lcpCloudRegionId": "JANET25",
+          "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+          "lineOfBusiness": "ONAP",
+          "platformName": "platform",
+          "modelInfo": {
+            "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+            "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+            "modelName": "2017-488_ADIOD-vPE",
+            "modelVersion": "5.0",
+            "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+            "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+            "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+          },
+          "instanceName": "2017488_ADIODvPEVNFinstancename_001",
+          "legacyRegion": "some legacy region"
+        },
+        "2017-488_ADIOD-vPE 0:0002": {
+          "vfModules": {
+            "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0uvfot": {
+                "instanceName": "VFinstancenameZERO_002",
+                "modelInfo": {
+                  "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                  "modelVersionId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                  "modelName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                  "modelVersion": "5",
+                  "modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                  "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                  "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+                },
+                "uuid": "f8360508-3f17-4414-a2ed-6bc71161e8db"
+              }
+            },
+            "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_vRE_BV..module-1fshmc": {
+                "instanceName": "VFinstancename_002",
+                "volumeGroupName": "VFinstancename_vol_abc_002",
+                "modelInfo": {
+                  "modelInvariantId": "7253ff5c-97f0-4b8b-937c-77aeb4d79aa1",
+                  "modelVersionId": "25284168-24bb-4698-8cb4-3f509146eca5",
+                  "modelName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                  "modelVersion": "6",
+                  "modelCustomizationId": "f7e7c365-60cf-49a9-9ebf-a1aa11b9d401",
+                  "modelCustomizationName": "2017488AdiodVpe..ADIOD_vRE_BV..module-1",
+                  "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+                },
+                "uuid": "25284168-24bb-4698-8cb4-3f509146eca5"
+              }
+            }
+          },
+          "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+          "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "lcpCloudRegionId": "JANET25",
+          "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+          "lineOfBusiness": "ONAP",
+          "platformName": "platform",
+          "modelInfo": {
+            "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+            "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+            "modelName": "2017-488_ADIOD-vPE",
+            "modelVersion": "5.0",
+            "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+            "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+            "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09"
+          },
+          "instanceName": "2017488_ADIODvPEVNFinstancename_002",
+          "legacyRegion": "some legacy region"
+        }
+      },
+      "vnfGroups": {},
+      "existingVnfGroupCounterMap": {},
+      "validationCounter": 0,
+      "existingVNFCounterMap": {
+        "afacccf6-397d-45d6-b5ae-94c39734b168": 1,
+        "69e09f68-8b63-4cc9-b9ff-860960b5db09": 3
+      },
+      "existingNetworksCounterMap": {},
+      "instanceName": "mCaNkinstancename",
+      "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+      "subscriptionServiceType": "TYLER SILVIA",
+      "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+      "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+      "lcpCloudRegionId": "hvf6",
+      "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+      "aicZoneId": "NFT1",
+      "projectName": "WATKINS",
+      "rollbackOnFailure": "true",
+      "aicZoneName": "NFTJSSSS-NFT1",
+      "owningEntityName": "WayneHolland",
+      "tenantName": "AIN Web Tool-15-D-testalexandria",
+      "modelInfo": {
+        "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+        "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+        "modelName": "action-data",
+        "modelVersion": "1.0",
+        "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450"
+      },
+      "isALaCarte": false,
+      "orchStatus": "Active",
+      "modelInavariantId": "6b528779-44a3-4472-bdff-9cd15ec93450"
+    }
+  }
+
+  const getMockMembers = (): any[] => {
+    return [
+      {
+        "action":"None",
+        "instanceName":"VNF1_INSTANCE_NAME",
+        "instanceId":"VNF1_INSTANCE_ID",
+        "orchStatus":null,
+        "productFamilyId":null,
+        "lcpCloudRegionId":null,
+        "tenantId":null,
+        "modelInfo":{
+          "modelInvariantId":"vnf-instance-model-invariant-id",
+          "modelVersionId":"7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+          "modelVersion":"2.0",
+          "modelName":"vf_vEPDG",
+          "modelType":"vnf"
+        },
+        "instanceType":"VNF1_INSTANCE_TYPE",
+        "provStatus":null,
+        "inMaint":false,
+        "uuid":"7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+        "originalName":null,
+        "legacyRegion":null,
+        "lineOfBusiness":null,
+        "platformName":null,
+        "trackById":"7a6ee536-f052-46fa-aa7e-2fca9d674c44:002",
+        "serviceInstanceId":"service-instance-id1",
+        "serviceInstanceName":"service-instance-name"
+      },
+      {
+        "action":"None",
+        "instanceName":"VNF2_INSTANCE_NAME",
+        "instanceId":"VNF2_INSTANCE_ID",
+        "orchStatus":null,
+        "productFamilyId":null,
+        "lcpCloudRegionId":null,
+        "tenantId":null,
+        "modelInfo":{
+          "modelInvariantId":"vnf-instance-model-invariant-id",
+          "modelVersionId":"eb5f56bf-5855-4e61-bd00-3e19a953bf02",
+          "modelVersion":"1.0",
+          "modelName":"vf_vEPDG",
+          "modelType":"vnf"
+        },
+        "instanceType":"VNF2_INSTANCE_TYPE",
+        "provStatus":null,
+        "inMaint":true,
+        "uuid":"eb5f56bf-5855-4e61-bd00-3e19a953bf02",
+        "originalName":null,
+        "legacyRegion":null,
+        "lineOfBusiness":null,
+        "platformName":null,
+        "trackById":"eb5f56bf-5855-4e61-bd00-3e19a953bf02:003",
+        "serviceInstanceId":"service-instance-id2",
+        "serviceInstanceName":"service-instance-name"
+      }];
+  };
+});
+
+
+var expectedResult =
+  {
+    'vnfs': {
+      'DROR_vsp': {
+        'rollbackOnFailure': 'true',
+        'vfModules': {},
+        'isMissingData': false,
+        'originalName': 'DROR_vsp',
+        'orchStatus': 'Created',
+        'inMaint': false,
+        'vnfStoreKey' : null,
+        'trackById' : 'abc',
+        'action': 'Create'
+      }
+    },
+    "vnfGroups" :{},
+    "existingVNFCounterMap" : {},
+    "existingVnfGroupCounterMap" : {},
+    "existingNetworksCounterMap" : {},
+    'instanceParams': {},
+    'validationCounter': 0,
+    'existingNames': {},
+    'networks': {},
+    'instanceName': 'Dror123',
+    'orchStatus': 'Active',
+    'modelInavariantId': '35340388-0b82-4d3a-823d-cbddf842be52',
+    'action': 'Create'
+  };
+
+
+var aaiServiceInstnace: RootObject = {
+  "root": {
+    "type": "service-instance",
+    "orchestrationStatus": "Active",
+    "modelVersionId": "4e799efd-fd78-444d-bc25-4a3cde2f8cb0",
+    "modelCustomizationId": "4e799efd-fd78-444d-bc25-4a3cde2f8cb0",
+    "modelInvariantId": "35340388-0b82-4d3a-823d-cbddf842be52",
+    "id": "62888f15-6d24-4f7b-92a7-c3f35beeb215",
+    "name": "Dror123",
+    "children": [
+      {
+        "type": "generic-vnf",
+        "orchestrationStatus": "Created",
+        "provStatus": "PREPROV",
+        "inMaint": true,
+        "modelVersionId": "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0",
+        "modelCustomizationId": "11c6dc3e-cd6a-41b3-a50e-b5a10f7157d0",
+        "modelInvariantId": "55628ce3-ed56-40bd-9b27-072698ce02a9",
+        "id": "59bde732-9b84-46bd-a59a-3c45fee0538b",
+        "name": "DROR_vsp",
+        "children": []
+      }
+    ]
+  }
+};
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts b/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts
new file mode 100644
index 0000000..1b102e6
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/aai.service.ts
@@ -0,0 +1,619 @@
+import {NgRedux} from "@angular-redux/store";
+import {HttpClient} from '@angular/common/http';
+import {Injectable} from '@angular/core';
+import * as _ from 'lodash';
+import 'rxjs/add/operator/catch';
+import 'rxjs/add/operator/do';
+import {of} from "rxjs";
+
+import {AicZone} from "../../models/aicZone";
+import {CategoryParams} from "../../models/categoryParams";
+import {LcpRegion} from "../../models/lcpRegion";
+import {LcpRegionsAndTenants} from "../../models/lcpRegionsAndTenants";
+import {OwningEntity} from "../../models/owningEntity";
+import {ProductFamily} from "../../models/productFamily";
+import {Project} from "../../models/project";
+import {SelectOption} from '../../models/selectOption';
+import {ServiceType} from "../../models/serviceType";
+import {Subscriber} from "../../models/subscriber";
+import {Tenant} from "../../models/tenant";
+import {Constants} from '../../utils/constants';
+import {AppState} from "../../store/reducers";
+import {GetAicZonesResponse} from "./responseInterfaces/getAicZonesResponseInterface";
+import {GetCategoryParamsResponseInterface} from "./responseInterfaces/getCategoryParamsResponseInterface";
+import {GetServicesResponseInterface} from "./responseInterfaces/getServicesResponseInterface";
+import {GetSubDetailsResponse} from "./responseInterfaces/getSubDetailsResponseInterface";
+import {GetSubscribersResponse} from "./responseInterfaces/getSubscribersResponseInterface";
+import {Root} from "./model/crawledAaiService";
+import {VnfInstance} from "../../models/vnfInstance";
+import {VfModuleInstance} from "../../models/vfModuleInstance";
+import {ServiceInstance} from "../../models/serviceInstance";
+import {VfModuleMap} from "../../models/vfModulesMap";
+import {
+  updateAicZones,
+  updateCategoryParameters,
+  updateLcpRegionsAndTenants,
+  updateServiceTypes,
+  updateSubscribers,
+  updateUserId
+} from "../../storeUtil/utils/general/general.actions";
+import {updateModel, createServiceInstance} from "../../storeUtil/utils/service/service.actions";
+import {FeatureFlagsService, Features} from "../featureFlag/feature-flags.service";
+import {VnfMember} from "../../models/VnfMember";
+import {setOptionalMembersVnfGroupInstance} from "../../storeUtil/utils/vnfGroup/vnfGroup.actions";
+import {Observable} from "rxjs";
+
+@Injectable()
+export class AaiService {
+  constructor(private http: HttpClient, private store: NgRedux<AppState>, private featureFlagsService:FeatureFlagsService) {
+
+  }
+
+  getServiceModelById = (serviceModelId: string): Observable<any> => {
+    if (_.has(this.store.getState().service.serviceHierarchy, serviceModelId)) {
+      return of(<any> JSON.parse(JSON.stringify(this.store.getState().service.serviceHierarchy[serviceModelId])));
+    }
+    let pathQuery: string = Constants.Path.SERVICES_PATH + serviceModelId;
+    return this.http.get(pathQuery).map(res => res)
+      .do((res) => {
+        this.store.dispatch(updateModel(res));
+      });
+  };
+
+  getUserId = (): Observable<any> => {
+    return this.http.get("../../getuserID", {responseType: 'text'}).do((res) => this.store.dispatch(updateUserId(res)));
+  };
+
+
+  resolve = (root: Root, serviceInstance: ServiceInstance) => {
+    if (root.type === 'service-instance') {
+      serviceInstance.instanceName = root.name;
+      serviceInstance.orchStatus = root.orchestrationStatus;
+      serviceInstance.modelInavariantId = root.modelInvariantId;
+      for (let i = 0; i < root.children.length; i++) {
+        let child = root.children[i];
+        if (child.type === 'generic-vnf') {
+          let vnf = new VnfInstance();
+          vnf.originalName = child.name;
+          vnf.orchStatus = child.orchestrationStatus
+          if (child.children.length > 0) {
+            let vfModuleMap = new VfModuleMap();
+            for (let j = 0; j < child.children.length; j++) {
+              let child = root.children[i];
+              if (child.type === 'vf-module') {
+                let vfModule = new VfModuleInstance();
+                vfModule.instanceName = child.name;
+                vfModule.orchStatus = child.orchestrationStatus;
+                vfModuleMap.vfModules[child.name] = vfModule;
+              }
+            }
+            vnf.vfModules = {"a": vfModuleMap};
+          }
+          serviceInstance.vnfs[child.name] = vnf;
+
+        }
+      }
+
+    }
+  };
+
+
+  getCRAccordingToNetworkFunctionId = (networkCollectionFunction, cloudOwner, cloudRegionId) => {
+    return this.http.get('../../aai_get_instance_groups_by_cloudregion/' + cloudOwner + '/' + cloudRegionId + '/' + networkCollectionFunction)
+      .map(res => res).do((res) => console.log(res));
+  };
+
+  getCategoryParameters = (familyName): Observable<CategoryParams> => {
+    familyName = familyName || Constants.Path.PARAMETER_STANDARDIZATION_FAMILY;
+    let pathQuery: string = Constants.Path.GET_CATEGORY_PARAMETERS + "?familyName=" + familyName + "&r=" + Math.random();
+
+    return this.http.get<GetCategoryParamsResponseInterface>(pathQuery)
+      .map(this.categoryParametersResponseToProductAndOwningEntity)
+      .do(res => {
+        this.store.dispatch(updateCategoryParameters(res))
+      });
+  };
+
+
+  categoryParametersResponseToProductAndOwningEntity = (res: GetCategoryParamsResponseInterface): CategoryParams => {
+    if (res && res.categoryParameters) {
+      const owningEntityList = res.categoryParameters.owningEntity.map(owningEntity => new OwningEntity(owningEntity));
+      const projectList = res.categoryParameters.project.map(project => new Project(project));
+      const lineOfBusinessList = res.categoryParameters.lineOfBusiness.map(owningEntity => new SelectOption(owningEntity));
+      const platformList = res.categoryParameters.platform.map(platform => new SelectOption(platform));
+
+      return new CategoryParams(owningEntityList, projectList, lineOfBusinessList, platformList);
+    } else {
+      return new CategoryParams();
+    }
+  };
+
+  getProductFamilies = (): Observable<ProductFamily[]> => {
+
+    let pathQuery: string = Constants.Path.AAI_GET_SERVICES + Constants.Path.ASSIGN + Math.random();
+
+    return this.http.get<GetServicesResponseInterface>(pathQuery).map(res => res.service.map(service => new ProductFamily(service)));
+  };
+
+  getServices = (): Observable<GetServicesResponseInterface> => {
+    let pathQuery: string = Constants.Path.AAI_GET_SERVICES + Constants.Path.ASSIGN + Math.random();
+
+    return this.http.get<GetServicesResponseInterface>(pathQuery);
+  };
+
+  getSubscribers = (): Observable<Subscriber[]> => {
+
+    if (this.store.getState().service.subscribers) {
+      return of(<any> JSON.parse(JSON.stringify(this.store.getState().service.subscribers)));
+    }
+
+    let pathQuery: string = Constants.Path.AAI_GET_SUBSCRIBERS + Constants.Path.ASSIGN + Math.random();
+
+    return this.http.get<GetSubscribersResponse>(pathQuery).map(res =>
+      res.customer.map(subscriber => new Subscriber(subscriber))).do((res) => {
+      this.store.dispatch(updateSubscribers(res));
+    });
+  };
+
+  getAicZones = (): Observable<AicZone[]> => {
+    if (this.store.getState().service.aicZones) {
+      return of(<any> JSON.parse(JSON.stringify(this.store.getState().service.aicZones)));
+    }
+
+    let pathQuery: string = Constants.Path.AAI_GET_AIC_ZONES + Constants.Path.ASSIGN + Math.random();
+
+    return this.http.get<GetAicZonesResponse>(pathQuery).map(res =>
+      res.zone.map(aicZone => new AicZone(aicZone))).do((res) => {
+      this.store.dispatch(updateAicZones(res));
+    });
+  };
+
+  getLcpRegionsAndTenants = (globalCustomerId, serviceType): Observable<LcpRegionsAndTenants> => {
+
+    let pathQuery: string = Constants.Path.AAI_GET_TENANTS
+      + globalCustomerId + Constants.Path.FORWARD_SLASH + serviceType + Constants.Path.ASSIGN + Math.random();
+
+    console.log("AaiService:getSubscriptionServiceTypeList: globalCustomerId: "
+      + globalCustomerId);
+    if (globalCustomerId != null) {
+      return this.http.get(pathQuery)
+        .map(this.tenantResponseToLcpRegionsAndTenants).do((res) => {
+          this.store.dispatch(updateLcpRegionsAndTenants(res));
+        });
+    }
+  };
+
+  tenantResponseToLcpRegionsAndTenants = (cloudRegionTenantList): LcpRegionsAndTenants => {
+
+    const lcpRegionsTenantsMap = {};
+
+    const lcpRegionList = _.uniqBy(cloudRegionTenantList, 'cloudRegionID').map((cloudRegionTenant) => {
+      const cloudOwner:string = cloudRegionTenant["cloudOwner"];
+      const cloudRegionId:string = cloudRegionTenant["cloudRegionID"];
+      const name:string = this.extractLcpRegionName(cloudRegionId, cloudOwner);
+      const isPermitted:boolean = cloudRegionTenant["is-permitted"];
+      return new LcpRegion(cloudRegionId, name, isPermitted, cloudOwner);
+    });
+
+    lcpRegionList.forEach(region => {
+      lcpRegionsTenantsMap[region.id] = _.filter(cloudRegionTenantList, {'cloudRegionID': region.id})
+        .map((cloudRegionTenant) => {
+          return new Tenant(cloudRegionTenant)
+        });
+      const reducer = (accumulator, currentValue) => {
+        accumulator.isPermitted = accumulator.isPermitted || currentValue.isPermitted;
+
+        return accumulator;
+      };
+      region.isPermitted = lcpRegionsTenantsMap[region.id].reduce(reducer).isPermitted;
+    });
+
+    return new LcpRegionsAndTenants(lcpRegionList, lcpRegionsTenantsMap);
+  };
+
+  public extractLcpRegionName(cloudRegionId: string, cloudOwner: string):string {
+   return this.featureFlagsService.getFlagState(Features.FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST) ?
+      cloudRegionId+AaiService.formatCloudOwnerTrailer(cloudOwner) : cloudRegionId;
+  };
+
+  public static formatCloudOwnerTrailer(cloudOwner: string):string {
+    return " ("+ cloudOwner.trim().toLowerCase().replace(/^att-/, "").toUpperCase() + ")";
+  }
+
+  getServiceTypes = (subscriberId): Observable<ServiceType[]> => {
+
+    console.log("AaiService:getSubscriptionServiceTypeList: globalCustomerId: " + subscriberId);
+    if (_.has(this.store.getState().service.serviceTypes, subscriberId)) {
+      return of(<ServiceType[]> JSON.parse(JSON.stringify(this.store.getState().service.serviceTypes[subscriberId])));
+    }
+
+    return this.getSubscriberDetails(subscriberId)
+      .map(this.subDetailsResponseToServiceTypes)
+      .do((res) => {
+        this.store.dispatch(updateServiceTypes(res, subscriberId));
+      });
+  };
+
+  getSubscriberDetails = (subscriberId): Observable<GetSubDetailsResponse> => {
+    let pathQuery: string = Constants.Path.AAI_SUB_DETAILS_PATH + subscriberId + Constants.Path.ASSIGN + Math.random();
+
+    if (subscriberId != null) {
+      return this.http.get<GetSubDetailsResponse>(pathQuery);
+    }
+  };
+
+  subDetailsResponseToServiceTypes = (res: GetSubDetailsResponse): ServiceType[] => {
+    if (res && res['service-subscriptions']) {
+      const serviceSubscriptions = res['service-subscriptions']['service-subscription'];
+      return serviceSubscriptions.map((subscription, index) => new ServiceType(String(index), subscription))
+    } else {
+      return [];
+    }
+  };
+
+
+  public retrieveServiceInstanceTopology(serviceInstanceId : string, subscriberId: string, serviceType: string):Observable<ServiceInstance> {
+    let pathQuery: string = `${Constants.Path.AAI_GET_SERVICE_INSTANCE_TOPOLOGY_PATH}${subscriberId}/${serviceType}/${serviceInstanceId}`;
+    return this.http.get<ServiceInstance>(pathQuery);
+  }
+
+  public retrieveAndStoreServiceInstanceTopology(serviceInstanceId: string, subscriberId: string, serviceType: string, serviceModeId: string):Observable<ServiceInstance> {
+    return this.retrieveServiceInstanceTopology(serviceInstanceId, subscriberId, serviceType).do((service:ServiceInstance) => {
+      this.store.dispatch(createServiceInstance(service, serviceModeId));
+      });
+  };
+
+
+  public retrieveServiceInstanceRetryTopology(jobId : string) :Observable<ServiceInstance> {
+    let pathQuery: string = `${Constants.Path.SERVICES_RETRY_TOPOLOGY}/${jobId}`;
+    return this.http.get<ServiceInstance>(pathQuery);
+
+    // return  of(
+    //   <any>{
+    //     "action": "None",
+    //     "instanceName": "LXzQMx9clZl7D6ckJ",
+    //     "instanceId": "service-instance-id",
+    //     "orchStatus": "GARBAGE DATA",
+    //     "productFamilyId": null,
+    //     "lcpCloudRegionId": null,
+    //     "tenantId": null,
+    //     "modelInfo": {
+    //       "modelInvariantId": "d27e42cf-087e-4d31-88ac-6c4b7585f800",
+    //       "modelVersionId": "6e59c5de-f052-46fa-aa7e-2fca9d674c44",
+    //       "modelName": "vf_vEPDG",
+    //       "modelType": "service",
+    //       "modelVersion": "5.0"
+    //     },
+    //     "globalSubscriberId": "global-customer-id",
+    //     "subscriptionServiceType": "service-instance-type",
+    //     "owningEntityId": null,
+    //     "owningEntityName": null,
+    //     "tenantName": null,
+    //     "aicZoneId": null,
+    //     "aicZoneName": null,
+    //     "projectName": null,
+    //     "rollbackOnFailure": null,
+    //     "isALaCarte": false,
+    //     "vnfs": {
+    //       "1e918ade-3dc6-4cec-b952-3ff94ed82d1c": {
+    //         "action": "None",
+    //         "instanceName": "DgZuxjJy5LMIc3755",
+    //         "instanceId": "1e918ade-3dc6-4cec-b952-3ff94ed82d1c",
+    //         "orchStatus": null,
+    //         "productFamilyId": null,
+    //         "lcpCloudRegionId": null,
+    //         "tenantId": null,
+    //         "modelInfo": {
+    //           "modelInvariantId": "vnf-instance-model-invariant-id",
+    //           "modelVersionId": "vnf-instance-model-version-id",
+    //           "modelType": "vnf"
+    //         },
+    //         "instanceType": "SXDBMhwdR9iO0g1Uv",
+    //         "provStatus": null,
+    //         "inMaint": false,
+    //         "uuid": "vnf-instance-model-version-id",
+    //         "originalName": null,
+    //         "legacyRegion": null,
+    //         "lineOfBusiness": null,
+    //         "platformName": null,
+    //         "trackById": "1e918ade-3dc6-4cec-b952-3ff94ed82d1c",
+    //         "vfModules": {},
+    //         "networks": {
+    //           "ff464c97-ea9c-4165-996a-fe400499af3e": {
+    //             "action": "None",
+    //             "instanceName": "ZI0quzIpu8TNXS7nl",
+    //             "instanceId": "ff464c97-ea9c-4165-996a-fe400499af3e",
+    //             "orchStatus": "Assigned",
+    //             "productFamilyId": null,
+    //             "lcpCloudRegionId": null,
+    //             "tenantId": null,
+    //             "modelInfo": {
+    //               "modelInvariantId": "network-instance-model-invariant-id",
+    //               "modelVersionId": "network-instance-model-version-id",
+    //               "modelType": "network"
+    //             },
+    //             "instanceType": "CONTRAIL30_BASIC",
+    //             "provStatus": "prov",
+    //             "inMaint": false,
+    //             "uuid": "network-instance-model-version-id",
+    //             "originalName": null,
+    //             "legacyRegion": null,
+    //             "lineOfBusiness": null,
+    //             "platformName": null,
+    //             "trackById": "ff464c97-ea9c-4165-996a-fe400499af3e",
+    //             "isFailed": true
+    //           },
+    //           "3e41d57c-8bb4-443e-af02-9f86487ba938": {
+    //             "action": "None",
+    //             "instanceName": "0i9asscqSLm7Poeb8",
+    //             "instanceId": "3e41d57c-8bb4-443e-af02-9f86487ba938",
+    //             "orchStatus": "Created",
+    //             "productFamilyId": null,
+    //             "lcpCloudRegionId": null,
+    //             "tenantId": null,
+    //             "modelInfo": {
+    //               "modelInvariantId": "network-instance-model-invariant-id",
+    //               "modelVersionId": "network-instance-model-version-id",
+    //               "modelType": "network"
+    //             },
+    //             "instanceType": "CONTRAIL30_BASIC",
+    //             "provStatus": "prov",
+    //             "inMaint": false,
+    //             "uuid": "network-instance-model-version-id",
+    //             "originalName": null,
+    //             "legacyRegion": null,
+    //             "lineOfBusiness": null,
+    //             "platformName": null,
+    //             "trackById": "3e41d57c-8bb4-443e-af02-9f86487ba938",
+    //             "isFailed": true
+    //           }
+    //         },
+    //         "isFailed": true
+    //       },
+    //       "9a9b2705-c569-4f1b-9a67-13e9f86e6c55": {
+    //         "isFailed": true,
+    //         "action": "None",
+    //         "instanceName": "TFn0SYhrCUs7L3qWS",
+    //         "instanceId": "9a9b2705-c569-4f1b-9a67-13e9f86e6c55",
+    //         "orchStatus": null,
+    //         "productFamilyId": null,
+    //         "lcpCloudRegionId": null,
+    //         "tenantId": null,
+    //         "modelInfo": {
+    //           "modelCustomizationName": "VF_vMee 0",
+    //           "modelInvariantId": "vnf-instance-model-invariant-id",
+    //           "modelVersionId": "d6557200-ecf2-4641-8094-5393ae3aae60",
+    //           "modelType": "vnf"
+    //         },
+    //         "instanceType": "WIT68GUnH34VaGZgp",
+    //         "provStatus": null,
+    //         "inMaint": true,
+    //         "uuid": "d6557200-ecf2-4641-8094-5393ae3aae60",
+    //         "originalName": "VF_vMee 0",
+    //         "legacyRegion": null,
+    //         "lineOfBusiness": null,
+    //         "platformName": null,
+    //         "trackById": "9a9b2705-c569-4f1b-9a67-13e9f86e6c55",
+    //         "vfModules": {
+    //           "vf_vmee0..VfVmee..vmme_vlc..module-1": {
+    //             "2c1ca484-cbc2-408b-ab86-25a2c15ce280": {
+    //               "action": "None",
+    //               "instanceName": "ss820f_0918_db",
+    //               "instanceId": "2c1ca484-cbc2-408b-ab86-25a2c15ce280",
+    //               "orchStatus": "deleted",
+    //               "productFamilyId": null,
+    //               "lcpCloudRegionId": null,
+    //               "tenantId": null,
+    //               "modelInfo": {
+    //                 "modelCustomizationName": "VfVmee..vmme_vlc..module-1",
+    //                 "modelCustomizationId": "b200727a-1bf9-4e7c-bd06-b5f4c9d920b9",
+    //                 "modelInvariantId": "09edc9ef-85d0-4b26-80de-1f569d49e750",
+    //                 "modelVersionId": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+    //                 "modelType": "vfModule"
+    //               },
+    //               "instanceType": null,
+    //               "provStatus": null,
+    //               "inMaint": true,
+    //               "uuid": "522159d5-d6e0-4c2a-aa44-5a542a12a830",
+    //               "originalName": "VfVmee..vmme_vlc..module-1",
+    //               "legacyRegion": null,
+    //               "lineOfBusiness": null,
+    //               "platformName": null,
+    //               "trackById": "2c1ca484-cbc2-408b-ab86-25a2c15ce280",
+    //               "isBase": false,
+    //               "volumeGroupName": null,
+    //               "isFailed": true
+    //             }
+    //           },
+    //           "dc229cd8-c132-4455-8517-5c1787c18b14": {
+    //             "3ef042c4-259f-45e0-9aba-0989bd8d1cc5": {
+    //               "action": "None",
+    //               "instanceName": "ss820f_0918_base",
+    //               "instanceId": "3ef042c4-259f-45e0-9aba-0989bd8d1cc5",
+    //               "orchStatus": "Assigned",
+    //               "productFamilyId": null,
+    //               "lcpCloudRegionId": null,
+    //               "tenantId": null,
+    //               "modelInfo": {
+    //                 "modelCustomizationId": "8ad8670b-0541-4499-8101-275bbd0e8b6a",
+    //                 "modelInvariantId": "1e463c9c-404d-4056-ba56-28fd102608de",
+    //                 "modelVersionId": "dc229cd8-c132-4455-8517-5c1787c18b14",
+    //                 "modelType": "vfModule"
+    //               },
+    //               "instanceType": null,
+    //               "provStatus": null,
+    //               "inMaint": false,
+    //               "uuid": "dc229cd8-c132-4455-8517-5c1787c18b14",
+    //               "originalName": null,
+    //               "legacyRegion": null,
+    //               "lineOfBusiness": null,
+    //               "platformName": null,
+    //               "trackById": "3ef042c4-259f-45e0-9aba-0989bd8d1cc5",
+    //               "isBase": true,
+    //               "volumeGroupName": null
+    //             }
+    //           }
+    //         },
+    //         "networks": {}
+    //       }
+    //     },
+    //     "networks": {
+    //       "e1edb09e-e68b-4ebf-adb8-e2587be56257": {
+    //         "action": "None",
+    //         "instanceName": "cNpGlYQDsmrUDK5iG",
+    //         "instanceId": "e1edb09e-e68b-4ebf-adb8-e2587be56257",
+    //         "orchStatus": "Created",
+    //         "productFamilyId": null,
+    //         "lcpCloudRegionId": null,
+    //         "tenantId": null,
+    //         "modelInfo": {
+    //           "modelInvariantId": "network-instance-model-invariant-id",
+    //           "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+    //           "modelType": "network"
+    //         },
+    //         "instanceType": "CONTRAIL30_HIMELGUARD",
+    //         "provStatus": "preprov",
+    //         "inMaint": false,
+    //         "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+    //         "originalName": null,
+    //         "legacyRegion": null,
+    //         "lineOfBusiness": null,
+    //         "platformName": null,
+    //         "trackById": "e1edb09e-e68b-4ebf-adb8-e2587be56257"
+    //       },
+    //       "de4b5203-ad1c-4f2b-8843-5236fb8dc9ba": {
+    //         "action": "None",
+    //         "instanceName": "EI9QlSRVK0lon54Cb",
+    //         "instanceId": "de4b5203-ad1c-4f2b-8843-5236fb8dc9ba",
+    //         "orchStatus": "Assigned",
+    //         "productFamilyId": null,
+    //         "lcpCloudRegionId": null,
+    //         "tenantId": null,
+    //         "modelInfo": {
+    //           "modelInvariantId": "network-instance-model-invariant-id",
+    //           "modelVersionId": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+    //           "modelType": "network"
+    //         },
+    //         "instanceType": "CONTRAIL30_BASIC",
+    //         "provStatus": "nvtprov",
+    //         "inMaint": false,
+    //         "uuid": "ddc3f20c-08b5-40fd-af72-c6d14636b986",
+    //         "originalName": null,
+    //         "legacyRegion": null,
+    //         "lineOfBusiness": null,
+    //         "platformName": null,
+    //         "trackById": "de4b5203-ad1c-4f2b-8843-5236fb8dc9ba",
+    //         "isFailed": true
+    //       }
+    //     },
+    //     "vnfGroups": {},
+    //     "validationCounter": 0,
+    //     "existingVNFCounterMap": {
+    //       "vnf-instance-model-version-id": 1,
+    //       "d6557200-ecf2-4641-8094-5393ae3aae60": 1
+    //     },
+    //     "existingNetworksCounterMap": {
+    //       "ddc3f20c-08b5-40fd-af72-c6d14636b986": 2
+    //     },
+    //     "existingVnfGroupCounterMap": {}
+    //   }
+    // );
+
+  }
+
+  public retrieveAndStoreServiceInstanceRetryTopology(jobId: string, serviceModeId : string):Observable<ServiceInstance> {
+    return this.retrieveServiceInstanceRetryTopology(jobId).do((service:ServiceInstance) => {
+      this.store.dispatch(createServiceInstance(service, serviceModeId));
+    });
+  };
+
+  public getOptionalGroupMembers(serviceModelId: string, subscriberId: string, serviceType: string, serviceInvariantId: string, groupType: string, groupRole: string): Observable<VnfMember[]> {
+    let pathQuery: string = `${Constants.Path.AAI_GET_SERVICE_GROUP_MEMBERS_PATH}${subscriberId}/${serviceType}/${serviceInvariantId}/${groupType}/${groupRole}`;
+    if(_.has(this.store.getState().service.serviceInstance[serviceModelId].optionalGroupMembersMap,pathQuery)){
+      return of(<VnfMember[]> JSON.parse(JSON.stringify(this.store.getState().service.serviceInstance[serviceModelId].optionalGroupMembersMap[pathQuery])));
+    }
+    return this.http.get<VnfMember[]>(pathQuery)
+      .do((res) => {
+        this.store.dispatch(setOptionalMembersVnfGroupInstance(serviceModelId, pathQuery, res))
+      });
+    // let res = Observable.of((JSON.parse(JSON.stringify(this.loadMockMembers()))));
+    // return  res;
+     
+  }
+
+  //TODO: make other places use this function
+  extractSubscriberNameBySubscriberId(subscriberId: string) {
+    let result: string = null;
+    let filteredArray: any = _.filter(this.store.getState().service.subscribers, function (o: Subscriber) {
+      return o.id === subscriberId
+    });
+    if (filteredArray.length > 0) {
+      result = filteredArray[0].name;
+    }
+    return result;
+  }
+
+  loadMockMembers(): any {
+    return [
+      {
+        "action":"None",
+        "instanceName":"VNF1_INSTANCE_NAME",
+        "instanceId":"VNF1_INSTANCE_ID",
+        "orchStatus":null,
+        "productFamilyId":null,
+        "lcpCloudRegionId":"mtn23b",
+        "tenantId":"3e9a20a3e89e45f884e09df0cc2d2d2a",
+        "tenantName":"APPC-24595-T-IST-02C",
+        "modelInfo":{
+          "modelInvariantId":"vnf-instance-model-invariant-id",
+          "modelVersionId":"7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+          "modelVersion":"2.0",
+          "modelName":"vf_vEPDG",
+          "modelType":"vnf"
+        },
+        "instanceType":"VNF1_INSTANCE_TYPE",
+        "provStatus":null,
+        "inMaint":false,
+        "uuid":"7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+        "originalName":null,
+        "legacyRegion":null,
+        "lineOfBusiness":null,
+        "platformName":null,
+        "trackById":"7a6ee536-f052-46fa-aa7e-2fca9d674c44:002",
+        "serviceInstanceId":"service-instance-id1",
+        "serviceInstanceName":"service-instance-name"
+      },
+      {
+        "action":"None",
+        "instanceName":"VNF2_INSTANCE_NAME",
+        "instanceId":"VNF2_INSTANCE_ID",
+        "orchStatus":null,
+        "productFamilyId":null,
+        "lcpCloudRegionId":"mtn23b",
+        "tenantId":"3e9a20a3e89e45f884e09df0cc2d2d2a",
+        "tenantName":"APPC-24595-T-IST-02C",
+        "modelInfo":{
+          "modelInvariantId":"vnf-instance-model-invariant-id",
+          "modelVersionId":"eb5f56bf-5855-4e61-bd00-3e19a953bf02",
+          "modelVersion":"1.0",
+          "modelName":"vf_vEPDG",
+          "modelType":"vnf"
+        },
+        "instanceType":"VNF2_INSTANCE_TYPE",
+        "provStatus":null,
+        "inMaint":true,
+        "uuid":"eb5f56bf-5855-4e61-bd00-3e19a953bf02",
+        "originalName":null,
+        "legacyRegion":null,
+        "lineOfBusiness":null,
+        "platformName":null,
+        "trackById":"eb5f56bf-5855-4e61-bd00-3e19a953bf02:003",
+        "serviceInstanceId":"service-instance-id2",
+        "serviceInstanceName":"service-instance-name"
+      }
+    ]
+
+  }
+
+
+}
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/model/crawledAaiService.ts b/vid-webpack-master/src/app/shared/services/aaiService/model/crawledAaiService.ts
new file mode 100644
index 0000000..8c27d43
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/model/crawledAaiService.ts
@@ -0,0 +1,30 @@
+
+  export interface Child {
+    type: string;
+    orchestrationStatus: string;
+    provStatus: string;
+    inMaint: boolean;
+    modelVersionId: string;
+    modelCustomizationId: string;
+    modelInvariantId: string;
+    id: string;
+    name: string;
+    children: any[];
+  }
+
+  export interface Root {
+    type: string;
+    orchestrationStatus: string;
+    modelVersionId: string;
+    modelCustomizationId: string;
+    modelInvariantId: string;
+    id: string;
+    name: string;
+    children: Child[];
+  }
+
+  export interface RootObject {
+    root: Root;
+  }
+
+
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getAicZonesResponseInterface.ts b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getAicZonesResponseInterface.ts
new file mode 100644
index 0000000..62581c9
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getAicZonesResponseInterface.ts
@@ -0,0 +1,3 @@
+export interface GetAicZonesResponse {
+  zone: any[];
+}
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getCategoryParamsResponseInterface.ts b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getCategoryParamsResponseInterface.ts
new file mode 100644
index 0000000..0639890
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getCategoryParamsResponseInterface.ts
@@ -0,0 +1,10 @@
+interface CategoryParametersResponse {
+  owningEntity: any[],
+  project: any[]
+  lineOfBusiness: any[]
+  platform: any[]
+}
+
+export interface GetCategoryParamsResponseInterface {
+  categoryParameters: CategoryParametersResponse;
+}
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getServiceModelResponseInterface.ts b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getServiceModelResponseInterface.ts
new file mode 100644
index 0000000..016bb0a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getServiceModelResponseInterface.ts
@@ -0,0 +1,5 @@
+import {ServiceModelResponseInterface} from "../../../models/serviceModel";
+
+export interface GetServiceModelResponseInterface {
+  service: ServiceModelResponseInterface
+}
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getServicesResponseInterface.ts b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getServicesResponseInterface.ts
new file mode 100644
index 0000000..ae04055
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getServicesResponseInterface.ts
@@ -0,0 +1,9 @@
+export interface ServiceResponseInterface {
+  'service-id': string,
+  'service-description': string
+  'is-permitted': boolean
+}
+
+export interface GetServicesResponseInterface {
+  service: ServiceResponseInterface[];
+}
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getSubDetailsResponseInterface.ts b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getSubDetailsResponseInterface.ts
new file mode 100644
index 0000000..dbfb695
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getSubDetailsResponseInterface.ts
@@ -0,0 +1,12 @@
+export interface Subscription {
+  'service-type': string;
+  'is-permitted': boolean;
+}
+
+interface ServiceSubscriptions {
+  'service-subscription': Subscription[];
+}
+
+export interface GetSubDetailsResponse {
+  'service-subscriptions': ServiceSubscriptions;
+}
diff --git a/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getSubscribersResponseInterface.ts b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getSubscribersResponseInterface.ts
new file mode 100644
index 0000000..1399709
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/aaiService/responseInterfaces/getSubscribersResponseInterface.ts
@@ -0,0 +1,5 @@
+import {Subscriber} from "../../../models/subscriber";
+
+export interface GetSubscribersResponse {
+  customer: Subscriber[];
+}
diff --git a/vid-webpack-master/src/app/shared/services/configuration.service.ts b/vid-webpack-master/src/app/shared/services/configuration.service.ts
new file mode 100644
index 0000000..6c618b5
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/configuration.service.ts
@@ -0,0 +1,35 @@
+import {Injectable} from '@angular/core';
+import {HttpClient} from "@angular/common/http";
+import {Constants} from "../utils/constants";
+import {Observable} from 'rxjs';
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../store/reducers";
+import {updateFlags} from "../storeUtil/utils/global/global.actions";
+import {of} from "rxjs";
+
+@Injectable()
+export class ConfigurationService {
+  store : NgRedux<AppState>;
+
+  constructor(private _http: HttpClient, _store : NgRedux<AppState>) {
+    this.store = _store;
+  }
+
+  getConfiguration(key : string): Observable<any> {
+    let pathQuery = Constants.Path.CONFIGURATION_PATH;
+    pathQuery = pathQuery.replace("{name}",key);
+    return this._http.get(pathQuery).map(response => response);
+  }
+
+  getFlags(): Observable<{[key: string] : boolean}> {
+    let flags = this.store.getState().global.flags;
+    if (flags) {
+      return of(flags);
+    }
+    let pathQuery = Constants.Path.FEATURES_FLAG_PATH;
+    return this._http.get<{[key: string] : boolean}>(pathQuery).map(response => {
+      this.store.dispatch(updateFlags(response));
+      return response;
+    });
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/services/data.service.ts b/vid-webpack-master/src/app/shared/services/data.service.ts
new file mode 100644
index 0000000..4f8bf36
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/data.service.ts
@@ -0,0 +1,528 @@
+import { Injectable } from '@angular/core';
+
+@Injectable()
+export class DataService {
+
+  private static _availableVolumeGroupList;
+  private static _cloudRegionTenantList;
+  private static _globalCustomerId;
+  private static _customizationUUID;
+  private static _rescustomizationUUID;
+  private static _inventoryItem;
+  private static _modelId;
+  private static _modelInstanceName;
+  private static _modelInfo;
+  private static _networkInstanceId;
+  private static _serviceIdList;
+  private static _aicZones;
+  private static _aicZone;
+  private static _serviceInstanceId;
+  private static _serviceInstanceName;
+  private static _serviceName;
+  private static _serviceType;
+  private static _serviceUuid;
+  private static _serviceTypeName;
+  private static _createSubscriberName;
+  private static _uploadSupplementoryDataFile;
+  private static _supplementoryDataFile;
+  private static _subscriberId;
+  private static _loggedInUserId;
+  private static _subscriberName;
+  private static _subscribers;
+  private static _subscriptionServiceTypeList;
+  private static _userParams;
+  private static _userServiceInstanceName;
+  private static _vfModuleInstanceId;
+  private static _vnfInstanceId;
+  private static _vfModuleInstanceName;
+  private static _volumeGroupInstanceId;
+  private static _lcpRegion;
+  private static _tenant;
+  private static _treeHandle;
+  private static _serviceInstanceToCustomer;
+  private static _aLaCarte: boolean;
+  private static _macro: boolean;
+  private static _resources;
+  private static _syspropProvStatusList;
+  private static _updatedvnfProvStatus;
+  private static _arbitraryParameters;
+  private static _hideServiceFields;
+  private static _serviceProxies;
+  private static _sourceServiceProxies;
+  private static _collectorServiceProxies;
+  private static _configurationByPolicy;
+  private static _suppressRollback;
+  private static _portMirroningConfigFields;
+  private static _configurationInstanceId: string;
+  private static _configurationStatus: string;
+  private static _portStatus: string;
+  private static _portId: string;
+  private static _pnf;
+  private static _owningEntityProperties;
+
+  static get availableVolumeGroupList() {
+    return this._availableVolumeGroupList;
+  }
+
+  static set availableVolumeGroupList(value) {
+    this._availableVolumeGroupList = value;
+  }
+
+  static get cloudRegionTenantList() {
+    return this._cloudRegionTenantList;
+  }
+
+  static set cloudRegionTenantList(value) {
+    this._cloudRegionTenantList = value;
+  }
+
+  static get globalCustomerId() {
+    return this._globalCustomerId;
+  }
+
+  static set globalCustomerId(value) {
+    this._globalCustomerId = value;
+  }
+
+  static get customizationUUID() {
+    return this._customizationUUID;
+  }
+
+  static set customizationUUID(value) {
+    this._customizationUUID = value;
+  }
+
+  static get rescustomizationUUID() {
+    return this._rescustomizationUUID;
+  }
+
+  static set rescustomizationUUID(value) {
+    this._rescustomizationUUID = value;
+  }
+
+  static get inventoryItem() {
+    return this._inventoryItem;
+  }
+
+  static set inventoryItem(value) {
+    this._inventoryItem = value;
+  }
+
+  static get modelId() {
+    return this._modelId;
+  }
+
+  static set modelId(value) {
+    this._modelId = value;
+  }
+
+  static get modelInstanceName() {
+    return this._modelInstanceName;
+  }
+
+  static set modelInstanceName(value) {
+    this._modelInstanceName = value;
+  }
+
+  static get modelInfo() {
+    return this._modelInfo;
+  }
+
+  static set modelInfo(value) {
+    this._modelInfo = value;
+  }
+
+  static getModelInfo(componentId) {
+    return this._modelInfo[componentId];
+  }
+
+  static setModelInfo(componentId, modelInfo) {
+    if (!this._modelInfo) {
+      this._modelInfo = {};
+    }
+    this._modelInfo[componentId] = modelInfo;
+  }
+
+  static get networkInstanceId() {
+    return this._networkInstanceId;
+  }
+
+  static set networkInstanceId(value) {
+    this._networkInstanceId = value;
+  }
+
+  static get serviceIdList() {
+    return this._serviceIdList;
+  }
+
+  static set serviceIdList(value) {
+    this._serviceIdList = value;
+  }
+
+  static get aicZones() {
+    return this._aicZones;
+  }
+
+  static set aicZones(value) {
+    this._aicZones = value;
+  }
+
+  static get aicZone() {
+    return this._aicZone;
+  }
+
+  static set aicZone(value) {
+    this._aicZone = value;
+  }
+
+  static get serviceInstanceId() {
+    return this._serviceInstanceId;
+  }
+
+  static set serviceInstanceId(value) {
+    this._serviceInstanceId = value;
+  }
+
+  static get serviceInstanceName() {
+    return this._serviceInstanceName;
+  }
+
+  static set serviceInstanceName(value) {
+    this._serviceInstanceName = value;
+  }
+
+  static get serviceName() {
+    return this._serviceName;
+  }
+
+  static set serviceName(value) {
+    this._serviceName = value;
+  }
+
+  static get serviceType() {
+    return this._serviceType;
+  }
+
+  static set serviceType(value) {
+    this._serviceType = value;
+  }
+
+  static get serviceUuid() {
+    return this._serviceUuid;
+  }
+
+  static set serviceUuid(value) {
+    this._serviceUuid = value;
+  }
+
+  static get serviceTypeName() {
+    return this._serviceTypeName;
+  }
+
+  static set serviceTypeName(value) {
+    this._serviceTypeName = value;
+  }
+
+  static get createSubscriberName() {
+    return this._createSubscriberName;
+  }
+
+  static set createSubscriberName(value) {
+    this._createSubscriberName = value;
+  }
+
+  static get uploadSupplementoryDataFile() {
+    return this._uploadSupplementoryDataFile;
+  }
+
+  static set uploadSupplementoryDataFile(value) {
+    this._uploadSupplementoryDataFile = value;
+  }
+
+  static get supplementoryDataFile() {
+    return this._supplementoryDataFile;
+  }
+
+  static set supplementoryDataFile(value) {
+    this._supplementoryDataFile = value;
+  }
+
+  static get subscriberId() {
+    return this._subscriberId;
+  }
+
+  static set subscriberId(value) {
+    this._subscriberId = value;
+  }
+
+  static get loggedInUserId() {
+    return this._loggedInUserId;
+  }
+
+  static set loggedInUserId(value) {
+    this._loggedInUserId = value;
+  }
+
+  static get subscriberName() {
+    return this._subscriberName;
+  }
+
+  static set subscriberName(value) {
+    this._subscriberName = value;
+  }
+
+  static get subscribers() {
+    return this._subscribers;
+  }
+
+  static set subscribers(value) {
+    this._subscribers = value;
+  }
+
+  static get subscriptionServiceTypeList() {
+    return this._subscriptionServiceTypeList;
+  }
+
+  static set subscriptionServiceTypeList(value) {
+    this._subscriptionServiceTypeList = value;
+  }
+
+  static get userParams() {
+    return this._userParams;
+  }
+
+  static set userParams(value) {
+    this._userParams = value;
+  }
+
+  static get userServiceInstanceName() {
+    return this._userServiceInstanceName;
+  }
+
+  static set userServiceInstanceName(value) {
+    this._userServiceInstanceName = value;
+  }
+
+  static get vfModuleInstanceId() {
+    return this._vfModuleInstanceId;
+  }
+
+  static set vfModuleInstanceId(value) {
+    this._vfModuleInstanceId = value;
+  }
+
+  static get vnfInstanceId() {
+    return this._vnfInstanceId;
+  }
+
+  static set vnfInstanceId(value) {
+    this._vnfInstanceId = value;
+  }
+
+  static get vfModuleInstanceName() {
+    return this._vfModuleInstanceName;
+  }
+
+  static set vfModuleInstanceName(value) {
+    this._vfModuleInstanceName = value;
+  }
+
+  static get volumeGroupInstanceId() {
+    return this._volumeGroupInstanceId;
+  }
+
+  static set volumeGroupInstanceId(value) {
+    this._volumeGroupInstanceId = value;
+  }
+
+  static get lcpRegion() {
+    return this._lcpRegion;
+  }
+
+  static set lcpRegion(value) {
+    this._lcpRegion = value;
+  }
+
+  static get tenant() {
+    return this._tenant;
+  }
+
+  static set tenant(value) {
+    this._tenant = value;
+  }
+
+  static get treeHandle() {
+    return this._treeHandle;
+  }
+
+  static set treeHandle(value) {
+    this._treeHandle = value;
+  }
+
+  static get serviceInstanceToCustomer() {
+    return this._serviceInstanceToCustomer;
+  }
+
+  static set serviceInstanceToCustomer(value) {
+    this._serviceInstanceToCustomer = value;
+  }
+
+  static get aLaCarte() {
+    if (!this._aLaCarte) {
+      return true;
+    }
+    return this._aLaCarte;
+  }
+
+  static set aLaCarte(value: boolean) {
+    this._aLaCarte = value;
+  }
+
+  static get macro() {
+    if (!this._macro) {
+      return false;
+    }
+    return this._macro;
+  }
+
+  static set macro(value: boolean) {
+    this._macro = value;
+  }
+
+  static get resources() {
+    return this._resources;
+  }
+
+  static set resources(value) {
+    this._resources = value;
+  }
+
+  static get syspropProvStatusList() {
+    return this._syspropProvStatusList;
+  }
+
+  static set syspropProvStatusList(value) {
+    this._syspropProvStatusList = value;
+  }
+
+  static get updatedvnfProvStatus() {
+    return this._updatedvnfProvStatus;
+  }
+
+  static set updatedvnfProvStatus(value) {
+    this._updatedvnfProvStatus = value;
+  }
+
+  static get arbitraryParameters() {
+    return this._arbitraryParameters;
+  }
+
+  static set arbitraryParameters(value) {
+    this._arbitraryParameters = value;
+  }
+
+  static get hideServiceFields() {
+    return this._hideServiceFields;
+  }
+
+  static set hideServiceFields(value) {
+    this._hideServiceFields = value;
+  }
+
+  static get serviceProxies() {
+    return this._serviceProxies;
+  }
+
+  static set serviceProxies(value) {
+    this._serviceProxies = value;
+  }
+
+  static get sourceServiceProxies() {
+    return this._sourceServiceProxies;
+  }
+
+  static set sourceServiceProxies(value) {
+    this._sourceServiceProxies = value;
+  }
+
+  static get collectorServiceProxies() {
+    return this._collectorServiceProxies;
+  }
+
+  static set collectorServiceProxies(value) {
+    this._collectorServiceProxies = value;
+  }
+
+  static get configurationByPolicy() {
+    return this._configurationByPolicy;
+  }
+
+  static set configurationByPolicy(value) {
+    this._configurationByPolicy = value;
+  }
+
+  static get suppressRollback() {
+    return this._suppressRollback;
+  }
+
+  static set suppressRollback(value) {
+    this._suppressRollback = value;
+  }
+
+  static get portMirroningConfigFields() {
+    return this._portMirroningConfigFields;
+  }
+
+  static set portMirroningConfigFields(value) {
+    this._portMirroningConfigFields = value;
+  }
+
+  static get configurationInstanceId(): string {
+    return this._configurationInstanceId;
+  }
+
+  static set configurationInstanceId(value: string) {
+    this._configurationInstanceId = value;
+  }
+
+  static get configurationStatus(): string {
+    return this._configurationStatus;
+  }
+
+  static set configurationStatus(value: string) {
+    this._configurationStatus = value;
+  }
+
+  static get portStatus(): string {
+    return this._portStatus;
+  }
+
+  static set portStatus(value: string) {
+    this._portStatus = value;
+  }
+
+  static get portId(): string {
+    return this._portId;
+  }
+
+  static set portId(value: string) {
+    this._portId = value;
+  }
+
+  static get pnf() {
+    return this._pnf;
+  }
+
+  static set pnf(value) {
+    this._pnf = value;
+  }
+
+  static get owningEntityProperties() {
+    return this._owningEntityProperties;
+  }
+
+  static set owningEntityProperties(value) {
+    this._owningEntityProperties = value;
+  }
+
+}
diff --git a/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
index 617dbd3..c4ef881 100644
--- a/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
+++ b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.spec.ts
@@ -1,33 +1,44 @@
-import { getTestBed, TestBed } from '@angular/core/testing';
-import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';
-import { NgRedux } from '@angular-redux/store';
-import { DefaultDataGeneratorService } from './default.data.generator.service';
-
-export class MockAppStore<T> {}
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {NgRedux} from '@angular-redux/store';
+import {DefaultDataGeneratorService} from './default.data.generator.service';
+import {ServiceNodeTypes} from "../../models/ServiceNodeTypes";
+import {VNFModel} from "../../models/vnfModel";
+class MockAppStore<T> {}
 
 describe('Default Data Generator Service', () => {
   let injector;
   let service: DefaultDataGeneratorService;
   let httpMock: HttpTestingController;
 
-  beforeEach(() => {
+  beforeAll(done => (async () => {
     TestBed.configureTestingModule({
       imports: [HttpClientTestingModule],
-      providers: [DefaultDataGeneratorService,
-        {provide: NgRedux, useClass: MockAppStore}]
+          providers: [DefaultDataGeneratorService,
+            {provide: NgRedux, useClass: MockAppStore}]
     });
+    await TestBed.compileComponents();
 
     injector = getTestBed();
     service = injector.get(DefaultDataGeneratorService);
     httpMock = injector.get(HttpTestingController);
-  });
+  })().then(done).catch(done.fail));
 
-  it('generateVFModule should create vf module object', () => {
+  test('generateVFModule aLaCarte vf module object should missed data', () => {
     const serviceHierarchy = generateServiceHierarchy();
     const vnfUUID: string = 'VF_vMee 0';
     const vnfModuleUUID: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
 
-    let result = service.generateVFModule(serviceHierarchy, vnfUUID, vnfModuleUUID);
+    let result = service.generateVFModule(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID], [], false, true);
+    expect(result.isMissingData).toBeTruthy();
+  });
+
+  test('generateVFModule should create vf module object', () => {
+    const serviceHierarchy = generateServiceHierarchy();
+    const vnfUUID: string = 'VF_vMee 0';
+    const vnfModuleUUID: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
+
+    let result = service.generateVFModule(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID], [], false, false);
 
     expect(result.modelInfo.modelType).toEqual('VFmodule');
     expect(result.modelInfo.modelInvariantId).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].invariantUuid);
@@ -37,15 +48,16 @@
     expect(result.modelInfo.modelCustomizationId).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].customizationUuid);
     expect(result.modelInfo.modelCustomizationName).toEqual(serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].modelCustomizationName);
     expect(result.sdncPreReload).toBeNull();
+    expect(result.isMissingData).toBeTruthy();
+    expect(result.instanceParams).toEqual([{}]);
   });
 
-  it('generateVNFData should create vnf object', () => {
+  test('generateVNFData should create vnf object', () => {
     const serviceHierarchy = generateServiceHierarchy();
     const vnfName: string = 'VF_vMee 0';
     const formValues = generateVNFFormValues();
-    const vfUUID: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
 
-    let result = service.generateVNFData(serviceHierarchy, vnfName, vfUUID, formValues);
+    let result = service.generateVNFData(serviceHierarchy, vnfName, formValues, false);
 
     expect(result.productFamilyId).toEqual(formValues.productFamilyId);
     expect(result.lcpCloudRegionId).toBeNull();
@@ -57,17 +69,343 @@
     expect(result.modelInfo.modelVersionId).toEqual(formValues.modelInfo.modelVersionId);
     expect(result.modelInfo.modelName).toEqual(serviceHierarchy.vnfs[vnfName].name);
     expect(result.modelInfo.modelVersion).toEqual(serviceHierarchy.vnfs[vnfName].version);
-    expect(result.modelInfo.modelCustomizationId).toEqual(serviceHierarchy.vnfs[vnfName].modelCustomizationId);
+    expect(result.modelInfo.modelCustomizationId).toEqual(serviceHierarchy.vnfs[vnfName].customizationUuid);
+    expect(result.modelInfo.modelUniqueId).toEqual(serviceHierarchy.vnfs[vnfName].customizationUuid);
     expect(result.modelInfo.modelCustomizationName).toEqual(serviceHierarchy.vnfs[vnfName].modelCustomizationName);
+    expect(result.isMissingData).toBeTruthy();
   });
+
+  describe('#updateDynamicInputsVnfDataFromModel', () => {
+    test('get vfModule instance params', () => {
+      let dynamicInputs = service.updateDynamicInputsVnfDataFromModel(ServiceNodeTypes.VFmodule, generateVFModule());
+      expect(dynamicInputs).toEqual([{
+        id: '2017488_adiodvpe0_vnf_config_template_version',
+        type: 'string',
+        name: '2017488_adiodvpe0_vnf_config_template_version',
+        value: '17.2',
+        isRequired: true,
+        description: 'VPE Software Version'
+      }, {
+        id: '2017488_adiodvpe0_AIC_CLLI',
+        type: 'string',
+        name: '2017488_adiodvpe0_AIC_CLLI',
+        value: 'ATLMY8GA',
+        isRequired: true,
+        description: 'AIC Site CLLI'
+      }]);
+
+      /*get vfModule with no instance params should return empty array*/
+      dynamicInputs = service.updateDynamicInputsVnfDataFromModel(ServiceNodeTypes.VFmodule, generateVFModule2);
+      expect(dynamicInputs).toEqual([]);
+
+      /*get vf instance params should be undefined*/
+      dynamicInputs = service.updateDynamicInputsVnfDataFromModel(ServiceNodeTypes.VF, generateVNF());
+      expect(dynamicInputs).toEqual([]);
+    });
+  });
+
+  describe('#createNewVfModuleTreeNode', () => {
+    test('createNewVfModuleTreeNode with isEcompGeneratedNaming instance name not fill - missing data true', () => {
+      const vnfModuleUUID: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
+      const vfModuleModel = generateServiceHierarchy().vnfs['VF_vMee 0'].vfModules['vf_vmee0..VfVmee..base_vmme..module-0'];
+      const newVfModule = service.createNewVfModuleTreeNode(<any>{
+        instanceName: "",
+        instanceParams: {},
+        volumeGroupName: "",
+        isMissingData : false,
+        trackById: Math.random().toString()
+      }, vfModuleModel, vnfModuleUUID, false, [], "");
+      expect(newVfModule.name).toEqual('&lt;Automatically Assigned&gt;');
+      expect(newVfModule.missingData).toEqual(true);
+    });
+
+    test('createNewVfModuleTreeNode without isEcompGeneratedNaming missing data false', () => {
+      const vnfModuleUUID: string = 'vf_vmee0..VfVmee..base_vmme..module-0';
+      const vfModuleModel = generateServiceHierarchy().vnfs['VF_vMee 0'].vfModules['vf_vmee0..VfVmee..base_vmme..module-0'];
+      const newVfModule = service.createNewVfModuleTreeNode(<any>{
+        instanceName: "",
+        instanceParams: {},
+        volumeGroupName: "",
+        isMissingData : false,
+        trackById: Math.random().toString()
+      }, vfModuleModel, vnfModuleUUID, true, [], "");
+      expect(newVfModule.name).toEqual('&lt;Automatically Assigned&gt;');
+      expect(newVfModule.missingData).toEqual(false);
+    });
+  });
+
+  describe('#createNewVnfTreeNode', () => {
+    test('createNewVnfTreeNode with isEcompGeneratedNaming instance name not filled - missing data true', () => {
+      const vnfModel = generateServiceHierarchy().vnfs['VF_vMee 0'];
+      const newVnf = service.createNewTreeNode({
+        uuid : '',
+        instanceName: "",
+        productFamilyId: "productFamilyId",
+        lcpCloudRegionId: "lcpCloudRegionId",
+        legacyRegion: "legacyRegion",
+        tenantId: "tenantId",
+        platformName: "platformName",
+        lineOfBusiness: "lineOfBusiness",
+        rollbackOnFailure: "rollbackOnFailure",
+        originalName : null,
+        vfModules: {},
+        isMissingData: false,
+        trackById: Math.random().toString(),
+        vnfStoreKey: "abc"
+      }, new VNFModel(vnfModel),'VF_vMee 0', 'vnfs');
+      expect(newVnf.name).toEqual('VF_vMee 0');
+      expect(newVnf.missingData).toEqual(true);
+    });
+
+    test('createNewVnfTreeNode with isEcompGeneratedNaming instance name filled - missing data false', () => {
+      const vnfModel = generateServiceHierarchy().vnfs['VF_vMee 0'];
+      const newVnf = service.createNewTreeNode({
+        uuid : '',
+        instanceName: "instanceName",
+        productFamilyId: "productFamilyId",
+        lcpCloudRegionId: "lcpCloudRegionId",
+        legacyRegion: "legacyRegion",
+        tenantId: "tenantId",
+        platformName: "platformName",
+        lineOfBusiness: "lineOfBusiness",
+        rollbackOnFailure: "rollbackOnFailure",
+        originalName : null,
+        vfModules: {},
+        isMissingData: false,
+        trackById: Math.random().toString(),
+        vnfStoreKey: "abc"
+      }, vnfModel,'VF_vMee 0', 'vnfs');
+      expect(newVnf.name).toEqual("instanceName");
+      expect(newVnf.missingData).toEqual(false);
+    });
+  });
+
 });
 
 
 function generateServiceHierarchy() {
-  return JSON.parse('{"service":{"uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"ComplexService","version":"1.0","toscaModelURL":null,"category":"Mobility","serviceType":"","serviceRole":"","description":"ComplexService","serviceEcompNaming":"true","instantiationType":"Macro","inputs":{}},"vnfs":{"VF_vMee 0":{"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","description":"VSP_vMee","name":"VF_vMee","version":"2.0","customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","inputs":{},"commands":{},"properties":{"gpb2_Internal2_mac":"00:80:37:0E:02:22","sctp-b-ipv6-egress_src_start_port":"0","sctp-a-ipv6-egress_rule_application":"any","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","sctp-a-egress_rule_application":"any","sctp-b-ingress_action":"pass","sctp-b-ingress_rule_protocol":"icmp","ncb2_Internal1_mac":"00:80:37:0E:0F:12","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:80:37:0E:09:12","fsb_volume_size_0":"320.0","sctp-b-egress_src_addresses":"local","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-ingress_rule_protocol":"icmp","sctp-b-egress-src_start_port":"0.0","sctp-a-egress_src_addresses":"local","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-a-egress-src_start_port":"0.0","sctp-a-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","gpb1_Internal1_mac":"00:80:37:0E:01:22","sctp-b-egress_dst_subnet_prefix_len":"0.0","Internal2_net_cidr":"169.255.0.0","sctp-a-ingress-dst_start_port":"0.0","sctp-a-egress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:80:37:0E:0B:12","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-ipv6-egress_rule_application":"any","sctp-b-egress_action":"pass","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","fsb2_Internal1_mac":"00:80:37:0E:0D:12","sctp-a-ipv6-ingress-src_start_port":"0.0","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"169.253.0.0","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","sctp-a-ipv6-ingress_rule_application":"any","ecomp_generated_naming":"true","sctp-a-IPv6_ethertype":"IPv6","vlc2_Internal1_mac":"00:80:37:0E:02:12","vlc_st_virtualization_type":"virtual-machine","sctp-b-ingress-dst_start_port":"0.0","sctp-b-ingress-dst_end_port":"65535.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","int2_sec_group_name":"int2-sec-group","vlc_flavor_name":"nd.c16r64d1","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress-dst_start_port":"0","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_shared":"false","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:80:37:0E:01:12","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:80:37:0E:09:12","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","sctp-a-ipv6-egress_dst_end_port":"65535","Internal2_forwarding_mode":"l2","fsb2_Internal2_mac":"00:80:37:0E:0D:12","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:80:37:0E:02:22","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-ingress_dst_addresses":"local","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:80:37:0E:0F:12","vlc_st_interface_type_sctp_a":"left","vlc_st_interface_type_sctp_b":"right","sctp-a-src_subnet_prefix_v6":"::","vlc_st_version":"2","sctp-b-egress_ethertype":"IPv4","sctp-a-ingress_rule_application":"any","gpb1_Internal2_mac":"00:80:37:0E:01:22","instance_ip_family_v6":"v6","sctp-a-ipv6-egress_src_start_port":"0","sctp-b-ingress-src_start_port":"0.0","sctp-b-ingress_dst_addresses":"local","fsb1_Internal1_mac":"00:80:37:0E:0B:12","vlc_st_interface_type_oam":"management","multi_stage_design":"false","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"169.255.0.3","sctp-a-ipv6-ingress-dst_end_port":"65535","sctp-b-ipv6-egress-dst_start_port":"0","Internal1_net_gateway":"169.253.0.3","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-a-egress_rule_protocol":"icmp","sctp-b-ipv6-egress_action":"pass","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-a-ingress_action":"pass","sctp-b-egress_rule_protocol":"icmp","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","sctp-b-ipv6-ingress-dst_start_port":"0","vlc2_Internal2_mac":"00:80:37:0E:02:12","vlc_st_availability_zone":"true","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","Internal1_allow_transit":"true","gpb_flavor_name":"nv.c20r64d1","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-ingress_ethertype":"IPv4","vlc1_Internal2_mac":"00:80:37:0E:01:12","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-egress_rule_application":"any","sctp-b-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"},"type":"VF","modelCustomizationName":"VF_vMee 0","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{},"commands":{},"properties":{"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{"Port Mirroring Configuration By Policy 0":{"uuid":"b4398538-e89d-4f13-b33d-ca323434ba50","invariantUuid":"6ef0ca40-f366-4897-951f-abd65d25f6f7","description":"A port mirroring configuration by policy object","name":"Port Mirroring Configuration By Policy","version":"27.0","customizationUuid":"3c3b7b8d-8669-4b3b-8664-61970041fad2","inputs":{},"commands":{},"properties":{},"type":"Configuration","modelCustomizationName":"Port Mirroring Configuration By Policy 0","sourceNodes":[],"collectorNodes":null,"configurationByPolicy":false}},"serviceProxies":{},"vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"pnfs":{}}');
+  return JSON.parse('{"service":{"uuid":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","invariantUuid":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","name":"ComplexService","version":"1.0","toscaModelURL":null,"category":"Emanuel","serviceType":"","serviceRole":"","description":"ComplexService","serviceEcompNaming":"true","instantiationType":"Macro","inputs":{}},"vnfs":{"VF_vMee 0":{"uuid":"d6557200-ecf2-4641-8094-5393ae3aae60","invariantUuid":"4160458e-f648-4b30-a176-43881ffffe9e","description":"VSP_vMee","name":"VF_vMee","version":"2.0","customizationUuid":"91415b44-753d-494c-926a-456a9172bbb9","inputs":{},"commands":{},"properties":{"gpb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_start_port":"0","sctp-a-ipv6-egress_rule_application":"any","Internal2_allow_transit":"true","sctp-b-IPv6_ethertype":"IPv6","sctp-a-egress_rule_application":"any","sctp-b-ingress_action":"pass","sctp-b-ingress_rule_protocol":"icmp","ncb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-ingress-src_start_port":"0.0","ncb1_Internal2_mac":"00:11:22:EF:AC:DF","fsb_volume_size_0":"320.0","sctp-b-egress_src_addresses":"local","sctp-a-ipv6-ingress_ethertype":"IPv4","sctp-a-ipv6-ingress-dst_start_port":"0","sctp-b-ipv6-ingress_rule_application":"any","domain_name":"default-domain","sctp-a-ingress_rule_protocol":"icmp","sctp-b-egress-src_start_port":"0.0","sctp-a-egress_src_addresses":"local","sctp-b-display_name":"epc-sctp-b-ipv4v6-sec-group","sctp-a-egress-src_start_port":"0.0","sctp-a-ingress_ethertype":"IPv4","sctp-b-ipv6-ingress-dst_end_port":"65535","sctp-b-dst_subnet_prefix_v6":"::","nf_naming":"{ecomp_generated_naming=true}","sctp-a-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-b-egress-dst_start_port":"0.0","ncb_flavor_name":"nv.c20r64d1","gpb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-egress_dst_subnet_prefix_len":"0.0","Internal2_net_cidr":"10.0.0.10","sctp-a-ingress-dst_start_port":"0.0","sctp-a-egress-dst_start_port":"0.0","fsb1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-egress_ethertype":"IPv4","vlc_st_service_mode":"in-network-nat","sctp-a-ipv6-egress_ethertype":"IPv4","sctp-a-egress-src_end_port":"65535.0","sctp-b-ipv6-egress_rule_application":"any","sctp-b-egress_action":"pass","sctp-a-ingress-src_subnet_prefix_len":"0.0","sctp-b-ipv6-ingress-src_end_port":"65535.0","sctp-b-name":"epc-sctp-b-ipv4v6-sec-group","fsb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-a-ipv6-ingress-src_start_port":"0.0","sctp-b-ipv6-egress_ethertype":"IPv4","Internal1_net_cidr":"10.0.0.10","sctp-a-egress_dst_subnet_prefix":"0.0.0.0","fsb_flavor_name":"nv.c20r64d1","sctp_rule_protocol":"132","sctp-b-ipv6-ingress_src_subnet_prefix_len":"0","sctp-a-ipv6-ingress_rule_application":"any","ecomp_generated_naming":"false","sctp-a-IPv6_ethertype":"IPv6","vlc2_Internal1_mac":"00:11:22:EF:AC:DF","vlc_st_virtualization_type":"virtual-machine","sctp-b-ingress-dst_start_port":"0.0","sctp-b-ingress-dst_end_port":"65535.0","sctp-a-ipv6-ingress-src_end_port":"65535.0","sctp-a-display_name":"epc-sctp-a-ipv4v6-sec-group","sctp-b-ingress_rule_application":"any","int2_sec_group_name":"int2-sec-group","vlc_flavor_name":"nd.c16r64d1","sctp-b-ipv6-egress_src_addresses":"local","vlc_st_interface_type_int1":"other1","sctp-b-egress-src_end_port":"65535.0","sctp-a-ipv6-egress-dst_start_port":"0","vlc_st_interface_type_int2":"other2","sctp-a-ipv6-egress_rule_protocol":"any","Internal2_shared":"false","sctp-a-ipv6-egress_dst_subnet_prefix_len":"0","Internal2_rpf":"disable","vlc1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ipv6-egress_src_end_port":"65535","sctp-a-ipv6-egress_src_addresses":"local","sctp-a-ingress-dst_end_port":"65535.0","sctp-a-ipv6-egress_src_end_port":"65535","Internal1_forwarding_mode":"l2","Internal2_dhcp":"false","sctp-a-dst_subnet_prefix_v6":"::","pxe_image_name":"MME_PXE-Boot_16ACP04_GA.qcow2","vlc_st_interface_type_gtp":"other0","ncb1_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-src_subnet_prefix_v6":"::","sctp-a-egress_dst_subnet_prefix_len":"0.0","int1_sec_group_name":"int1-sec-group","Internal1_dhcp":"false","sctp-a-ipv6-egress_dst_end_port":"65535","Internal2_forwarding_mode":"l2","fsb2_Internal2_mac":"00:11:22:EF:AC:DF","sctp-b-egress_dst_subnet_prefix":"0.0.0.0","Internal1_net_cidr_len":"17","gpb2_Internal1_mac":"00:11:22:EF:AC:DF","sctp-b-ingress-src_subnet_prefix_len":"0.0","sctp-a-ingress_dst_addresses":"local","sctp-a-egress_action":"pass","fsb_volume_type_0":"SF-Default-SSD","ncb2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_sctp_a":"left","vlc_st_interface_type_sctp_b":"right","sctp-a-src_subnet_prefix_v6":"::","vlc_st_version":"2","sctp-b-egress_ethertype":"IPv4","sctp-a-ingress_rule_application":"any","gpb1_Internal2_mac":"00:11:22:EF:AC:DF","instance_ip_family_v6":"v6","sctp-a-ipv6-egress_src_start_port":"0","sctp-b-ingress-src_start_port":"0.0","sctp-b-ingress_dst_addresses":"local","fsb1_Internal1_mac":"00:11:22:EF:AC:DF","vlc_st_interface_type_oam":"management","multi_stage_design":"false","oam_sec_group_name":"oam-sec-group","Internal2_net_gateway":"10.0.0.10","sctp-a-ipv6-ingress-dst_end_port":"65535","sctp-b-ipv6-egress-dst_start_port":"0","Internal1_net_gateway":"10.0.0.10","sctp-b-ipv6-egress_rule_protocol":"any","gtp_sec_group_name":"gtp-sec-group","sctp-a-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-egress_dst_subnet_prefix_len":"0","sctp-a-ipv6-ingress_dst_addresses":"local","sctp-a-egress_rule_protocol":"icmp","sctp-b-ipv6-egress_action":"pass","sctp-a-ipv6-egress_action":"pass","Internal1_shared":"false","sctp-b-ipv6-ingress_rule_protocol":"any","Internal2_net_cidr_len":"17","sctp-a-name":"epc-sctp-a-ipv4v6-sec-group","sctp-a-ingress-src_end_port":"65535.0","sctp-b-ipv6-ingress_src_subnet_prefix":"0.0.0.0","sctp-a-egress-dst_end_port":"65535.0","sctp-a-ingress_action":"pass","sctp-b-egress_rule_protocol":"icmp","sctp-b-ipv6-ingress_action":"pass","vlc_st_service_type":"firewall","sctp-b-ipv6-egress_dst_end_port":"65535","sctp-b-ipv6-ingress-dst_start_port":"0","vlc2_Internal2_mac":"00:11:22:EF:AC:DF","vlc_st_availability_zone":"true","fsb_volume_image_name_1":"MME_FSB2_16ACP04_GA.qcow2","sctp-b-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_src_subnet_prefix_len":"0","Internal1_allow_transit":"true","gpb_flavor_name":"nv.c20r64d1","availability_zone_max_count":"1","fsb_volume_image_name_0":"MME_FSB1_16ACP04_GA.qcow2","sctp-b-ipv6-ingress_dst_addresses":"local","sctp-b-ipv6-egress_dst_subnet_prefix":"0.0.0.0","sctp-b-ipv6-ingress_ethertype":"IPv4","vlc1_Internal2_mac":"00:11:22:EF:AC:DF","sctp-a-ingress-src_subnet_prefix":"0.0.0.0","sctp-a-ipv6-ingress_action":"pass","Internal1_rpf":"disable","sctp-b-ingress_ethertype":"IPv4","sctp-b-egress_rule_application":"any","sctp-b-ingress-src_end_port":"65535.0","sctp-a-ipv6-ingress_rule_protocol":"any","sctp-a-ingress-src_start_port":"0.0","sctp-b-egress-dst_end_port":"65535.0"},"type":"VF","modelCustomizationName":"VF_vMee 0","vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"vfcInstanceGroups":{}}},"networks":{"ExtVL 0":{"uuid":"ddc3f20c-08b5-40fd-af72-c6d14636b986","invariantUuid":"379f816b-a7aa-422f-be30-17114ff50b7c","description":"ECOMP generic virtual link (network) base type for all other service-level and global networks","name":"ExtVL","version":"37.0","customizationUuid":"94fdd893-4a36-4d70-b16a-ec29c54c184f","inputs":{},"commands":{},"properties":{"network_assignments":"{is_external_network=false, ipv4_subnet_default_assignment={min_subnets_count=1}, ecomp_generated_network_assignment=false, ipv6_subnet_default_assignment={min_subnets_count=1}}","exVL_naming":"{ecomp_generated_naming=true}","network_flows":"{is_network_policy=false, is_bound_to_vpn=false}","network_homing":"{ecomp_selected_instance_node_target=false}"},"type":"VL","modelCustomizationName":"ExtVL 0"}},"collectionResource":{},"configurations":{"Port Mirroring Configuration By Policy 0":{"uuid":"b4398538-e89d-4f13-b33d-ca323434ba50","invariantUuid":"6ef0ca40-f366-4897-951f-abd65d25f6f7","description":"A port mirroring configuration by policy object","name":"Port Mirroring Configuration By Policy","version":"27.0","customizationUuid":"3c3b7b8d-8669-4b3b-8664-61970041fad2","inputs":{},"commands":{},"properties":{},"type":"Configuration","modelCustomizationName":"Port Mirroring Configuration By Policy 0","sourceNodes":[],"collectorNodes":null,"configurationByPolicy":false}},"serviceProxies":{},"vfModules":{"vf_vmee0..VfVmee..vmme_vlc..module-1":{"uuid":"522159d5-d6e0-4c2a-aa44-5a542a12a830","invariantUuid":"98a7c88b-b577-476a-90e4-e25a5871e02b","customizationUuid":"55b1be94-671a-403e-a26c-667e9c47d091","description":null,"name":"VfVmee..vmme_vlc..module-1","version":"2","modelCustomizationName":"VfVmee..vmme_vlc..module-1","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_vlc"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..vmme_gpb..module-2":{"uuid":"41708296-e443-4c71-953f-d9a010f059e1","invariantUuid":"1cca90b8-3490-495e-87da-3f3e4c57d5b9","customizationUuid":"6add59e0-7fe1-4bc4-af48-f8812422ae7c","description":null,"name":"VfVmee..vmme_gpb..module-2","version":"2","modelCustomizationName":"VfVmee..vmme_gpb..module-2","properties":{"minCountInstances":0,"maxCountInstances":null,"initialCount":0,"vfModuleLabel":"vmme_gpb"},"inputs":{},"volumeGroupAllowed":false},"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{},"volumeGroupAllowed":true}},"volumeGroups":{"vf_vmee0..VfVmee..base_vmme..module-0":{"uuid":"a27f5cfc-7f12-4f99-af08-0af9c3885c87","invariantUuid":"a6f9e51a-2b35-416a-ae15-15e58d61f36d","customizationUuid":"f8c040f1-7e51-4a11-aca8-acf256cfd861","description":null,"name":"VfVmee..base_vmme..module-0","version":"2","modelCustomizationName":"VfVmee..base_vmme..module-0","properties":{"minCountInstances":1,"maxCountInstances":1,"initialCount":1,"vfModuleLabel":"base_vmme"},"inputs":{}}},"pnfs":{}}');
 }
 
 
 function generateVNFFormValues() {
-  return JSON.parse('{"globalSubscriberId":"e433710f-9217-458d-a79d-1c7aff376d89","productFamilyId":"vRRaaS","subscriptionServiceType":"VIRTUAL USP","lcpCloudRegionId":"mtn6","tenantId":"1178612d2b394be4834ad77f567c0af2","aicZoneId":"JAG1","projectName":"DFW","owningEntityId":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","rollbackOnFailure":"true","bulkSize":1,"instanceParams":[{}],"modelInfo":{"modelInvariantId":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","modelVersionId":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","modelName":"ComplexService","modelVersion":"1.0"},"isUserProvidedNaming":false,"tenantName":"AIN Web Tool-15-D-SSPtestcustome","aicZoneName":"YUDFJULP-JAG1"}');
+  return JSON.parse('{"globalSubscriberId":"e433710f-9217-458d-a79d-1c7aff376d89","productFamilyId":"vTerrance","subscriptionServiceType":"TYLER SILVIA","lcpCloudRegionId":"hvf6","tenantId":"1178612d2b394be4834ad77f567c0af2","aicZoneId":"JAG1","projectName":"WATKINS","owningEntityId":"d61e6f2d-12fa-4cc2-91df-7c244011d6fc","rollbackOnFailure":"true","bulkSize":1,"instanceParams":[{}],"modelInfo":{"modelInvariantId":"e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0","modelVersionId":"6e59c5de-f052-46fa-aa7e-2fca9d674c44","modelName":"ComplexService","modelVersion":"1.0"},"tenantName":"AIN Web Tool-15-D-SSPtestcustome","aicZoneName":"YUDFJULP-JAG1"}');
+}
+
+function generateVFModule() {
+  return {
+    'uuid': '25284168-24bb-4698-8cb4-3f509146eca5',
+    'invariantUuid': '7253ff5c-97f0-4b8b-937c-77aeb4d79aa1',
+    'customizationUuid': 'f7e7c365-60cf-49a9-9ebf-a1aa11b9d401',
+    'description': null,
+    'name': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+    'version': '6',
+    'modelCustomizationName': '2017488AdiodVpe..ADIOD_vRE_BV..module-1',
+    'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+    'commands': {},
+    'volumeGroupAllowed': true,
+    'inputs': {
+      '2017488_adiodvpe0_vnf_config_template_version': {
+        'type': 'string',
+        'description': 'VPE Software Version',
+        'entry_schema': null,
+        'constraints': [],
+        'required': true,
+        'default': '17.2'
+      },
+      '2017488_adiodvpe0_AIC_CLLI': {
+        'type': 'string',
+        'description': 'AIC Site CLLI',
+        'entry_schema': null,
+        'constraints': [],
+        'required': true,
+        'default': 'ATLMY8GA'
+      }
+    }
+  };
+}
+
+function generateVFModule2() {
+  return {
+    'uuid': '0a0dd9d4-31d3-4c3a-ae89-a02f383e6a9a',
+    'invariantUuid': 'eff8cc59-53a1-4101-aed7-8cf24ecf8339',
+    'customizationUuid': '3cd946bb-50e0-40d8-96d3-c9023520b557',
+    'description': null,
+    'name': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+    'version': '6',
+    'modelCustomizationName': '2017488AdiodVpe..ADIOD_vPFE_BV..module-2',
+    'properties': {'minCountInstances': 0, 'maxCountInstances': null, 'initialCount': 0},
+    'commands': {},
+    'volumeGroupAllowed': true,
+    'inputs': {}
+  };
+}
+
+function generateVNF() {
+  return {
+    'uuid': '0903e1c0-8e03-4936-b5c2-260653b96413',
+    'invariantUuid': '00beb8f9-6d39-452f-816d-c709b9cbb87d',
+    'description': 'Name ADIOD vPE Description The provider edge function for the ADIOD service supported by the Junipers VMX product Category Router Vendor Juniper Vendor Release Code 17.2 Owners Mary Fragale. Updated 9-25 to use v8.0 of the Juniper Valid 2 VLM',
+    'name': '2017-388_ADIOD-vPE',
+    'version': '1.0',
+    'customizationUuid': '280dec31-f16d-488b-9668-4aae55d6648a',
+    'inputs': {
+      'vnf_config_template_version': {
+        'type': 'string',
+        'description': 'VPE Software Version',
+        'entry_schema': null,
+        'constraints': [],
+        'required': true,
+        'default': '17.2'
+      },
+      'bandwidth_units': {
+        'type': 'string',
+        'description': 'Units of bandwidth',
+        'entry_schema': null,
+        'constraints': [],
+        'required': true,
+        'default': 'Gbps'
+      },
+      'bandwidth': {
+        'type': 'string',
+        'description': 'Requested VPE bandwidth',
+        'entry_schema': null,
+        'constraints': [],
+        'required': true,
+        'default': '10'
+      },
+      'AIC_CLLI': {
+        'type': 'string',
+        'description': 'AIC Site CLLI',
+        'entry_schema': null,
+        'constraints': [],
+        'required': true,
+        'default': 'ATLMY8GA'
+      },
+      'ASN': {
+        'type': 'string',
+        'description': 'AV/PE',
+        'entry_schema': null,
+        'constraints': [],
+        'required': true,
+        'default': 'AV_vPE'
+      },
+      'vnf_instance_name': {
+        'type': 'string',
+        'description': 'The hostname assigned to the vpe.',
+        'entry_schema': null,
+        'constraints': [],
+        'required': true,
+        'default': 'mtnj309me6'
+      }
+    },
+    'commands': {
+      'vnf_config_template_version': {
+        'displayName': 'vnf_config_template_version',
+        'command': 'get_input',
+        'inputName': '2017488_adiodvpe0_vnf_config_template_version'
+      },
+      'bandwidth_units': {
+        'displayName': 'bandwidth_units',
+        'command': 'get_input',
+        'inputName': 'adiodvpe0_bandwidth_units'
+      },
+      'bandwidth': {'displayName': 'bandwidth', 'command': 'get_input', 'inputName': 'adiodvpe0_bandwidth'},
+      'AIC_CLLI': {'displayName': 'AIC_CLLI', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_AIC_CLLI'},
+      'ASN': {'displayName': 'ASN', 'command': 'get_input', 'inputName': '2017488_adiodvpe0_ASN'},
+      'vnf_instance_name': {
+        'displayName': 'vnf_instance_name',
+        'command': 'get_input',
+        'inputName': '2017488_adiodvpe0_vnf_instance_name'
+      }
+    },
+    'properties': {
+      'vmxvre_retype': 'RE-VMX',
+      'vnf_config_template_version': 'get_input:2017488_adiodvpe0_vnf_config_template_version',
+      'sriov44_net_id': '48d399b3-11ee-48a8-94d2-f0ea94d6be8d',
+      'int_ctl_net_id': '2f323477-6936-4d01-ac53-d849430281d9',
+      'vmxvpfe_sriov41_0_port_mac': '00:11:22:EF:AC:DF',
+      'int_ctl_net_name': 'VMX-INTXI',
+      'vmx_int_ctl_prefix': '10.0.0.10',
+      'sriov43_net_id': 'da349ca1-6de9-4548-be88-2d88e99bfef5',
+      'sriov42_net_id': '760669ba-013d-4d9b-b0e7-4151fe2e6279',
+      'sriov41_net_id': '25ad52d5-c165-40f8-b3b0-ddfc2373280a',
+      'nf_type': 'vPE',
+      'vmxvpfe_int_ctl_ip_1': '10.0.0.10',
+      'is_AVPN_service': 'false',
+      'vmx_RSG_name': 'vREXI-affinity',
+      'vmx_int_ctl_forwarding': 'l2',
+      'vmxvre_oam_ip_0': '10.0.0.10',
+      'vmxvpfe_sriov44_0_port_mac': '00:11:22:EF:AC:DF',
+      'vmxvpfe_sriov41_0_port_vlanstrip': 'false',
+      'vmxvpfe_sriov42_0_port_vlanfilter': '4001',
+      'vmxvpfe_sriov44_0_port_unknownunicastallow': 'true',
+      'vmxvre_image_name_0': 'VRE-ENGINE_17.2-S2.1.qcow2',
+      'vmxvre_instance': '0',
+      'vmxvpfe_sriov43_0_port_mac': '00:11:22:EF:AC:DF',
+      'vmxvre_flavor_name': 'ns.c1r16d32.v5',
+      'vmxvpfe_volume_size_0': '40.0',
+      'vmxvpfe_sriov43_0_port_vlanfilter': '4001',
+      'nf_naming': '{ecomp_generated_naming=true}',
+      'nf_naming_code': 'Navneet',
+      'vmxvre_name_0': 'vREXI',
+      'vmxvpfe_sriov42_0_port_vlanstrip': 'false',
+      'vmxvpfe_volume_name_0': 'vPFEXI_FBVolume',
+      'vmx_RSG_id': 'bd89a33c-13c3-4a04-8fde-1a57eb123141',
+      'vmxvpfe_image_name_0': 'VPE_ROUTING-ENGINE_17.2R1-S2.1.qcow2',
+      'vmxvpfe_sriov43_0_port_unknownunicastallow': 'true',
+      'vmxvpfe_sriov44_0_port_unknownmulticastallow': 'true',
+      'vmxvre_console': 'vidconsole',
+      'vmxvpfe_sriov44_0_port_vlanfilter': '4001',
+      'vmxvpfe_sriov42_0_port_mac': '00:11:22:EF:AC:DF',
+      'vmxvpfe_volume_id_0': '47cede15-da2f-4397-a101-aa683220aff3',
+      'vmxvpfe_sriov42_0_port_unknownmulticastallow': 'true',
+      'vmxvpfe_sriov44_0_port_vlanstrip': 'false',
+      'vf_module_id': '123',
+      'nf_function': 'JAI',
+      'vmxvpfe_sriov43_0_port_unknownmulticastallow': 'true',
+      'vmxvre_int_ctl_ip_0': '10.0.0.10',
+      'AIC_CLLI': 'get_input:2017488_adiodvpe0_AIC_CLLI',
+      'vnf_name': 'mtnj309me6vre',
+      'vmxvpfe_sriov41_0_port_unknownunicastallow': 'true',
+      'vmxvre_volume_type_1': 'HITACHI',
+      'vmxvpfe_sriov44_0_port_broadcastallow': 'true',
+      'vmxvre_volume_type_0': 'HITACHI',
+      'vmxvpfe_volume_type_0': 'HITACHI',
+      'vmxvpfe_sriov43_0_port_broadcastallow': 'true',
+      'bandwidth_units': 'get_input:adiodvpe0_bandwidth_units',
+      'vnf_id': '123',
+      'vmxvre_oam_prefix': '24',
+      'availability_zone_0': 'mtpocfo-kvm-az01',
+      'ASN': 'get_input:2017488_adiodvpe0_ASN',
+      'vmxvre_chassis_i2cid': '161',
+      'vmxvpfe_name_0': 'vPFEXI',
+      'bandwidth': 'get_input:adiodvpe0_bandwidth',
+      'availability_zone_max_count': '1',
+      'vmxvre_volume_size_0': '45.0',
+      'vmxvre_volume_size_1': '50.0',
+      'vmxvpfe_sriov42_0_port_broadcastallow': 'true',
+      'vmxvre_oam_gateway': '10.0.0.10',
+      'vmxvre_volume_name_1': 'vREXI_FAVolume',
+      'vmxvre_ore_present': '0',
+      'vmxvre_volume_name_0': 'vREXI_FBVolume',
+      'vmxvre_type': '0',
+      'vnf_instance_name': 'get_input:2017488_adiodvpe0_vnf_instance_name',
+      'vmxvpfe_sriov41_0_port_unknownmulticastallow': 'true',
+      'oam_net_id': 'b95eeb1d-d55d-4827-abb4-8ebb94941429',
+      'vmx_int_ctl_len': '24',
+      'vmxvpfe_sriov43_0_port_vlanstrip': 'false',
+      'vmxvpfe_sriov41_0_port_broadcastallow': 'true',
+      'vmxvre_volume_id_1': '6e86797e-03cd-4fdc-ba72-2957119c746d',
+      'vmxvpfe_sriov41_0_port_vlanfilter': '4001',
+      'nf_role': 'Testing',
+      'vmxvre_volume_id_0': 'f4eacb79-f687-4e9d-b760-21847c8bb15a',
+      'vmxvpfe_sriov42_0_port_unknownunicastallow': 'true',
+      'vmxvpfe_flavor_name': 'ns.c20r16d25.v5'
+    },
+    'type': 'VF',
+    'modelCustomizationName': '2017-388_ADIOD-vPE 1',
+    'vfModules': {},
+    'volumeGroups': {}
+  };
 }
diff --git a/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.ts b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.ts
index b1e676f..b0baa82 100644
--- a/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.ts
+++ b/vid-webpack-master/src/app/shared/services/defaultDataServiceGenerator/default.data.generator.service.ts
@@ -1,67 +1,355 @@
-import { Injectable } from '@angular/core';
+import {Injectable} from '@angular/core';
 import * as _ from 'lodash';
-import { createVFModuleInstance, updateVNFInstance } from '../../../service.actions';
-import { NgRedux } from '@angular-redux/store';
-import { AppState } from '../../../store/reducers';
+
+import {NgRedux} from '@angular-redux/store';
+import {AppState} from '../../store/reducers';
+import {VnfTreeNode} from "../../models/vnfTreeNode";
+import {VfModuleInstance} from "../../models/vfModuleInstance";
+import {VfModule} from "../../models/vfModule";
+import {VfModuleTreeNode} from "../../models/vfModuleTreeNode";
+import {InputType} from "../../models/inputTypes";
+import {ServiceNodeTypes} from "../../models/ServiceNodeTypes";
+import {Constants} from "../../utils/constants";
+import {Utils} from "../../utils/utils";
+import {NetworkTreeNode} from "../../models/networkTreeNode";
+import {createVNFInstance} from "../../storeUtil/utils/vnf/vnf.actions";
+import {changeInstanceCounter} from "../../storeUtil/utils/general/general.actions";
+import {createNetworkInstance} from "../../storeUtil/utils/network/network.actions";
+import {createVFModuleInstance} from "../../storeUtil/utils/vfModule/vfModule.actions";
+import {createVnfGroupInstance} from "../../storeUtil/utils/vnfGroup/vnfGroup.actions";
+import {VnfGroupTreeNode} from "../../models/vnfGroupTreeNode";
+import {ModelInfo} from "../../models/modelInfo";
+import {ServiceInstanceActions} from "../../models/serviceInstanceActions";
+import Parameter = Constants.Parameter;
 
 @Injectable()
 export class DefaultDataGeneratorService {
   static controlsFieldsStatus = {};
+  public requiredFields = {
+    VF: [InputType.LCP_REGION, InputType.TENANT, InputType.PLATFORM],
+    Network: [InputType.LCP_REGION, InputType.TENANT, InputType.PLATFORM],
+    VL: [InputType.LCP_REGION, InputType.TENANT, InputType.PLATFORM],
+    VFmodule: [],
+    VnfGroup: []
+  };
 
-  constructor(private store: NgRedux<AppState>) { }
+  constructor(private store: NgRedux<AppState>) {
+  }
 
-  updateReduxOnFirstSet(serviceId: string, formServiceValues: any): void {
-    const serviceHierarchy = this.store.getState().service.serviceHierarchy[serviceId];
-    if (serviceHierarchy && !_.isEmpty(serviceHierarchy.vnfs)) {
-      for (let vnfUUID in serviceHierarchy.vnfs) {
-        for (let vnfModuleUUID in serviceHierarchy.vnfs[vnfUUID].vfModules) {
-          if (serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].properties.minCountInstances > 0) {
+  public getArbitraryInputs(inputs) {
+    let parameter;
+    let parameterList = [];
+    for (let key in inputs) {
+      parameter = {
+        id: key,
+        type: Parameter.STRING,
+        name: key,
+        value: inputs[key][Parameter.DEFAULT],
+        isRequired: inputs[key][Parameter.REQUIRED],
+        description: inputs[key][Parameter.DESCRIPTION]
+      };
+      switch (inputs[key][Parameter.TYPE]) {
+        case Parameter.INTEGER:
+          parameter.type = Parameter.NUMBER;
+          break;
+        case Parameter.BOOLEAN:
+          parameter.type = Parameter.BOOLEAN;
+          break;
+        case Parameter.RANGE:
+          break;
+        case Parameter.LIST:
+          parameter.type = Parameter.LIST;
+          break;
+        case Parameter.MAP:
+          parameter.type = Parameter.MAP;
+          break;
+      }
+      if (Utils.hasContents(inputs[key][Parameter.CONSTRAINTS])
+        && ( inputs[key][Parameter.CONSTRAINTS].length > 0 )) {
+        let constraintsArray = inputs[key][Parameter.CONSTRAINTS];
+        this.addConstraintParameters(parameterList, constraintsArray, key, inputs, parameter);
+      }
+      else {
 
-            let vfModule = this.generateVFModule(serviceHierarchy, vnfUUID, vnfModuleUUID);
-            this.updateVNFInstanceRedux(
-              serviceHierarchy.vnfs[vnfUUID].modelName,
-              serviceId,
-              serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].properties.initialCount,
-              vfModule,
-              this.generateVNFData(serviceHierarchy, vnfUUID, vnfModuleUUID, formServiceValues),
-              vnfModuleUUID
-            );
+        parameterList.push(parameter);
+      }
+    }
+    return parameterList;
+  }
+
+  private addConstraintParameters(parameterList, constraintsArray, key, inputs, parameter) {
+    // If there are constraints and the operator is "valid_values",
+    // use a select parameter type.
+    let i: number = constraintsArray.length;
+    let parameterPushed: boolean = false;
+    if (i > 0) {
+      while ((i--) && (!parameterPushed)) {
+        let keys = Object.keys(constraintsArray[i]);
+        for (let operator in keys) {
+          switch (keys[operator]) {
+            case Parameter.VALID_VALUES:
+              let j: number = constraintsArray[i][Parameter.VALID_VALUES].length;
+              if (j > 0) {
+                let oList = [];
+                let option;
+                while (j--) {
+                  option = {
+                    name: constraintsArray[i][Parameter.VALID_VALUES][j],
+                    isDefault: false
+                  };
+                  if ((Utils.hasContents(inputs[key][Parameter.DEFAULT]) )
+                    && (inputs[key][Parameter.DEFAULT] === constraintsArray[i][Parameter.VALID_VALUES][j] )) {
+                    option = {
+                      name: constraintsArray[i][Parameter.VALID_VALUES][j],
+                      isDefault: true
+                    }
+                  }
+                  oList.push(option);
+                }
+                parameter.type = Parameter.SELECT;
+                parameter.optionList = oList;
+                parameterList.push(parameter);
+                parameterPushed = true;
+              }
+              break;
+
+            case Parameter.EQUAL:
+              if (constraintsArray[i][Parameter.EQUAL] != null) {
+                parameter.type = Parameter.STRING;
+                parameter.isReadOnly = true;
+                parameter.value = constraintsArray[i][Parameter.EQUAL];
+                parameterList.push(parameter);
+                parameterPushed = true;
+              }
+              break;
+
+            case Parameter.LENGTH:
+              if (constraintsArray[i][Parameter.LENGTH] != null) {
+                parameter.minLength = constraintsArray[i][Parameter.LENGTH];
+                parameter.maxLength = constraintsArray[i][Parameter.LENGTH];
+                parameterList.push(parameter);
+                parameterPushed = true;
+              }
+              break;
+            case Parameter.MAX_LENGTH:
+              if (constraintsArray[i][Parameter.MAX_LENGTH] != null) {
+                parameter.maxLength = constraintsArray[i][Parameter.MAX_LENGTH];
+                parameterList.push(parameter);
+                parameterPushed = true;
+              }
+              break;
+            case Parameter.MIN_LENGTH:
+              if (constraintsArray[i][Parameter.MIN_LENGTH] != null) {
+                parameter.minLength = constraintsArray[i][Parameter.MIN_LENGTH];
+                parameterList.push(parameter);
+                parameterPushed = true;
+              }
+              break;
+            case Parameter.IN_RANGE:
+              if (constraintsArray[i][Parameter.IN_RANGE] != null) {
+                if (constraintsArray[i][Parameter.IN_RANGE].length > 1) {
+                  parameter.min = constraintsArray[i][Parameter.IN_RANGE][0];
+                  parameter.max = constraintsArray[i][Parameter.IN_RANGE][1];
+                  parameter.type = Parameter.NUMBER;
+                  parameter.value = inputs[key][Parameter.DEFAULT];
+                  parameterList.push(parameter);
+                  parameterPushed = true;
+                }
+              }
+              break;
+            case Parameter.GREATER_THAN:
+              if (constraintsArray[i][Parameter.GREATER_THAN] != null) {
+                parameter.type = Parameter.NUMBER;
+                parameter.min = constraintsArray[i][Parameter.GREATER_THAN];
+                parameter.value = inputs[key][Parameter.DEFAULT];
+                parameterList.push(parameter);
+                parameterPushed = true;
+              }
+              break;
           }
         }
       }
     }
+  };
+
+  updateDynamicInputsVnfDataFromModel(modelType: string, model: any): any[] {
+    let displayInputs;
+    if (modelType === ServiceNodeTypes.VFmodule) {
+      displayInputs = model.inputs;
+    }
+    return _.isEmpty(displayInputs) ? [] : this.getArbitraryInputs(displayInputs);
+  }
+
+  updateNetworksOnFirstSet(serviceId: string, formServiceValues: any){
+    const serviceHierarchy = this.store.getState().service.serviceHierarchy[serviceId];
+    if (serviceHierarchy && !_.isEmpty(serviceHierarchy.networks)) {
+      for (let networkUUID in serviceHierarchy.networks) {
+        const isEcompGeneratedNaming = this.getIsEcompGeneratedNaming(serviceHierarchy.networks[networkUUID]);
+        let min_vnf_instances_greater_than_0 = serviceHierarchy.networks[networkUUID].properties['min_instances'] && serviceHierarchy.networks[networkUUID].properties['min_instances'] > 0;
+        if(this.store.getState().global.flags['FLAG_DEFAULT_VNF'] &&  min_vnf_instances_greater_than_0)
+        {
+          this.createNetworkInstanceReduxIfNotExist(
+            serviceId,
+            this.generateNetworkData(serviceHierarchy, networkUUID, formServiceValues, isEcompGeneratedNaming)
+          );
+        }
+      }
+    }
   }
 
-  updateVNFInstanceRedux(vnfModelName: string, serviceId: string, numberOfVfModules: number, vfModuleData: any, vnfData: any, vfModuleName : string): void {
-    if (numberOfVfModules > 0) {
-      this.store.dispatch(updateVNFInstance(vnfData, vnfData.modelInfo.modelCustomizationName, serviceId));
-      for (let i = 0; i < numberOfVfModules; i++) {
-        this.store.dispatch(createVFModuleInstance(vfModuleData, vfModuleName, serviceId));
+  updateVnfGroupsOnFirstSet(serviceId: string, formServiceValues: any){
+    const serviceHierarchy = this.store.getState().service.serviceHierarchy[serviceId];
+    if (serviceHierarchy && !_.isEmpty(serviceHierarchy.vnfGroups)) {
+      for (let vnfGroupUUID in serviceHierarchy.vnfGroups) {
+        const isEcompGeneratedNaming = this.getIsEcompGeneratedNaming(serviceHierarchy.vnfGroups[vnfGroupUUID]);
+        let min_vnf_group_instances_greater_than_0 = serviceHierarchy.vnfGroups[vnfGroupUUID].properties['min_instances'] && serviceHierarchy.vnfGroups[vnfGroupUUID].properties['min_instances'] > 0;
+        if(this.store.getState().global.flags['FLAG_DEFAULT_VNF'] &&  min_vnf_group_instances_greater_than_0)
+        {
+          this.createVnfGroupInstanceReduxIfNotExist(
+            serviceId,
+            this.generateVnfGroupData(serviceHierarchy, vnfGroupUUID, formServiceValues, isEcompGeneratedNaming)
+          );
+        }
+      }
+    }
+  }
+
+  updateReduxOnFirstSet(serviceId: string, formServiceValues: any): void {
+    this.updateNetworksOnFirstSet(serviceId, formServiceValues);
+    this.updateVnfGroupsOnFirstSet(serviceId, formServiceValues);
+    const serviceHierarchy = this.store.getState().service.serviceHierarchy[serviceId];
+    if (serviceHierarchy && !_.isEmpty(serviceHierarchy.vnfs)) {
+      for (let vnfUUID in serviceHierarchy.vnfs) {
+        const isEcompGeneratedNaming = this.getIsEcompGeneratedNaming(serviceHierarchy.vnfs[vnfUUID]);
+        for (let vnfModuleUUID in serviceHierarchy.vnfs[vnfUUID].vfModules) {
+          const vfModuleModel = serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID];
+          if (vfModuleModel.properties.minCountInstances > 0) {
+            let vfModule = this.generateVFModule(vfModuleModel, this.updateDynamicInputsVnfDataFromModel(ServiceNodeTypes.VFmodule, vfModuleModel), isEcompGeneratedNaming, formServiceValues.isALaCarte);
+            if (vfModuleModel.properties.initialCount > 0) {
+              this.createVNFInstanceReduxIfNotExist(
+                serviceId,
+                this.generateVNFData(serviceHierarchy, vnfUUID, formServiceValues, isEcompGeneratedNaming)
+              );
+
+              this.addDefaultVfModulesInRedux(
+                serviceId,
+                vfModuleModel.properties.initialCount,
+                vfModule,
+                vnfModuleUUID,
+                vnfUUID
+              )
+
+            }
+          }
+        }
+
+        let min_vnf_instances_greater_than_0 = serviceHierarchy.vnfs[vnfUUID].properties['min_instances'] && serviceHierarchy.vnfs[vnfUUID].properties['min_instances'] > 0;
+        if(this.store.getState().global.flags['FLAG_DEFAULT_VNF'] &&  min_vnf_instances_greater_than_0)
+        {
+          this.createVNFInstanceReduxIfNotExist(
+            serviceId,
+            this.generateVNFData(serviceHierarchy, vnfUUID, formServiceValues, isEcompGeneratedNaming)
+          );
+        }
       }
     }
   }
 
 
-  generateVFModule(serviceHierarchy: any, vnfUUID: string, vnfModuleUUID: string) {
+  private getIsEcompGeneratedNaming(vnfJson) {
+    const ecompGeneratedNaming = vnfJson.properties.ecomp_generated_naming;
+    return ecompGeneratedNaming === "true";
+  };
+
+  createVNFInstanceReduxIfNotExist(serviceId: string, vnfData: any): void {
+    if(!this.store.getState().service.serviceInstance[serviceId].vnfs[vnfData.modelInfo.modelCustomizationName]){
+      this.store.dispatch(createVNFInstance(vnfData, vnfData.modelInfo.modelCustomizationName, serviceId));
+      this.store.dispatch(changeInstanceCounter(vnfData.modelInfo.modelUniqueId, serviceId, 1, <any> {data : {type : 'VF'}}));
+    }
+  }
+
+  createNetworkInstanceReduxIfNotExist(serviceId: string, networkData: any): void {
+    if(!this.store.getState().service.serviceInstance[serviceId].vnfs[networkData.modelInfo.modelCustomizationName]){
+      this.store.dispatch(createNetworkInstance(networkData, networkData.modelInfo.modelCustomizationName, serviceId));
+      this.store.dispatch(changeInstanceCounter(networkData.modelInfo.modelUniqueId, serviceId, 1, <any> {data : {type : 'VL'}}));
+    }
+  }
+
+  createVnfGroupInstanceReduxIfNotExist(serviceId: string, vnfGroupData: any): void {
+    if(!this.store.getState().service.serviceInstance[serviceId].vnfGroups[vnfGroupData.modelInfo.modelCustomizationName]){
+      this.store.dispatch(createVnfGroupInstance(vnfGroupData, vnfGroupData.modelInfo.modelCustomizationName, serviceId));
+      this.store.dispatch(changeInstanceCounter(vnfGroupData.modelInfo.modelUniqueId , serviceId, 1, <any> {data : {type : 'VnfGroup'}}));
+    }
+  }
+
+  addDefaultVfModulesInRedux(serviceId: string, numberOfVfModules: number, vfModuleData: any, vfModuleName: string, vnfUUID : string){
+    for (let i = 0; i < numberOfVfModules; i++) {
+      this.store.dispatch(createVFModuleInstance(vfModuleData, vfModuleName, serviceId, null, vnfUUID));
+    }
+  }
+
+  generateVnfGroupInstance(vnfGroupModel: any, isEcompGeneratedNaming : boolean, isALaCarte: boolean, instanceName: string) {
+    let modelInfo = new ModelInfo(vnfGroupModel);
+    let instanceParams = {};
     return {
-      'sdncPreReload': null,
-      'modelInfo': {
-        'modelType': 'VFmodule',
-        'modelInvariantId': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].invariantUuid,
-        'modelVersionId': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].uuid,
-        'modelName': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].name,
-        'modelVersion': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].version,
-        'modelCustomizationId': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].customizationUuid,
-        'modelCustomizationName': serviceHierarchy.vnfs[vnfUUID].vfModules[vnfModuleUUID].modelCustomizationName
-      },
+      'uuid' : modelInfo.uuid,
+      'action': ServiceInstanceActions.Create,
+      'instanceName': (!isEcompGeneratedNaming) ? instanceName : null,
+      'isMissingData' : false,
+      'modelInfo': modelInfo,
+      'rollbackOnFailure' : "true",
       'instanceParams': [
-        {}
-      ]
+        instanceParams
+      ],
+      'trackById': DefaultDataGeneratorService.createRandomTrackById()
     };
   }
 
-  generateVNFData(serviceHierarchy: any, vnfName: string, vnfUUID: string, formValues: any) {
+
+  generateVFModule(vfModule: any, dynamicInputs: any, isEcompGeneratedNaming : boolean, isALaCarte: boolean) {
+    let instanceParams = {};
+    dynamicInputs.forEach(field => {
+      instanceParams[field.id] = field.value;
+    });
     return {
+      'isMissingData' : this.setIsMissingData(ServiceNodeTypes.VFmodule, dynamicInputs, isEcompGeneratedNaming, isALaCarte),
+      'sdncPreReload': null,
+      'modelInfo': {
+        'modelType': 'VFmodule',
+        'modelInvariantId': vfModule.invariantUuid,
+        'modelVersionId': vfModule.uuid,
+        'modelName': vfModule.name,
+        'modelVersion': vfModule.version,
+        'modelCustomizationId': vfModule.customizationUuid,
+        'modelCustomizationName': vfModule.modelCustomizationName,
+        'modelUniqueId' : vfModule.customizationUuid || vfModule.uuid
+      },
+      'instanceParams': [
+        instanceParams
+      ],
+      'trackById': DefaultDataGeneratorService.createRandomTrackById(),
+    };
+  }
+
+  setIsMissingData(type: string, dynamicInputs: any, isEcompGeneratedNaming: boolean, isAlaCarte?: boolean): boolean {
+    if (isAlaCarte || !isEcompGeneratedNaming || this.requiredFields[type].length > 0) {
+      return true;
+    }
+
+    if (dynamicInputs) {
+      for(let input of dynamicInputs) {
+        if (input.isRequired && _.isEmpty(input.value)) {
+          return true;
+        }
+      }
+    }
+    return false;
+  }
+
+  generateVNFData(serviceHierarchy: any, vnfName: string, formValues: any, isEcompGeneratedNaming) {
+    return {
+      'uuid' : serviceHierarchy.vnfs[vnfName].uuid,
+      'isMissingData' :this.setIsMissingData(ServiceNodeTypes.VF, [], isEcompGeneratedNaming),
       'productFamilyId': formValues.productFamilyId,
       'lcpCloudRegionId': null,
       'tenantId': null,
@@ -73,10 +361,100 @@
         'modelVersionId': formValues.modelInfo.modelVersionId,
         'modelName': serviceHierarchy.vnfs[vnfName].name,
         'modelVersion': serviceHierarchy.vnfs[vnfName].version,
-        'modelCustomizationId': serviceHierarchy.vnfs[vnfName].modelCustomizationId,
-        'modelCustomizationName': serviceHierarchy.vnfs[vnfName].modelCustomizationName
+        'modelCustomizationId': serviceHierarchy.vnfs[vnfName].customizationUuid,
+        'modelCustomizationName': serviceHierarchy.vnfs[vnfName].modelCustomizationName,
+        'modelUniqueId' : serviceHierarchy.vnfs[vnfName].customizationUuid || serviceHierarchy.vnfs[vnfName].uuid,
       },
-      'isUserProvidedNaming': null
+      'trackById': DefaultDataGeneratorService.createRandomTrackById(),
     }
   }
+
+  generateNetworkData(serviceHierarchy: any, networkName: string, formValues: any, isEcompGeneratedNaming) {
+      return {
+        'uuid' : serviceHierarchy.network[networkName].uuid,
+        'isMissingData' :this.setIsMissingData(ServiceNodeTypes.VL, [], isEcompGeneratedNaming),
+        'productFamilyId': formValues.productFamilyId,
+        'lcpCloudRegionId': null,
+        'tenantId': null,
+        'lineOfBusiness': null,
+        'platformName': null,
+        'modelInfo': {
+          'modelType': 'VF',
+          'modelInvariantId': serviceHierarchy.network[networkName].invariantUuid,
+          'modelVersionId': formValues.modelInfo.modelVersionId,
+          'modelName': serviceHierarchy.network[networkName].name,
+          'modelVersion': serviceHierarchy.network[networkName].version,
+          'modelCustomizationId': serviceHierarchy.network[networkName].modelCustomizationId,
+          'modelCustomizationName': serviceHierarchy.network[networkName].modelCustomizationName,
+          'modelUniqueId' : serviceHierarchy.network[networkName].modelCustomizationId || serviceHierarchy.network[networkName].uuid,
+        },
+        'trackById': DefaultDataGeneratorService.createRandomTrackById(),
+      }
+    }
+
+  generateVnfGroupData(serviceHierarchy: any, vnfGroupName: string, formValues: any, isEcompGeneratedNaming) {
+    return {
+      'uuid' : serviceHierarchy.vnfGroups[vnfGroupName].uuid,
+      'isMissingData' :this.setIsMissingData(ServiceNodeTypes.VnfGroup, [], isEcompGeneratedNaming),
+      'platformName': null,
+      'modelInfo': {
+        'modelType': 'VnfGroup',
+        'modelInvariantId': serviceHierarchy.vnfGroups[vnfGroupName].invariantUuid,
+        'modelVersionId': formValues.modelInfo.modelVersionId,
+        'modelName': serviceHierarchy.vnfGroups[vnfGroupName].name,
+        'modelVersion': serviceHierarchy.vnfGroups[vnfGroupName].version,
+        'modelCustomizationId': serviceHierarchy.vnfGroups[vnfGroupName].modelCustomizationId,
+        'modelCustomizationName': serviceHierarchy.vnfGroups[vnfGroupName].modelCustomizationName,
+        'modelUniqueId' : serviceHierarchy.vnfGroups[vnfGroupName].modelCustomizationId || serviceHierarchy.vnfGroups[vnfGroupName].uuid,
+
+      },
+      'trackById': DefaultDataGeneratorService.createRandomTrackById(),
+    }
+  }
+
+
+  static createRandomTrackById() {
+    return Math.random().toString(36).slice(2);
+  }
+
+  private checkMissingData(instance, type: string, dynamicInputs: any, isEcompGeneratedNaming: boolean): boolean {
+    if (!isEcompGeneratedNaming && _.isEmpty(instance.instanceName)) {
+      return true;
+    }
+
+    for (let field of this.requiredFields[type]) {
+      if (_.isEmpty(instance[field])) {
+        return true;
+      }
+    }
+
+    for (let field of dynamicInputs) {
+      if (field.isRequired && !_.isNil(instance.instanceParams) && _.isEmpty(instance.instanceParams[0][field.id])) {
+        return true;
+      }
+    }
+
+    return false;
+  }
+
+  createNewTreeNode(instance: any, model: any, storeKey : string, type : string): VnfTreeNode {
+    let tmp  = null;
+    if(type === 'vnfs') {
+      tmp = new VnfTreeNode(instance, model, storeKey);
+    }else if (type === 'vnfGroups') {
+      tmp = new VnfGroupTreeNode(instance, model, storeKey);
+    }else {
+      tmp = new NetworkTreeNode(instance, model, storeKey);
+    }
+    tmp.missingData = this.checkMissingData(instance, ServiceNodeTypes.VF, [], model.isEcompGeneratedNaming);
+
+    return tmp;
+  }
+
+  createNewVfModuleTreeNode(instance: VfModuleInstance, vfModuleModel: VfModule, vfModuleModelName: string, isEcompGeneratedNamig: boolean, dynamicInputs, dynamicModelName  :string): VfModuleTreeNode {
+    let newVfModule: VfModuleTreeNode = new VfModuleTreeNode(instance, vfModuleModel, vfModuleModelName, dynamicInputs, isEcompGeneratedNamig, dynamicModelName);
+    newVfModule.missingData = this.checkMissingData(instance, ServiceNodeTypes.VFmodule, dynamicInputs, isEcompGeneratedNamig);
+    return newVfModule;
+  }
+
 }
diff --git a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.spec.ts b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.spec.ts
new file mode 100644
index 0000000..847af66
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.spec.ts
@@ -0,0 +1,47 @@
+import {FeatureFlagsService, Features} from "./feature-flags.service";
+import {getTestBed, TestBed} from "@angular/core/testing";
+import {NgRedux} from "@angular-redux/store";
+import each from 'jest-each';
+let flagValue:boolean;
+
+class MockReduxStore<T> {
+
+  getState() {
+    return {
+      "global": {
+        "flags": {
+          "FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST": flagValue,
+        },
+      },
+    }
+  };
+}
+
+describe('Feature flags Service', () => {
+
+  let injector;
+  let service: FeatureFlagsService;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      providers: [
+        FeatureFlagsService,
+        {provide: NgRedux, useClass: MockReduxStore}]
+    });
+    await TestBed.compileComponents();
+
+    injector = getTestBed();
+    service = injector.get(FeatureFlagsService);
+
+  })().then(done).catch(done.fail));
+
+    let flagValueDataProvider = [
+      ['flag is true', true],
+      ['flag is false', false]
+    ];
+
+    each(flagValueDataProvider).test("should return the correct flag %s", (desc: string, flag: boolean) => {
+        flagValue = flag;
+        expect(service.getFlagState(Features.FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST)).toEqual(flag);
+    });
+});
diff --git a/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
new file mode 100644
index 0000000..ec7bb02
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/featureFlag/feature-flags.service.ts
@@ -0,0 +1,29 @@
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {Injectable} from "@angular/core";
+
+export enum Features {
+  FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST='FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST',
+  FLAG_1902_NEW_VIEW_EDIT='FLAG_1902_NEW_VIEW_EDIT',
+  FLAG_1902_VNF_GROUPING='FLAG_1902_VNF_GROUPING',
+  FLAG_VF_MODULE_RESUME_STATUS_CREATE = 'FLAG_VF_MODULE_RESUME_STATUS_CREATE',
+  DRAG_AND_DROP_OPERATION = 'DRAG_AND_DROP_OPERATION',
+  FLAG_1906_COMPONENT_INFO = 'FLAG_1906_COMPONENT_INFO',
+}
+
+@Injectable()
+export class FeatureFlagsService {
+
+  constructor(private store: NgRedux<AppState>){}
+
+  public getFlagState(flag: Features):boolean {
+    return FeatureFlagsService.getFlagState(flag, this.store);
+  }
+
+  /*static method for easy refactoring of code, so no injection of FeatureFlagsService is needed*/
+  public static getFlagState(flag: Features, store: NgRedux<AppState>):boolean {
+    return store.getState().global.flags[flag];
+  }
+
+
+}
diff --git a/vid-webpack-master/src/app/shared/services/msoService/mso.service.spec.ts b/vid-webpack-master/src/app/shared/services/msoService/mso.service.spec.ts
new file mode 100644
index 0000000..9142e8d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/msoService/mso.service.spec.ts
@@ -0,0 +1,37 @@
+import {getTestBed, TestBed} from '@angular/core/testing';
+import {HttpClientTestingModule, HttpTestingController} from '@angular/common/http/testing';
+import {MsoService} from './mso.service';
+import {Constants} from "../../utils/constants";
+
+
+describe('Mso Service', () => {
+  let injector;
+  let service: MsoService;
+  let httpMock: HttpTestingController;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+      imports: [HttpClientTestingModule],
+      providers: [MsoService]
+    });
+    await TestBed.compileComponents();
+
+
+    injector = getTestBed();
+    service = injector.get(MsoService);
+    httpMock = injector.get(HttpTestingController);
+
+  })().then(done).catch(done.fail));
+
+  describe('#instantiation status tests ', ()=> {
+    test('retry should send the right request', ()=>{
+      const jobId: string = '111';
+
+      service.retryMsoTask(jobId).subscribe();
+      const req = httpMock.expectOne(Constants.Path.SERVICES_JOB_INFO_PATH  + '/retry/' + jobId);
+
+      expect(req.request.method).toBe('POST');
+    });
+  });
+
+});
diff --git a/vid-webpack-master/src/app/shared/services/msoService/mso.service.ts b/vid-webpack-master/src/app/shared/services/msoService/mso.service.ts
new file mode 100644
index 0000000..7d31c6f
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/services/msoService/mso.service.ts
@@ -0,0 +1,38 @@
+import {Injectable} from "@angular/core";
+import {HttpClient} from "@angular/common/http";
+import {Observable} from "rxjs";
+import {Constants} from "../../utils/constants";
+import {ServiceInstance} from "../../models/serviceInstance";
+
+@Injectable()
+export class MsoService {
+  httpClient: HttpClient;
+
+  constructor(http: HttpClient) {
+    this.httpClient = http;
+  }
+
+
+  public submitMsoTask(instanceFields): Observable<any> {
+    let path = Constants.Path.SERVICES_JOB_INFO_PATH + '/bulk';
+    return this.httpClient.post(path, instanceFields);
+  }
+
+  public retryMsoTask(jobId: string): Observable<any> {
+    let pathQuery = Constants.Path.SERVICES_JOB_INFO_PATH + '/retry/' + jobId;
+    return this.httpClient.post<any>(pathQuery, null);
+  }
+
+  public retryBulkMsoTask(jobId: string, instanceFields: ServiceInstance): Observable<any> {
+    let pathQuery = Constants.Path.SERVICES_JOB_INFO_PATH + '/retryJobWithChangedData/'+ jobId;
+    return this.httpClient.post<any>(pathQuery, instanceFields);
+  }
+
+  public createVnf(requestDetails, serviceInstanceId): Observable<any> {
+    let pathQuery: string = Constants.Path.MSO_CREATE_VNF_INSTANCE + serviceInstanceId;
+
+    return this.httpClient.post( pathQuery, {
+      requestDetails : requestDetails
+    });
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/shared.module.ts b/vid-webpack-master/src/app/shared/shared.module.ts
index ab6ecaa..57af070 100644
--- a/vid-webpack-master/src/app/shared/shared.module.ts
+++ b/vid-webpack-master/src/app/shared/shared.module.ts
@@ -1,33 +1,77 @@
-import {NgModule, ModuleWithProviders} from '@angular/core';
+import {ModuleWithProviders, NgModule} from '@angular/core';
 import {CommonModule} from '@angular/common';
 import {RouterModule} from '@angular/router';
-import { BrowserModule } from '@angular/platform-browser';
-import { HttpClientModule } from '@angular/common/http';
-import { ServiceInfoService } from './server/serviceInfo/serviceInfo.service';
-import { PopoverModule } from 'ngx-bootstrap';
-import { AngularSvgIconModule } from 'angular-svg-icon';
-import { SvgDirective } from './directives/svg/svg.directive';
-import { PopoverComponent } from './components/popover/popover.component';
-import { EllipsisComponent } from './components/ellipsis/ellipsis.component';
-import { MessageBoxComponent } from './components/messageBox/messageBox.component';
-import { MessageBoxService } from './components/messageBox/messageBox.service';
-import { SdcUiComponentsModule , SdcUiComponents} from 'sdc-ui/lib/angular';
-import { HttpInterceptorService } from './utils/httpInterceptor/httpInterceptor.service';
-import { FormControlErrorComponent } from './components/formControlError/formControlError.component';
-import { InputPreventionPatternDirective } from './directives/inputPrevention/inputPreventionPattern.directive';
-import { FormGeneralErrorsComponent } from './components/formGeneralErrors/formGeneralErrors.component';
-import { NumbersLettersUnderscoreValidator } from './components/validators/numbersLettersUnderscore/numbersLettersUnderscore.validator';
-import { SpinnerComponent } from './components/spinner/spinner.component';
-import { NoContentMessageAndIconComponent } from './components/no-content-message-and-icon/no-content-message-and-icon.component';
-import { ModelInformationComponent } from './components/model-information/model-information.component';
-import { TooltipModule } from 'ngx-tooltip';
+import {BrowserModule} from '@angular/platform-browser';
+import {HttpClientModule} from '@angular/common/http';
+import {ServiceInfoService} from './server/serviceInfo/serviceInfo.service';
+import {ModalModule, PopoverModule} from 'ngx-bootstrap';
+import {PopoverComponent} from './components/popover/popover.component';
+import {EllipsisComponent} from './components/ellipsis/ellipsis.component';
+import {MessageBoxComponent} from './components/messageBox/messageBox.component';
+import {MessageBoxService} from './components/messageBox/messageBox.service';
+import {HttpInterceptorService} from './utils/httpInterceptor/httpInterceptor.service';
+import {FormControlErrorComponent} from './components/formControlError/formControlError.component';
+import {DropdownFormControlComponent} from "./components/formControls/component/dropdown/dropdown.formControl.component";
+import {InputPreventionPatternDirective} from './directives/inputPrevention/inputPreventionPattern.directive';
+import {FormGeneralErrorsComponent} from './components/formGeneralErrors/formGeneralErrors.component';
+import {SpinnerComponent} from './components/spinner/spinner.component';
+import {NoContentMessageAndIconComponent} from './components/no-content-message-and-icon/no-content-message-and-icon.component';
+import {ModelInformationComponent} from './components/model-information/model-information.component';
+import {TooltipModule} from 'ngx-tooltip';
 import {IframeService} from "./utils/iframe.service";
 import {CapitalizeAndFormatPipe} from "./pipes/capitalize/capitalize-and-format.pipe";
-import { DefaultDataGeneratorService } from './services/defaultDataServiceGenerator/default.data.generator.service';
+import {DefaultDataGeneratorService} from './services/defaultDataServiceGenerator/default.data.generator.service';
 import {ServiceInfoPipe} from "./pipes/serviceInfo/serviceInfo.pipe";
-import {HealthStatusService} from "./server/healthStatusService/health-status.service";
-import {ConfigurationService} from "../services/configuration.service";
-import {FlagsResolve} from "../services/flags.resolve";
+import {ConfigurationService} from "./services/configuration.service";
+import {InputFormControlComponent} from "./components/formControls/component/input/input.formControl.component";
+import {MultiselectFormControlComponent} from "./components/formControls/component/multiselect/multiselect.formControl.component";
+import {FormsModule, ReactiveFormsModule} from "@angular/forms";
+import {FormControlMessageErrorComponent} from "./components/formControls/errorMessage/formControlMessageError.component";
+import {GenericFormPopupComponent} from "./components/genericFormPopup/generic-form-popup.component";
+import {CheckboxFormControlComponent} from "./components/formControls/component/checkbox/checkbox.formControl.component";
+import {GenericFormService} from "./components/genericForm/generic-form.service";
+import {GenericFormComponent} from "./components/genericForm/generic-form.component";
+import {ServiceControlGenerator} from "./components/genericForm/formControlsServices/service.control.generator";
+import {BasicControlGenerator} from "./components/genericForm/formControlsServices/basic.control.generator";
+import {CustomValidators} from "./validators/uniqueName/uniqueName.validator";
+import {FileFormControlComponent} from "./components/formControls/component/file/file.formControl.component";
+import {NumberFormControlComponent} from "./components/formControls/component/number/number.formControl.component";
+import {AngularMultiSelectModule} from 'angular2-multiselect-dropdown';
+import {VnfControlGenerator} from "./components/genericForm/formControlsServices/vnfGenerator/vnf.control.generator";
+import {NetworkPopupService} from "./components/genericFormPopup/genericFormServices/network/network.popup.service";
+import {NetworkControlGenerator} from "./components/genericForm/formControlsServices/networkGenerator/network.control.generator";
+import {BasicPopupService} from "./components/genericFormPopup/genericFormServices/basic.popup.service";
+import {VfModulePopuopService} from "./components/genericFormPopup/genericFormServices/vfModule/vfModule.popuop.service";
+import {VfModuleControlGenerator} from "./components/genericForm/formControlsServices/vfModuleGenerator/vfModule.control.generator";
+import {OrderByPipe} from "./pipes/order/orderBy.pipe";
+import {ServicePopupService} from "./components/genericFormPopup/genericFormServices/service/service.popup.service";
+import {GenericFormPopupService} from "./components/genericFormPopup/generic-form-popup.service";
+import {FormGeneralErrorsService} from "./components/formGeneralErrors/formGeneralErrors.service";
+import {VnfPopupService} from "./components/genericFormPopup/genericFormServices/vnf/vnf.popup.service";
+import {SdcUiComponentsModule, SdcUiServices} from "onap-ui-angular";
+import {SafePipe} from "./pipes/safe/safe.pipe";
+import {ViewEditResolver} from "./resolvers/viewEdit/viewEdit.resolver";
+import {FlagsResolve} from "./resolvers/flag/flag.resolver";
+import {FeatureFlagModule} from "../featureFlag/featureFlag.module";
+import {VnfGroupPopupService} from "./components/genericFormPopup/genericFormServices/vnfGroup/vnfGroup.popup.service";
+import {VnfGroupControlGenerator} from "./components/genericForm/formControlsServices/vnfGroupGenerator/vnfGroup.control.generator";
+import {AuditInfoModalComponent} from "./components/auditInfoModal/auditInfoModal.component";
+import {BootstrapModalModule} from 'ng2-bootstrap-modal';
+import {DataTableModule} from "angular2-datatable";
+import {AuditInfoModalComponentService} from "./components/auditInfoModal/auditInfoModal.component.service";
+import {SearchMembersModalComponent} from "./components/searchMembersModal/search-members-modal.component";
+import {MembersTableComponent} from "./components/searchMembersModal/members-table/members-table.component";
+import {MembersTableService} from "./components/searchMembersModal/members-table/members-table.service";
+import {ObjectToArrayPipe} from "./pipes/objectToArray/objectToArray.pipe";
+import {DataFilterPipe} from "./pipes/dataFilter/data-filter.pipe";
+import {SvgComponent} from "./components/svg/svg-component";
+import {ErrorMsgComponent} from './components/error-msg/error-msg.component';
+import {ErrorMsgService} from "./components/error-msg/error-msg.service";
+import {RetryResolver} from "./resolvers/retry/retry.resolver";
+import {ClickOutsideDirective} from "./directives/clickOutside/clickOutside.directive";
+import {DynamicInputsComponent} from "./components/dynamic-inputs/dynamic-inputs.component";
+import {DynamicInputLabelPipe} from "./pipes/dynamicInputLabel/dynamic-input-label.pipe";
+import {ModelInformationService} from "./components/model-information/model-information.service";
 
 
 @NgModule({
@@ -37,49 +81,119 @@
     CommonModule,
     RouterModule,
     PopoverModule.forRoot(),
-    AngularSvgIconModule,
+    FeatureFlagModule.forRoot(),
+    FormsModule,
+    ReactiveFormsModule,
     TooltipModule,
     SdcUiComponentsModule,
+    AngularMultiSelectModule,
+    BootstrapModalModule,
+    DataTableModule,
+    ModalModule.forRoot()
   ],
   declarations: [
     PopoverComponent,
-    SvgDirective,
     EllipsisComponent,
     MessageBoxComponent,
     FormControlErrorComponent,
+    DropdownFormControlComponent,
+    MultiselectFormControlComponent,
+    FileFormControlComponent,
+    NumberFormControlComponent,
     InputPreventionPatternDirective,
+    ClickOutsideDirective,
     FormGeneralErrorsComponent,
     SpinnerComponent,
     NoContentMessageAndIconComponent,
     ModelInformationComponent,
     CapitalizeAndFormatPipe,
     ServiceInfoPipe,
+    OrderByPipe,
+    SafePipe,
+    ObjectToArrayPipe,
+    DataFilterPipe,
+    InputFormControlComponent,
+    FormControlMessageErrorComponent,
+    GenericFormPopupComponent,
+    SearchMembersModalComponent,
+    AuditInfoModalComponent,
+    GenericFormComponent,
+    CheckboxFormControlComponent,
+    MembersTableComponent,
+    SvgComponent,
+    ErrorMsgComponent,
+    DynamicInputsComponent,
+    DynamicInputLabelPipe
   ],
   exports: [
     PopoverComponent,
-    SvgDirective,
     EllipsisComponent,
     MessageBoxComponent,
     FormControlErrorComponent,
+    DropdownFormControlComponent,
     InputPreventionPatternDirective,
+    ClickOutsideDirective,
     FormGeneralErrorsComponent,
     SpinnerComponent,
     NoContentMessageAndIconComponent,
     ModelInformationComponent,
     CapitalizeAndFormatPipe,
     ServiceInfoPipe,
+    OrderByPipe,
+    SafePipe,
+    ObjectToArrayPipe,
+    DataFilterPipe,
+    InputFormControlComponent,
+    FormControlMessageErrorComponent,
+    GenericFormPopupComponent,
+    SearchMembersModalComponent,
+    AuditInfoModalComponent,
+    GenericFormComponent,
+    CheckboxFormControlComponent,
+    MembersTableComponent,
+    ErrorMsgComponent,
+    SvgComponent,
+    DynamicInputsComponent,
+    DynamicInputLabelPipe
+  ],
+  entryComponents : [
+    GenericFormPopupComponent,
+    SearchMembersModalComponent
   ],
   providers: [
     ServiceInfoService,
     MessageBoxService,
-    SdcUiComponents.ModalService,
+    SdcUiServices.ModalService,
+    SdcUiServices.LoaderService,
     HttpInterceptorService,
     IframeService,
-    NumbersLettersUnderscoreValidator,
     DefaultDataGeneratorService,
-    HealthStatusService,
     ConfigurationService,
-    FlagsResolve
+    GenericFormService,
+    FlagsResolve,
+    ViewEditResolver,
+    RetryResolver,
+    ServiceControlGenerator,
+    ServicePopupService,
+    VnfControlGenerator,
+    VfModuleControlGenerator,
+    BasicControlGenerator,
+    CustomValidators,
+    NetworkPopupService,
+    VfModulePopuopService,
+    NetworkControlGenerator,
+    VnfGroupControlGenerator,
+    VnfGroupPopupService,
+    BasicPopupService,
+    GenericFormPopupService,
+    FormGeneralErrorsService,
+    VnfPopupService,
+    AuditInfoModalComponentService,
+    VnfPopupService,
+    MembersTableService,
+    ErrorMsgService,
+    DataFilterPipe,
+    ModelInformationService,
   ]
 })
 export class SharedModule {
diff --git a/vid-webpack-master/src/app/shared/store/epics.ts b/vid-webpack-master/src/app/shared/store/epics.ts
new file mode 100644
index 0000000..c7b190d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/store/epics.ts
@@ -0,0 +1,11 @@
+import { Injectable } from '@angular/core';
+import {AAIEpics} from "../services/aaiService/aai.epics";
+
+@Injectable()
+export class RootEpics {
+  constructor(private aaiEpics: AAIEpics) {}
+
+  public createEpics()  {
+    return this.aaiEpics.createEpic();
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/store/module.ts b/vid-webpack-master/src/app/shared/store/module.ts
new file mode 100644
index 0000000..5a81f36
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/store/module.ts
@@ -0,0 +1,36 @@
+import {NgModule} from '@angular/core';
+import {NgReduxModule, NgRedux, DevToolsExtension} from '@angular-redux/store';
+import {RootEpics} from './epics';
+
+import rootReducer, {AppState} from "./reducers";
+import {AAIEpics} from "../services/aaiService/aai.epics";
+import {createEpicMiddleware} from "redux-observable";
+import {AaiService} from "../services/aaiService/aai.service";
+import {applyMiddleware, createStore} from "redux";
+
+@NgModule({
+  imports: [NgReduxModule],
+  providers: [RootEpics, AAIEpics],
+})
+
+export class StoreModule {
+  constructor(
+    public store: NgRedux<AppState>,
+    private aaiService : AaiService,
+    devTools: DevToolsExtension,
+    rootEpics: RootEpics,
+  ) {
+    const epicMiddleware = createEpicMiddleware();
+    const persistedState = sessionStorage.getItem('reduxState') ?
+      JSON.parse(sessionStorage.getItem('reduxState')) : {};
+
+    const configStore = createStore(
+      rootReducer,
+      <any>persistedState,
+      applyMiddleware(epicMiddleware)
+    );
+
+    epicMiddleware.run(rootEpics.createEpics());
+    store.provideStore(configStore);
+  }
+}
diff --git a/vid-webpack-master/src/app/shared/store/reducers.ts b/vid-webpack-master/src/app/shared/store/reducers.ts
new file mode 100644
index 0000000..90cdd27
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/store/reducers.ts
@@ -0,0 +1,16 @@
+import {MainReducer, ServiceState} from "../storeUtil/utils/main.reducer";
+import {globalReducer, GlobalState} from "../storeUtil/utils/global/global.reducers";
+import {combineReducers, Reducer} from "redux";
+
+
+export interface AppState {
+  global: GlobalState;
+  service: ServiceState;
+}
+
+const rootReducer: Reducer<AppState> = combineReducers<AppState>({
+  global: globalReducer,
+  service: MainReducer
+});
+
+export default rootReducer;
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.action.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.action.spec.ts
new file mode 100644
index 0000000..a65249a
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.action.spec.ts
@@ -0,0 +1,157 @@
+import {
+  GeneralActions, UpdateAicZonesAction,
+  UpdateLcpRegionsAndTenantsAction,
+  UpdateProductFamiliesAction,
+  UpdateSubscribersAction, UpdateUserIdAction
+} from "./general.actions";
+import {SelectOption} from "../../../models/selectOption";
+
+
+describe('general actions', () => {
+  test('#UPDATE_LCP_REGIONS_AND_TENANTS : action', () => {
+    const action: UpdateLcpRegionsAndTenantsAction = <UpdateLcpRegionsAndTenantsAction>{
+      type: GeneralActions.UPDATE_LCP_REGIONS_AND_TENANTS,
+      lcpRegionsAndTenants: {
+        "lcpRegionList": [],
+        "lcpRegionsTenantsMap": {}
+      }
+    };
+
+    expect(action.type).toEqual(GeneralActions.UPDATE_LCP_REGIONS_AND_TENANTS);
+    expect(action.lcpRegionsAndTenants.lcpRegionList).toEqual([]);
+    expect(action.lcpRegionsAndTenants.lcpRegionsTenantsMap).toEqual({});
+  });
+
+  test('#UPDATE_SUBSCRIBERS : action', () => {
+    const action: UpdateSubscribersAction = <UpdateSubscribersAction>{
+      type: GeneralActions.UPDATE_SUBSCRIBERS,
+      subscribers: [
+        {
+          "id": "ERICA5779-Subscriber-2",
+          "name": "ERICA5779-Subscriber-2",
+          "isPermitted": false
+        },
+        {
+          "id": "ERICA5779-Subscriber-3",
+          "name": "ERICA5779-Subscriber-3",
+          "isPermitted": false
+        },
+        {
+          "id": "ERICA5779-Subscriber-4",
+          "name": "ERICA5779-Subscriber-5",
+          "isPermitted": false
+        },
+        {
+          "id": "ERICA5779-TestSub-PWT-101",
+          "name": "ERICA5779-TestSub-PWT-101",
+          "isPermitted": false
+        },
+        {
+          "id": "ERICA5779-TestSub-PWT-102",
+          "name": "ERICA5779-TestSub-PWT-102",
+          "isPermitted": false
+        },
+        {
+          "id": "ERICA5779-TestSub-PWT-103",
+          "name": "ERICA5779-TestSub-PWT-103",
+          "isPermitted": false
+        },
+        {
+          "id": "31739f3e-526b-11e6-beb8-9e71128cae77",
+          "name": "CRAIG/ROBERTS",
+          "isPermitted": false
+        },
+        {
+          "id": "DHV1707-TestSubscriber-2",
+          "name": "DALE BRIDGES",
+          "isPermitted": false
+        },
+        {
+          "id": "jimmy-example",
+          "name": "JimmyExampleCust-20161102",
+          "isPermitted": false
+        },
+        {
+          "id": "jimmy-example2",
+          "name": "JimmyExampleCust-20161103",
+          "isPermitted": false
+        },
+        {
+          "id": "CAR_2020_ER",
+          "name": "CAR_2020_ER",
+          "isPermitted": true
+        },
+        {
+          "id": "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
+          "name": "Emanuel",
+          "isPermitted": false
+        },
+        {
+          "id": "21014aa2-526b-11e6-beb8-9e71128cae77",
+          "name": "JULIO ERICKSON",
+          "isPermitted": false
+        },
+        {
+          "id": "DHV1707-TestSubscriber-1",
+          "name": "LLOYD BRIDGES",
+          "isPermitted": false
+        },
+        {
+          "id": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "name": "SILVIA ROBBINS",
+          "isPermitted": true
+        }
+      ]
+    };
+
+    expect(action.type).toEqual(GeneralActions.UPDATE_SUBSCRIBERS);
+    expect(action.subscribers).toHaveLength(15);
+  });
+
+  test('#UPDATE_PRODUCT_FAMILIES : action', () => {
+    const action: UpdateProductFamiliesAction = <UpdateProductFamiliesAction>{
+      type: GeneralActions.UPDATE_PRODUCT_FAMILIES,
+      productFamilies: [
+        new SelectOption({
+          id : 'id',
+          name : 'name',
+          isPermitted : false
+        })
+      ]
+    };
+
+    expect(action.type).toEqual(GeneralActions.UPDATE_PRODUCT_FAMILIES);
+    expect(action.productFamilies).toHaveLength(1);
+  });
+
+
+  test('#UpdateAicZonesAction : action', () => {
+    const action: UpdateAicZonesAction = <UpdateAicZonesAction>{
+      type: GeneralActions.UPDATE_AIC_ZONES,
+      aicZones: [
+        new SelectOption({
+          id : 'id',
+          name : 'name',
+          isPermitted : false
+        })
+      ]
+    };
+
+    expect(action.type).toEqual(GeneralActions.UPDATE_AIC_ZONES);
+    expect(action.aicZones).toHaveLength(1);
+  });
+
+  test('#UpdateUserIdAction : action', () => {
+    const action: UpdateUserIdAction = <UpdateUserIdAction>{
+      type: GeneralActions.UPDATE_USER_ID,
+      userId: "userId"
+    };
+
+    expect(action.type).toEqual(GeneralActions.UPDATE_USER_ID);
+    expect(action.userId).toBe("userId");
+  });
+
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.actions.ts
new file mode 100644
index 0000000..7a10eba
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.actions.ts
@@ -0,0 +1,150 @@
+import {Action, ActionCreator} from "redux";
+import {LcpRegionsAndTenants} from "../../../models/lcpRegionsAndTenants";
+import {SelectOptionInterface} from "../../../models/selectOption";
+import {ServiceType} from "../../../models/serviceType";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+
+export enum GeneralActions {
+  UPDATE_LCP_REGIONS_AND_TENANTS = "UPDATE_LCP_REGIONS_AND_TENANTS",
+  UPDATE_SUBSCRIBERS = "UPDATE_SUBSCRIBERS",
+  UPDATE_PRODUCT_FAMILIES = "UPDATE_PRODUCT_FAMILIES",
+  UPDATE_SERVICE_TYPES = "UPDATE_SERVICE_TYPES",
+  UPDATE_AIC_ZONES = "UPDATE_AIC_ZONES",
+  UPDATE_USER_ID = "UPDATE_USER_ID",
+  UPDATE_NETWORK_FUNCTION = "UPDATE_NETWORK_FUNCTION",
+  UPDATE_CATEGORY_PARAMETERS = "UPDATE_CATEGORY_PARAMETERS",
+  REMOVE_INSTANCE = 'REMOVE_INSTANCE',
+  CHANGE_INSTANCE_COUNTER = 'CHANGE_INSTANCE_COUNTER',
+  DUPLICATE_BULK_INSTANCES = 'DUPLICATE_BULK_INSTANCES'
+}
+export interface UpdateLcpRegionsAndTenantsAction extends Action {
+  lcpRegionsAndTenants?: LcpRegionsAndTenants;
+}
+
+export interface RemoveInstanceAction extends Action {
+  modelName?: string;
+  serviceModelId: string;
+  storeKey : string;
+  node : ITreeNode;
+}
+
+export interface UpdateSubscribersAction extends Action {
+  subscribers?: SelectOptionInterface[];
+}
+
+export interface UpdateProductFamiliesAction extends Action {
+  productFamilies?: SelectOptionInterface[];
+}
+
+export interface UpdateAicZonesAction extends Action {
+  aicZones?: SelectOptionInterface[];
+}
+
+export interface UpdateServiceTypesAction extends Action {
+  serviceTypes?: ServiceType[];
+  subscriberId: string;
+}
+export interface UpdateUserIdAction extends Action {
+  userId: string;
+}
+
+export interface UpdateNetworkCollectionFunction extends Action {
+  networksAccordingToNetworkCollection: any;
+  network_function: any;
+}
+
+export interface UpdateCategoryParametersAction extends Action {
+  categoryParameters?: Object;
+}
+
+export interface ChangeInstanceCounterAction extends Action{
+  serviceUUID : string;
+  UUID : string;
+  changeBy : number;
+  node : ITreeNode;
+}
+
+export interface DuplicateBulkInstancesAction extends Action {
+  serviceId?: string;
+  modelName?: string;
+  originalName? : string;
+  objects? : {};
+  existingNames: {[key: string] : any};
+  node : ITreeNode;
+}
+
+export interface UpdateServiceTypesAction extends Action {
+  serviceTypes?: ServiceType[];
+  subscriberId: string;
+}
+
+export const updateLcpRegionsAndTenants: ActionCreator<UpdateLcpRegionsAndTenantsAction> = lcpRegionsAndTenants => ({
+  type: GeneralActions.UPDATE_LCP_REGIONS_AND_TENANTS,
+  lcpRegionsAndTenants: lcpRegionsAndTenants
+});
+
+export const updateSubscribers: ActionCreator<UpdateSubscribersAction> = subscribers => ({
+  type: GeneralActions.UPDATE_SUBSCRIBERS,
+  subscribers: subscribers
+});
+
+export const updateProductFamilies: ActionCreator<UpdateProductFamiliesAction> = productFamilies => ({
+  type: GeneralActions.UPDATE_PRODUCT_FAMILIES,
+  productFamilies: productFamilies
+});
+
+export const updateAicZones: ActionCreator<UpdateAicZonesAction> = aicZones => ({
+  type: GeneralActions.UPDATE_AIC_ZONES,
+  aicZones: aicZones
+});
+
+export const updateUserId: ActionCreator<UpdateUserIdAction> = userId => ({
+  type: GeneralActions.UPDATE_USER_ID,
+  userId: userId
+});
+
+export const updateNetworkCollectionFunction: ActionCreator<UpdateNetworkCollectionFunction> = (ncf, networksAccordingToNetworkCollection) => ({
+  type: GeneralActions.UPDATE_NETWORK_FUNCTION,
+  networksAccordingToNetworkCollection: networksAccordingToNetworkCollection["results"],
+  network_function: ncf
+});
+
+export const updateCategoryParameters: ActionCreator<UpdateCategoryParametersAction> = categoryParameters => ({
+  type: GeneralActions.UPDATE_CATEGORY_PARAMETERS,
+  categoryParameters: categoryParameters
+});
+
+export const removeInstance: ActionCreator<RemoveInstanceAction> = (modelName, serviceModelId, storeKey, node : ITreeNode) => ({
+  type: GeneralActions.REMOVE_INSTANCE,
+  modelName: modelName,
+  serviceModelId: serviceModelId,
+  storeKey: storeKey,
+  node : node
+});
+
+
+export const changeInstanceCounter: ActionCreator<ChangeInstanceCounterAction> = (UUID, serviceUUID , changeBy, node) => ({
+  type: GeneralActions.CHANGE_INSTANCE_COUNTER,
+  UUID: UUID,
+  serviceUUID: serviceUUID,
+  changeBy : changeBy || 1,
+  node : node
+});
+
+
+export const duplicateBulkInstances: ActionCreator<DuplicateBulkInstancesAction> = (serviceId, objects, existingNames, node) => ({
+  type: GeneralActions.DUPLICATE_BULK_INSTANCES,
+  serviceId: serviceId,
+  objects : objects,
+  existingNames: existingNames,
+  node : node
+});
+
+
+export const updateServiceTypes: ActionCreator<UpdateServiceTypesAction> = (serviceTypes, subscriberId) => ({
+  type: GeneralActions.UPDATE_SERVICE_TYPES,
+  serviceTypes: serviceTypes,
+  subscriberId: subscriberId
+});
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.reducers.spec.ts
new file mode 100644
index 0000000..ed45631
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.reducers.spec.ts
@@ -0,0 +1,376 @@
+import {LcpRegion} from "../../../models/lcpRegion";
+import {Tenant} from "../../../models/tenant";
+import {generalReducer} from "./general.reducers";
+import {
+  ChangeInstanceCounterAction,
+  RemoveInstanceAction,
+  DuplicateBulkInstancesAction,
+  GeneralActions,
+  UpdateAicZonesAction,
+  UpdateCategoryParametersAction,
+  UpdateProductFamiliesAction,
+  UpdateServiceTypesAction,
+  UpdateSubscribersAction,
+  UpdateUserIdAction, UpdateNetworkCollectionFunction,
+} from "./general.actions";
+import {SelectOption} from "../../../models/selectOption";
+import {ServiceType} from "../../../models/serviceType";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {VnfInstance} from "../../../models/vnfInstance";
+
+describe('generalReducer', () => {
+  test('#UPDATE_LCP_REGIONS_AND_TENANTS : should update lcp region and tenants', () => {
+    let lcpRegionsAndTenantsObj = [
+      {
+        lcpRegionList : [
+          new LcpRegion(
+            'cloudRegionID',
+            'cloudRegionID (cloudOwner)',
+            true,
+            'cloudOwner'
+          )
+        ],
+        lcpRegionsTenantsMap : {
+          "lcpRegion" : [new Tenant({
+            "tenantID" : "tenantID",
+            "tenantName" : "tenantName",
+            "is-permitted" : true
+          })]
+        }
+      }
+    ];
+    let lcpRegionsAndTenantsState = generalReducer(<any>{serviceInstance : {}},
+      <any>{
+        type: GeneralActions.UPDATE_LCP_REGIONS_AND_TENANTS,
+        lcpRegionsAndTenants : lcpRegionsAndTenantsObj
+      })['lcpRegionsAndTenants'];
+
+    expect(lcpRegionsAndTenantsState).toBeDefined();
+  });
+
+  test('#UPDATE_SUBSCRIBERS : should update subscribers', () => {
+    let subscribersList = [
+      new SelectOption({
+        id : 'id',
+        name : 'name',
+        isPermitted : false
+      })
+    ];
+    let subscribersState = generalReducer(<any>
+        {
+          serviceInstance : {}
+        },
+      <UpdateSubscribersAction>{
+        type: GeneralActions.UPDATE_SUBSCRIBERS,
+        subscribers : subscribersList
+      })['subscribers'];
+
+    expect(subscribersState).toBeDefined();
+    expect(subscribersState[0].id).toEqual(subscribersList[0].id);
+    expect(subscribersState[0].isPermitted).toEqual(subscribersList[0].isPermitted);
+    expect(subscribersState[0].name).toEqual(subscribersList[0].name);
+  });
+
+  test('#UPDATE_PRODUCT_FAMILIES : should update product families', () => {
+    let productFamiliesObj = [
+      new SelectOption({
+        id : 'id',
+        name : 'name',
+        isPermitted : false
+      })
+    ];
+    let productFamiliesState = generalReducer(<any>{serviceInstance : {}},
+      <UpdateProductFamiliesAction>{
+        type: GeneralActions.UPDATE_PRODUCT_FAMILIES,
+        productFamilies : productFamiliesObj
+      })['productFamilies'];
+
+    expect(productFamiliesState).toBeDefined();
+    expect(productFamiliesState[0].id).toEqual(productFamiliesObj[0].id);
+    expect(productFamiliesState[0].isPermitted).toEqual(productFamiliesObj[0].isPermitted);
+    expect(productFamiliesState[0].name).toEqual(productFamiliesObj[0].name);
+  });
+
+  test('#UPDATE_AIC_ZONES : should update aic zones', () => {
+    let aicZonesObj = [
+      new SelectOption({
+        id : 'id',
+        name : 'name',
+        isPermitted : false
+      })
+    ];
+    let aicZonesState = generalReducer(<any>{serviceInstance : {}},
+      <UpdateAicZonesAction>{
+        type: GeneralActions.UPDATE_AIC_ZONES,
+        aicZones : aicZonesObj
+      })['aicZones'];
+
+    expect(aicZonesState).toBeDefined();
+    expect(aicZonesState[0].id).toEqual(aicZonesObj[0].id);
+    expect(aicZonesState[0].isPermitted).toEqual(aicZonesObj[0].isPermitted);
+    expect(aicZonesState[0].name).toEqual(aicZonesObj[0].name);
+  });
+
+  test('#UPDATE_SERVICE_TYPES : should update service types', () => {
+    const subscriberId = 'subscriberId';
+    let serviceTypesList : ServiceType[] = [
+      new ServiceType('id',{
+        'service-type' : 'name',
+        'is-permitted' : true
+      })
+    ];
+    let serviceTypesState = generalReducer(<any>
+        {
+          serviceTypes : {
+          }
+        },
+      <UpdateServiceTypesAction>{
+        type: GeneralActions.UPDATE_SERVICE_TYPES,
+        subscriberId : subscriberId,
+        serviceTypes : serviceTypesList
+      })['serviceTypes'][subscriberId];
+
+    expect(serviceTypesState).toBeDefined();
+    expect(serviceTypesState[0].id).toEqual(serviceTypesList[0].id);
+    expect(serviceTypesState[0].isPermitted).toEqual(serviceTypesList[0].isPermitted);
+    expect(serviceTypesState[0].name).toEqual(serviceTypesList[0].name);
+  });
+
+  test('#UPDATE_CATEGORY_PARAMETERS : should update category parameters', () => {
+    let list = [
+      new SelectOption({
+        id : 'id',
+        name : 'name',
+        isPermitted : false
+      })
+    ];
+
+    const categoryParametersObj = {
+      owningEntityList : list,
+      projectList : list,
+      lineOfBusinessList : list,
+      platformList : list
+    };
+
+    let categoryParametersState = generalReducer(<any>{serviceInstance : {}},
+      <UpdateCategoryParametersAction>{
+        type: GeneralActions.UPDATE_CATEGORY_PARAMETERS,
+        categoryParameters : categoryParametersObj
+      })['categoryParameters'];
+
+    expect(categoryParametersState).toBeDefined();
+    expect(categoryParametersState['owningEntityList'][0].id).toEqual(list[0].id);
+    expect(categoryParametersState['owningEntityList'][0].isPermitted).toEqual(list[0].isPermitted);
+    expect(categoryParametersState['owningEntityList'][0].name).toEqual(list[0].name);
+
+    expect(categoryParametersState['projectList'][0].id).toEqual(list[0].id);
+    expect(categoryParametersState['projectList'][0].isPermitted).toEqual(list[0].isPermitted);
+    expect(categoryParametersState['projectList'][0].name).toEqual(list[0].name);
+
+    expect(categoryParametersState['lineOfBusinessList'][0].id).toEqual(list[0].id);
+    expect(categoryParametersState['lineOfBusinessList'][0].isPermitted).toEqual(list[0].isPermitted);
+    expect(categoryParametersState['lineOfBusinessList'][0].name).toEqual(list[0].name);
+
+    expect(categoryParametersState['platformList'][0].id).toEqual(list[0].id);
+    expect(categoryParametersState['platformList'][0].isPermitted).toEqual(list[0].isPermitted);
+    expect(categoryParametersState['platformList'][0].name).toEqual(list[0].name);
+  });
+
+  test('#UPDATE_USER_ID : should update user id', () => {
+    const userId = 'userId';
+    let userState = generalReducer(<any>{serviceInstance : {}},
+      <UpdateUserIdAction>{
+        type: GeneralActions.UPDATE_USER_ID,
+        userId : userId
+      })['userId'];
+
+    expect(userState).toBeDefined();
+    expect(userState).toEqual(userId);
+  });
+
+  test('#DELETE_VNF_INSTANCE : should delete existing vnf', () => {
+    let state = generalReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'modelName' : {}
+            }
+          }
+        }},
+      <RemoveInstanceAction>{
+        type: GeneralActions.REMOVE_INSTANCE,
+        modelName : 'modelName',
+        serviceModelId : 'serviceModelId',
+        storeKey : 'modelName',
+        node : {
+          data : {
+            type : 'VF'
+          }
+        }
+      });
+
+    expect(state).toBeDefined();
+    expect(state.serviceInstance[ 'serviceModelId'].vnfs['modelName']).not.toBeDefined();
+  });
+
+  test('#DELETE_VNF_INSTANCE : should delete existing network', () => {
+    let state = generalReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            'networks' : {
+              'modelName' : {}
+            }
+          }
+        }},
+      <RemoveInstanceAction>{
+        type: GeneralActions.REMOVE_INSTANCE,
+        modelName : 'modelName',
+        serviceModelId : 'serviceModelId',
+        storeKey : 'modelName',
+        node : {
+          data : {
+            type : 'VL'
+          }
+        }
+      });
+
+    expect(state).toBeDefined();
+    expect(state.serviceInstance['serviceModelId'].networks['modelName']).not.toBeDefined();
+  });
+
+  test('#CHANGE_VNF_INSTANCE_COUNTER : should init existingVNFCounterMap to 1', () => {
+    let state = generalReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vnfName' : { }
+            },
+            existingVNFCounterMap : {
+
+            }
+          }
+        }},
+      <ChangeInstanceCounterAction>{
+        type: GeneralActions.CHANGE_INSTANCE_COUNTER,
+        serviceUUID : 'serviceModelId',
+        node : {data : {type : 'VF'}},
+        UUID : 'vnfUUID',
+        changeBy : 1
+      });
+
+    expect(state).toBeDefined();
+    expect(state.serviceInstance['serviceModelId'].existingVNFCounterMap['vnfUUID']).toEqual(1);
+  });
+
+  test('#CHANGE_VNF_INSTANCE_COUNTER : should increase existingVNFCounterMap to 2 if VNF exist', () => {
+    let state = generalReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vnfName' : { }
+            },
+            existingVNFCounterMap : {
+              'vnfUUID' : 1
+            }
+          }
+        }},
+      <ChangeInstanceCounterAction>{
+        type: GeneralActions.CHANGE_INSTANCE_COUNTER,
+        serviceUUID : 'serviceModelId',
+        UUID : 'vnfUUID',
+        node : {data : {type : 'VF'}},
+        changeBy : 1
+      });
+
+    expect(state).toBeDefined();
+    expect(state.serviceInstance['serviceModelId'].existingVNFCounterMap['vnfUUID']).toEqual(2);
+  });
+
+  test('#CHANGE_VNF_INSTANCE_COUNTER : should remove existingVNFCounterMap to 0 remove VNF', () => {
+
+    let state = generalReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vnfName' : { }
+            },
+            existingVNFCounterMap : {
+              'vnfUUID' : 1
+            }
+          }
+        }},
+      <ChangeInstanceCounterAction>{
+        type: GeneralActions.CHANGE_INSTANCE_COUNTER,
+        serviceUUID : 'serviceModelId',
+        UUID : 'vnfUUID',
+        node : {data : {type : 'VF'}},
+        changeBy : -1
+      });
+
+    expect(state).toBeDefined();
+    expect(state.serviceInstance['serviceModelId'].existingVNFCounterMap['vnfUUID']).toEqual(0);
+  });
+
+  test('#DUPLICATE_BULK_INSTANCES : should duplicate existing VNF/Network', ()=>{
+    let existingNames = {
+      'vnfOriginalName' : 1
+    };
+
+    let vnfInstance: VnfInstance = new VnfInstance();
+    vnfInstance.originalName = 'vnfOriginalName';
+    vnfInstance.vnfStoreKey = 'vnfStoreKey';
+
+    let cloneObjects = {
+      'vnfOriginalName' : vnfInstance,
+      'vnfOriginalName:0001' : vnfInstance,
+      'vnfOriginalName:0002' : vnfInstance,
+      'vnfOriginalName:0003' : vnfInstance
+    };
+
+    let node : ITreeNode = <any>{
+      data : {
+        serviceId : 'serviceModelId',
+        vnfStoreKey : 'vnfStoreKey',
+        type : 'VF'
+      }
+    };
+
+    let vnfsState = generalReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+            },
+            existingVNFCounterMap : {}
+          }
+        }},
+      <DuplicateBulkInstancesAction>{
+        type: GeneralActions.DUPLICATE_BULK_INSTANCES,
+        serviceId: 'serviceModelId',
+        modelName: 'modelName',
+        originalName : 'modelName',
+        objects : cloneObjects,
+        existingNames: existingNames,
+        node : node
+      }).serviceInstance['serviceModelId'].vnfs;
+
+    expect(vnfsState).toBeDefined();
+    expect(Object.keys(vnfsState).length).toEqual(4);
+  });
+
+  test('#UPDATE_NETWORK_FUNCTION : should update network functions', ()=>{
+    let state = generalReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+            },
+            existingVNFCounterMap : {}
+          }
+        }},
+      <UpdateNetworkCollectionFunction>{
+        type: GeneralActions.UPDATE_NETWORK_FUNCTION,
+        network_function : {
+          results : []
+        },
+        networksAccordingToNetworkCollection : "networksAccordingToNetworkCollection"
+      });
+
+    expect(state).toBeDefined();
+    expect(state['networkFunctions']).toBeDefined();
+  });
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.reducers.ts
new file mode 100644
index 0000000..8ee4733
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/general/general.reducers.ts
@@ -0,0 +1,147 @@
+import {Action} from "redux";
+import {
+  ChangeInstanceCounterAction, RemoveInstanceAction, DuplicateBulkInstancesAction,
+  GeneralActions,
+  UpdateAicZonesAction, UpdateCategoryParametersAction,
+  UpdateLcpRegionsAndTenantsAction, UpdateNetworkCollectionFunction,
+  UpdateProductFamiliesAction, UpdateServiceTypesAction,
+  UpdateSubscribersAction, UpdateUserIdAction
+} from "./general.actions";
+import {TypeNodeInformation} from "../../../../drawingBoard/service-planning/typeNodeInformation.model";
+import * as _ from "lodash";
+import {ITreeNode} from "angular-tree-component/dist/defs/api";
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {ServiceState} from "../main.reducer";
+
+export function generalReducer(state: ServiceState, action: Action) : ServiceState {
+  switch (action.type) {
+    case GeneralActions.UPDATE_LCP_REGIONS_AND_TENANTS: {
+      Object.assign(state, (<UpdateLcpRegionsAndTenantsAction>action));
+      return Object.assign({}, state);
+    }
+    case GeneralActions.UPDATE_SUBSCRIBERS: {
+      Object.assign(state, (<UpdateSubscribersAction>action));
+      return Object.assign({}, state);
+    }
+    case GeneralActions.UPDATE_AIC_ZONES: {
+      Object.assign(state, (<UpdateAicZonesAction>action));
+      return Object.assign({}, state);
+    }
+    case GeneralActions.UPDATE_PRODUCT_FAMILIES: {
+      Object.assign(state, (<UpdateProductFamiliesAction>action));
+      return Object.assign({}, state);
+    }
+    case GeneralActions.UPDATE_NETWORK_FUNCTION: {
+      const networkFunctionReduxObj = state['networkFunctions'] == undefined ? {} : state['networkFunctions'];
+      networkFunctionReduxObj[(<UpdateNetworkCollectionFunction>action).network_function] = (<UpdateNetworkCollectionFunction>action).networksAccordingToNetworkCollection;
+      Object.assign(state, {'networkFunctions': networkFunctionReduxObj});
+      return Object.assign({}, state);
+    }
+    case GeneralActions.UPDATE_SERVICE_TYPES: {
+      state.serviceTypes[(<UpdateServiceTypesAction>action).subscriberId] = (<UpdateServiceTypesAction>action).serviceTypes;
+      return Object.assign({}, state);
+    }
+    case GeneralActions.UPDATE_CATEGORY_PARAMETERS: {
+      Object.assign(state, (<UpdateCategoryParametersAction>action));
+      return Object.assign({}, state);
+    }
+    case GeneralActions.UPDATE_USER_ID: {
+      const updateUserId: UpdateUserIdAction = <UpdateUserIdAction>action;
+      let newState = _.cloneDeep(state);
+      newState['userId'] = updateUserId.userId;
+      return newState;
+    }
+    case GeneralActions.REMOVE_INSTANCE: {
+      const actionData = (<RemoveInstanceAction>action);
+      if (state.serviceInstance[actionData.serviceModelId]) {
+        const typeNodeInformation : TypeNodeInformation = new TypeNodeInformation(actionData.node);
+        updateIsMissingDataOnDelete(state, actionData.serviceModelId, actionData.storeKey, actionData.node);
+        updateUniqueNames(state.serviceInstance[actionData.serviceModelId][typeNodeInformation.hierarchyName][actionData.storeKey].instanceName, null, state.serviceInstance[actionData.serviceModelId]);
+        if(actionData.node.data.type === 'VF'){
+          _.forOwn(state.serviceInstance[actionData.serviceModelId][typeNodeInformation.hierarchyName][actionData.storeKey].vfModules, (vfModuleMap) => {
+            _.forOwn(vfModuleMap, (vfModuleInstance) => {
+              updateUniqueNames(vfModuleInstance.instanceName, null, state.serviceInstance[actionData.serviceModelId]);
+            })
+          });
+        }
+        delete state.serviceInstance[actionData.serviceModelId][typeNodeInformation.hierarchyName][actionData.storeKey];
+      }
+      return Object.assign({}, state);
+    }
+
+    case GeneralActions.CHANGE_INSTANCE_COUNTER : {
+      const changeInstanceCounterAction = <ChangeInstanceCounterAction>action;
+      const typeNodeInformation : TypeNodeInformation =  new TypeNodeInformation(changeInstanceCounterAction.node);
+      let newState = _.cloneDeep(state);
+
+      let existing: number = getExistingCounter(newState, changeInstanceCounterAction.serviceUUID, changeInstanceCounterAction.UUID, typeNodeInformation);
+      newState.serviceInstance[changeInstanceCounterAction.serviceUUID][typeNodeInformation.existingMappingCounterName][changeInstanceCounterAction.UUID] = existing ? existing + changeInstanceCounterAction.changeBy : changeInstanceCounterAction.changeBy;
+      return newState;
+    }
+
+    case GeneralActions.DUPLICATE_BULK_INSTANCES : {
+      const createInstanceAction = <DuplicateBulkInstancesAction>action;
+      const typeNodeInformation : TypeNodeInformation =  new TypeNodeInformation(createInstanceAction.node);
+      const serviceId = createInstanceAction.serviceId;
+      const objects = createInstanceAction.objects;
+
+      let newState = _.cloneDeep(state);
+      newState.serviceInstance[serviceId].existingNames = createInstanceAction.existingNames;
+      newState.serviceInstance[serviceId][typeNodeInformation.hierarchyName] = Object.assign({}, newState.serviceInstance[serviceId][typeNodeInformation.hierarchyName], objects);
+      return newState;
+    }
+  }
+}
+
+const getExistingCounter = (state: any, serviceModelId: string, modelId: string, typeNodeInformation : TypeNodeInformation ) : number => {
+  const serviceExistingCounterMap = state.serviceInstance[serviceModelId][typeNodeInformation.existingMappingCounterName];
+  if(serviceExistingCounterMap && !_.isNil(serviceExistingCounterMap[modelId])){
+    return serviceExistingCounterMap[modelId];
+  }else {
+    return null;
+  }
+};
+
+const updateIsMissingDataOnDelete = (state: any, serviceModelId: string, storeKey: string, node: ITreeNode): void => {
+  const typeNodeInformation : TypeNodeInformation = new TypeNodeInformation(node);
+  let vnf = state.serviceInstance[serviceModelId][typeNodeInformation.hierarchyName][storeKey];
+  if(node.children){
+    _.forOwn(vnf.vfModules, (vfModules, vfModulesKey) => {
+      updateIsMissingDataOnDeleteVFModule(state, serviceModelId, storeKey, vfModulesKey);
+    });
+  }
+
+
+  let isMissingData: boolean = state.serviceInstance[serviceModelId][typeNodeInformation.hierarchyName][storeKey].isMissingData;
+  updateServiceValidationCounter(state, isMissingData, false, serviceModelId);
+};
+
+const updateUniqueNames = (oldName : string, newName : string, serviceInstance : ServiceInstance) : void => {
+  let existingNames = serviceInstance.existingNames;
+  if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
+    delete existingNames[oldName.toLowerCase()];
+  }
+  if(!_.isNil(newName)) {
+    existingNames[newName.toLowerCase()] = "";
+  }
+};
+
+const updateIsMissingDataOnDeleteVFModule = (state: any, serviceModelId: string, vnfStoreKey: string, vfModuleName): void => {
+  const vfModules = state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].vfModules[vfModuleName];
+
+  _.forOwn(vfModules, (vfModuleInstance) => {
+    let isMissingData: boolean = vfModuleInstance.isMissingData;
+    updateServiceValidationCounter(state, isMissingData, false, serviceModelId);
+  });
+};
+
+const updateServiceValidationCounter = (newState: any, oldValidationState: boolean, newValidationState: boolean, serviceUuid: string) => {
+  if (oldValidationState && !newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter--;
+  } else if (!oldValidationState && newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter++;
+  }
+};
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.actions.ts
new file mode 100644
index 0000000..609ec69
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.actions.ts
@@ -0,0 +1,37 @@
+import {Action, ActionCreator} from "redux";
+
+export enum GlobalActions {
+  UPDATE_NAME = 'UPDATE_NAME',
+  UPDATE_FLAGS = 'UPDATE_FLAGS',
+  UPDATE_DRAWING_BOARD_STATUS = 'UPDATE_DRAWING_BOARD_STATUS'
+}
+
+export interface UpdateGlobalAction extends Action {
+  name?: string;
+}
+
+export interface UpdateFlagsAction extends Action {
+  flags?: any;
+}
+
+export interface UpdateDrawingBoardStatusAction extends Action{
+  drawingBoardStatus?: any;
+}
+
+export const updateName: ActionCreator<UpdateGlobalAction> =
+  (name) => ({
+    type: GlobalActions.UPDATE_NAME,
+    name: name
+  });
+
+export const updateFlags: ActionCreator<UpdateFlagsAction> =
+  (flags) => ({
+    type: GlobalActions.UPDATE_FLAGS,
+    flags: flags
+  });
+
+export const updateDrawingBoardStatus: ActionCreator<UpdateDrawingBoardStatusAction> =
+  (drawingBoardStatus) => ({
+    type: GlobalActions.UPDATE_DRAWING_BOARD_STATUS,
+    drawingBoardStatus: drawingBoardStatus
+  });
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.reducers.spec.ts
new file mode 100644
index 0000000..4fc8086
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.reducers.spec.ts
@@ -0,0 +1,48 @@
+import {GlobalActions, UpdateFlagsAction, UpdateGlobalAction, UpdateDrawingBoardStatusAction} from "./global.actions";
+import {globalReducer} from "./global.reducers";
+
+
+describe('globalReducer', () => {
+
+  test('#UPDATE_FLAGS : should update global flags', () => {
+    const flags = {
+      'A' : 'A',
+      'B' : 'B',
+      'C' : 'C',
+      'D' : 'D'
+    };
+    let flagsState = globalReducer(<any>{global : {}},
+      <UpdateFlagsAction>{
+        type: GlobalActions.UPDATE_FLAGS,
+        flags : flags
+      }).flags;
+
+    expect(flagsState).toBeDefined();
+    expect(<any>flagsState).toEqual(<any>flags);
+  });
+
+  test('#UPDATE_NAME : should update global name', () => {
+    const name = 'name';
+    let globalState = globalReducer(<any>{global : {}},
+      <UpdateGlobalAction>{
+        type: GlobalActions.UPDATE_NAME,
+        name : name
+      });
+    expect(globalState).toBeDefined();
+    expect(globalState.name).toEqual(name);
+  });
+
+  test('#UPDATE_DRAWING_BOARD_STATUS : should update global drawing board status',  ()=> {
+    const drawingBoardStatus = 'EDIT';
+    let globalDrawingBoardState = globalReducer(<any>{global : {}},
+      <UpdateDrawingBoardStatusAction>{
+        type: GlobalActions.UPDATE_DRAWING_BOARD_STATUS,
+        drawingBoardStatus : drawingBoardStatus
+      });
+    expect(globalDrawingBoardState).toBeDefined();
+    expect(globalDrawingBoardState.drawingBoardStatus).toEqual(drawingBoardStatus);
+  });
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.reducers.ts
new file mode 100644
index 0000000..f9e0834
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/global/global.reducers.ts
@@ -0,0 +1,29 @@
+import {Action} from 'redux';
+import {GlobalActions, UpdateFlagsAction, UpdateGlobalAction, UpdateDrawingBoardStatusAction} from "./global.actions";
+
+export interface GlobalState {
+  name : string;
+  flags : { [key: string]: boolean };
+  drawingBoardStatus : string;
+}
+
+const initialState: GlobalState = {
+  name : null,
+  flags : null,
+  drawingBoardStatus : null
+};
+
+export const globalReducer =
+  function (state: GlobalState = initialState, action: Action): GlobalState {
+    switch (action.type) {
+      case GlobalActions.UPDATE_NAME:
+        return Object.assign(state, state, (<UpdateGlobalAction>action));
+      case GlobalActions.UPDATE_FLAGS:
+        Object.assign(state, (<UpdateFlagsAction>action));
+        return Object.assign({}, state);
+      case GlobalActions.UPDATE_DRAWING_BOARD_STATUS:
+        return Object.assign(state, state, (<UpdateDrawingBoardStatusAction>action));
+      default:
+        return state;
+    }
+  };
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/main.reducer.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/main.reducer.ts
new file mode 100644
index 0000000..2166c81
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/main.reducer.ts
@@ -0,0 +1,67 @@
+import {LcpRegionsAndTenants} from "../../models/lcpRegionsAndTenants";
+import {CategoryParams} from "../../models/categoryParams";
+import {Action} from "redux";
+import {ServiceActions} from "./service/service.actions";
+import {GeneralActions} from "./general/general.actions";
+import {NetworkActions} from "./network/network.actions";
+import {VfModuleActions} from "./vfModule/vfModule.actions";
+import {VNFActions} from "./vnf/vnf.actions";
+import {vnfReducer} from "./vnf/vnf.reducers";
+import {generalReducer} from "./general/general.reducers";
+import {serviceReducer} from "./service/service.reducers";
+import {networkReducer} from "./network/network.reducers";
+import {vfModuleReducer} from "./vfModule/vfModule.reducers";
+import {ServiceInstance} from "../../models/serviceInstance";
+import {SelectOptionInterface} from "../../models/selectOption";
+import {ServiceType} from "../../models/serviceType";
+import {VnfGroupActions} from "./vnfGroup/vnfGroup.actions";
+import {vnfGroupReducer} from "./vnfGroup/vnfGroup.reducers";
+import {RelatedVnfActions} from "./relatedVnfMember/relatedVnfMember.actions";
+import {relatedVnfMemeberReducer} from "./relatedVnfMember/relatedVnfMember.reducers";
+
+export let initialState: ServiceState = {
+  serviceHierarchy: {},
+  serviceInstance: {},
+  lcpRegionsAndTenants: new LcpRegionsAndTenants(),
+  subscribers: null,
+  productFamilies: null,
+  serviceTypes: {},
+  aicZones: null,
+  categoryParameters: new CategoryParams()
+};
+
+
+export interface ServiceState {
+  serviceHierarchy: any;
+  serviceInstance: { [uuid: string]: ServiceInstance; };
+  lcpRegionsAndTenants: LcpRegionsAndTenants;
+  subscribers: SelectOptionInterface[];
+  productFamilies: any;
+  serviceTypes: { [subscriberId: string]: ServiceType[]; };
+  aicZones: SelectOptionInterface[];
+  categoryParameters: CategoryParams;
+}
+
+export const MainReducer = function (state: ServiceState = initialState, action: Action): ServiceState {
+  console.info("action name", action.type);
+  if(Object.values(ServiceActions).includes(action.type)){
+    return serviceReducer(state, action);
+  }else if (Object.values(GeneralActions).includes(action.type)){
+    return generalReducer(state, action);
+  }else if (Object.values(NetworkActions).includes(action.type)){
+    return networkReducer(state, action);
+  }else if (Object.values(VfModuleActions).includes(action.type)){
+    return vfModuleReducer(state, action);
+  }else if (Object.values(VNFActions).includes(action.type)){
+    return vnfReducer(state, action);
+  }else if (Object.values(VnfGroupActions).includes(action.type)){
+    return vnfGroupReducer(state, action);
+  }else if(Object.values(RelatedVnfActions).includes(action.type)){
+    return relatedVnfMemeberReducer(state, action);
+  } else {
+    return Object.assign({}, state);
+  }
+};
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.actions.ts
new file mode 100644
index 0000000..c90d8eb
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.actions.ts
@@ -0,0 +1,94 @@
+import {Action, ActionCreator} from "redux";
+import {NetworkInstance} from "../../../models/networkInstance";
+
+export enum NetworkActions {
+  UPDATE_NETWORK_INSTANCE = "UPDATE_NETWORK_INSTANCE",
+  UPDATE_NETWORK_FUNCTION  = 'UPDATE_NETWORK_FUNCTION',
+  CREATE_NETWORK_INSTANCE = 'CREATE_NETWORK_INSTANCE',
+  DELETE_ACTION_NETWORK_INSTANCE = "DELETE_ACTION_NETWORK_INSTANCE",
+  UNDO_DELETE_ACTION_NETWORK_INSTANCE = "UNDO_DELETE_ACTION_NETWORK_INSTANCE",
+  UPDATE_NETWORK_POSITION = "UPDATE_NETWORK_POSITION"
+
+}
+
+
+export interface UpdateNetworkPosition extends Action {
+  node: any,
+  instanceId : string,
+  networkStoreKey?: string;
+}
+
+export interface UpdateNetworkInstanceAction extends Action {
+  networkInstance?: NetworkInstance;
+  networkModelName?: string;
+  serviceUuid?: string;
+  networkStoreKey?:string;
+}
+
+export interface UpdateNetworkCollectionFunction extends Action {
+  networksAccordingToNetworkCollection: any;
+  network_function: any;
+}
+
+export interface CreateNetworkInstanceAction extends Action {
+  networkInstance?: NetworkInstance;
+  networkModelName?: string;
+  serviceUuid?: string;
+  networkStoreKey?:string;
+}
+
+export interface DeleteActionNetworkInstanceAction extends Action {
+  networkStoreKey: string;
+  serviceId?: string;
+}
+
+export interface UndoDeleteActionNetworkInstanceAction extends Action {
+  networkStoreKey: string;
+  serviceId?: string;
+}
+
+export const updateNetworkInstance: ActionCreator<UpdateNetworkInstanceAction> = (networkInstance, networkfModelName, serviceUuid, networkStoreKey) => ({
+  type: NetworkActions.UPDATE_NETWORK_INSTANCE,
+  networkInstance: networkInstance,
+  networkModelName: networkfModelName,
+  serviceUuid: serviceUuid,
+  networkStoreKey : networkStoreKey
+});
+
+
+export const updateNetworkCollectionFunction: ActionCreator<UpdateNetworkCollectionFunction> = (ncf, networksAccordingToNetworkCollection) => ({
+  type: NetworkActions.UPDATE_NETWORK_FUNCTION,
+  networksAccordingToNetworkCollection: networksAccordingToNetworkCollection["results"],
+  network_function: ncf
+});
+
+export const createNetworkInstance: ActionCreator<CreateNetworkInstanceAction> = (networkInstance, networkModelName, serviceUuid, networkStoreKey) => ({
+  type: NetworkActions.CREATE_NETWORK_INSTANCE,
+  networkInstance: networkInstance,
+  networkModelName: networkModelName,
+  serviceUuid: serviceUuid,
+  networkStoreKey : networkStoreKey
+});
+
+
+export const deleteActionNetworkInstance: ActionCreator<DeleteActionNetworkInstanceAction> = (networkStoreKey, serviceId) => ({
+  type: NetworkActions.DELETE_ACTION_NETWORK_INSTANCE,
+  networkStoreKey: networkStoreKey,
+  serviceId: serviceId
+});
+
+export const undoDeleteActionNetworkInstance: ActionCreator<UndoDeleteActionNetworkInstanceAction> = (networkStoreKey, serviceId) => ({
+  type: NetworkActions.UNDO_DELETE_ACTION_NETWORK_INSTANCE,
+  networkStoreKey: networkStoreKey,
+  serviceId: serviceId
+});
+
+
+export const updateNetworkPosition: ActionCreator<UpdateNetworkPosition> = (node, instanceId, networkStoreKey) => ({
+  type: NetworkActions.UPDATE_NETWORK_POSITION,
+  node: node,
+  instanceId: instanceId,
+  networkStoreKey : networkStoreKey
+});
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.spec.ts
new file mode 100644
index 0000000..ba41ad6
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.spec.ts
@@ -0,0 +1,114 @@
+import {networkReducer} from "./network.reducers";
+import {
+  CreateNetworkInstanceAction, DeleteActionNetworkInstanceAction,
+  NetworkActions, UndoDeleteActionNetworkInstanceAction,
+  UpdateNetworkCollectionFunction,
+  UpdateNetworkInstanceAction
+} from "./network.actions";
+import {NetworkInstance} from "../../../models/networkInstance";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+
+describe('networkReducer', () => {
+  test('#CREATE_SERVICE_INSTANCE', () => {
+    let networkInstance: NetworkInstance = new NetworkInstance();
+    networkInstance.isMissingData = false;
+    networkInstance.instanceName = 'instanceName';
+    let networkState = networkReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            networks : {
+              'networkStoreKey' : {
+                isMissingData : true
+              }
+            }
+          }
+        }},
+      <UpdateNetworkInstanceAction>{
+        type: NetworkActions.UPDATE_NETWORK_INSTANCE,
+        networkInstance : new NetworkInstance(),
+        networkStoreKey : 'networkStoreKey',
+        networkModelName : 'networkModelName',
+        serviceUuid : 'serviceModelId'
+      }).serviceInstance['serviceModelId'].networks['networkStoreKey'];
+
+    expect(networkState).toBeDefined();
+    expect(networkState.isMissingData).toBeFalsy();
+  });
+
+  test('#CREATE_NETWORK_INSTANCE', () => {
+    let networkInstance: NetworkInstance = new NetworkInstance();
+    networkInstance.isMissingData = false;
+    networkInstance.instanceName = 'instanceName';
+    let networkState = networkReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            networks : {}
+          }
+        }},
+      <CreateNetworkInstanceAction>{
+        type: NetworkActions.CREATE_NETWORK_INSTANCE,
+        networkInstance : new NetworkInstance(),
+        networkStoreKey : null,
+        networkModelName : 'networkModelName',
+        serviceUuid : 'serviceModelId'
+      }).serviceInstance['serviceModelId'].networks['networkModelName'];
+
+    expect(networkState).toBeDefined();
+    expect(networkState.isMissingData).toBeFalsy();
+  });
+
+  test('#UPDATE_NETWORK_FUNCTION', () => {
+    let state = networkReducer(<any>{serviceInstance : {}},
+      <UpdateNetworkCollectionFunction>{
+        type: NetworkActions.UPDATE_NETWORK_FUNCTION,
+        networksAccordingToNetworkCollection: 'networksAccordingToNetworkCollection',
+        network_function: 'network_function'
+      });
+
+    expect(state).toBeDefined();
+  });
+
+  test('#DELETE_ACTION_NETWORK_INSTANCE', () => {
+    let networkState = networkReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            networks : {
+              'networkStoreKey' : {
+                isMissingData : true,
+                action : 'None'
+              }
+            }
+          }
+        }},
+      <DeleteActionNetworkInstanceAction>{
+        type: NetworkActions.DELETE_ACTION_NETWORK_INSTANCE,
+        networkStoreKey: 'networkStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].networks['networkStoreKey'];
+
+    expect(networkState).toBeDefined();
+    expect(networkState.action).toEqual(ServiceInstanceActions.None_Delete);
+  });
+
+  test('#UNDO_DELETE_ACTION_NETWORK_INSTANCE', () => {
+    let networkState = networkReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            networks : {
+              'networkStoreKey' : {
+                isMissingData : true,
+                action : 'Update_Delete'
+              }
+            }
+          }
+        }},
+      <UndoDeleteActionNetworkInstanceAction>{
+        type: NetworkActions.UNDO_DELETE_ACTION_NETWORK_INSTANCE,
+        networkStoreKey: 'networkStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].networks['networkStoreKey'];
+
+    expect(networkState).toBeDefined();
+    expect(networkState.action).toEqual(ServiceInstanceActions.Update);
+  });
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.ts
new file mode 100644
index 0000000..bcbbea5
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/network/network.reducers.ts
@@ -0,0 +1,102 @@
+import {Action} from "redux";
+import * as _ from "lodash";
+import {NetworkInstance} from "../../../models/networkInstance";
+import {
+  CreateNetworkInstanceAction, DeleteActionNetworkInstanceAction,
+  NetworkActions, UndoDeleteActionNetworkInstanceAction,
+  UpdateNetworkCollectionFunction,
+  UpdateNetworkInstanceAction
+} from "./network.actions";
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {calculateNextUniqueModelName} from "../vnf/vnf.reducers";
+import {ServiceState} from "../main.reducer";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+
+export function networkReducer(state: ServiceState , action: Action) : ServiceState {
+  switch (action.type) {
+    case NetworkActions.CREATE_NETWORK_INSTANCE: {
+      const updateNetworkInstanceAction = <CreateNetworkInstanceAction>action;
+      const serviceUuid = updateNetworkInstanceAction.serviceUuid;
+      let networkModelName = updateNetworkInstanceAction.networkModelName;
+
+
+      let newState = _.cloneDeep(state);
+
+      updateNetworkInstanceAction.networkInstance.originalName = networkModelName;
+      updateNetworkInstanceAction.networkModelName = calculateNextUniqueModelName(networkModelName, serviceUuid, newState, 'networks');
+
+      let networkInstance: NetworkInstance = newState.serviceInstance[serviceUuid].networks[networkModelName];
+      networkInstance = new NetworkInstance();
+      updateNetworkInstanceAction.networkInstance.networkStoreKey = updateNetworkInstanceAction.networkModelName;
+      updateNetworkInstanceAction.networkInstance.originalName = networkModelName;
+      networkInstance.originalName = updateNetworkInstanceAction.networkInstance.originalName;
+      networkInstance.networkStoreKey = updateNetworkInstanceAction.networkInstance.networkStoreKey;
+      updateServiceValidationCounter(newState, networkInstance['isMissingData'], updateNetworkInstanceAction.networkInstance['isMissingData'], serviceUuid);
+
+      newState.serviceInstance[serviceUuid].networks[updateNetworkInstanceAction.networkModelName] = Object.assign(networkInstance, updateNetworkInstanceAction.networkInstance);
+      return newState;
+    }
+    case NetworkActions.UPDATE_NETWORK_INSTANCE: {
+      const updateNetworkInstanceAction = <UpdateNetworkInstanceAction>action;
+      const serviceUuid = updateNetworkInstanceAction.serviceUuid;
+      let networkStoreKey = updateNetworkInstanceAction.networkStoreKey;
+
+      let newState = _.cloneDeep(state);
+      let networkInstance: NetworkInstance = newState.serviceInstance[serviceUuid].networks[networkStoreKey];
+      updateUniqueNames(networkInstance? networkInstance.instanceName : null, updateNetworkInstanceAction.networkInstance.instanceName, newState.serviceInstance[serviceUuid]);
+
+      networkInstance = networkInstance || new NetworkInstance();
+      updateServiceValidationCounter(newState, networkInstance['isMissingData'], updateNetworkInstanceAction.networkInstance['isMissingData'], serviceUuid);
+
+      newState.serviceInstance[serviceUuid].networks[networkStoreKey] = Object.assign(networkInstance, updateNetworkInstanceAction.networkInstance);
+      return newState;
+    }
+    case NetworkActions.UPDATE_NETWORK_FUNCTION: {
+      let networkFunctionReduxObj = state['networkFunctions'] == undefined ? {} : state['networkFunctions'];
+      networkFunctionReduxObj[(<UpdateNetworkCollectionFunction>action).network_function] = (<UpdateNetworkCollectionFunction>action).networksAccordingToNetworkCollection;
+      Object.assign(state, {'networkFunctions': networkFunctionReduxObj});
+      return Object.assign({}, state);
+    }
+    case NetworkActions.DELETE_ACTION_NETWORK_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let network = newState.serviceInstance[(<DeleteActionNetworkInstanceAction>action).serviceId].networks[(<DeleteActionNetworkInstanceAction>action).networkStoreKey];
+      let oldAction = network.action;
+      if(oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState;
+      newState.serviceInstance[(<DeleteActionNetworkInstanceAction>action).serviceId].networks[(<DeleteActionNetworkInstanceAction>action).networkStoreKey].action = (oldAction + '_Delete') as ServiceInstanceActions;
+      updateServiceValidationCounter(newState, network['isMissingData'], false , (<DeleteActionNetworkInstanceAction>action).serviceId);
+
+      return newState;
+    }
+
+    case NetworkActions.UNDO_DELETE_ACTION_NETWORK_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let network = newState.serviceInstance[(<UndoDeleteActionNetworkInstanceAction>action).serviceId].networks[(<UndoDeleteActionNetworkInstanceAction>action).networkStoreKey];
+      let oldState = network.action;
+      newState.serviceInstance[(<UndoDeleteActionNetworkInstanceAction>action).serviceId].networks[(<UndoDeleteActionNetworkInstanceAction>action).networkStoreKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
+      updateServiceValidationCounter(newState, network['isMissingData'], false , (<DeleteActionNetworkInstanceAction>action).serviceId);
+      return newState;
+    }
+  }
+}
+
+const updateUniqueNames = (oldName : string, newName : string, serviceInstance : ServiceInstance) : void => {
+  let existingNames = serviceInstance.existingNames;
+  if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
+    delete existingNames[oldName.toLowerCase()];
+  }
+  if(!_.isNil(newName)) {
+    existingNames[newName.toLowerCase()] = "";
+  }
+};
+
+
+const updateServiceValidationCounter = (newState: any, oldValidationState: boolean, newValidationState: boolean, serviceUuid: string) => {
+  if (oldValidationState && !newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter--;
+  } else if (!oldValidationState && newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter++;
+  }
+};
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.actions.ts
new file mode 100644
index 0000000..faa7a52
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.actions.ts
@@ -0,0 +1,68 @@
+import {Action, ActionCreator} from "redux";
+
+export enum RelatedVnfActions {
+  CREATE_RELATED_VNF_MEMBER_INSTANCE = "CREATE_RELATED_VNF_MEMBER_INSTANCE",
+  REMOVE_RELATED_VNF_MEMBER_INSTANCE = "REMOVE_RELATED_VNF_MEMBER_INSTANCE",
+  DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE = "DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE",
+  UNDO_DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE = "UNDO_DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE"
+}
+
+export interface RemoveRelatedVnfMemebrInstance extends Action {
+  vnfGroupStoreKey: string;
+  relatedVnfMemeberStoreKey: string;
+  serviceId?: string;
+}
+
+export interface DeleteRelatedVnfMemebrInstanceAction extends Action {
+  vnfGroupStoreKey: string;
+  relatedVnfMemeberStoreKey: string;
+  serviceId?: string;
+}
+
+export interface DeleteActionRelatedVnfMemeberInstanceAction extends Action {
+  vnfGroupStoreKey: string;
+  relatedVnfMemeberStoreKey: string;
+  serviceId?: string;
+}
+
+export interface UndoDeleteActionRelatedVnfMemeberInstanceAction extends Action {
+  vnfGroupStoreKey: string;
+  relatedVnfMemeberStoreKey: string;
+  serviceId?: string;
+}
+
+export interface CreateRelatedVnfMemeberInstanceAction extends Action {
+  relatedVnfMember: any;
+  vnfGroupStoreKey: string;
+  serviceId?: string;
+}
+
+
+export const removeRelatedVnfMemberInstance: ActionCreator<RemoveRelatedVnfMemebrInstance> = (vnfGroupStoreKey, relatedVnfMemeberStoreKey, serviceId) => ({
+  type: RelatedVnfActions.REMOVE_RELATED_VNF_MEMBER_INSTANCE,
+  vnfGroupStoreKey: vnfGroupStoreKey,
+  relatedVnfMemeberStoreKey: relatedVnfMemeberStoreKey,
+  serviceId: serviceId
+});
+
+export const deleteActionRelatedVnfMemberInstance: ActionCreator<DeleteActionRelatedVnfMemeberInstanceAction> = (vnfGroupStoreKey, relatedVnfMemeberStoreKey, serviceId) => ({
+  type: RelatedVnfActions.DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE,
+  vnfGroupStoreKey: vnfGroupStoreKey,
+  relatedVnfMemeberStoreKey: relatedVnfMemeberStoreKey,
+  serviceId: serviceId
+});
+
+export const undoDeleteActionRelatedVnfMemberInstance: ActionCreator<UndoDeleteActionRelatedVnfMemeberInstanceAction> = (vnfGroupStoreKey, relatedVnfMemeberStoreKey, serviceId) => ({
+  type: RelatedVnfActions.UNDO_DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE,
+  vnfGroupStoreKey: vnfGroupStoreKey,
+  relatedVnfMemeberStoreKey: relatedVnfMemeberStoreKey,
+  serviceId: serviceId
+});
+
+
+export const createRelatedVnfMemberInstance: ActionCreator<CreateRelatedVnfMemeberInstanceAction> = (vnfGroupStoreKey, serviceId, relatedVnfMember) => ({
+  type: RelatedVnfActions.CREATE_RELATED_VNF_MEMBER_INSTANCE,
+  relatedVnfMember: relatedVnfMember,
+  vnfGroupStoreKey: vnfGroupStoreKey,
+  serviceId: serviceId
+});
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.reducers.spec.ts
new file mode 100644
index 0000000..3479574
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.reducers.spec.ts
@@ -0,0 +1,153 @@
+import {relatedVnfMemeberReducer} from "./relatedVnfMember.reducers";
+import {
+  CreateRelatedVnfMemeberInstanceAction,
+  DeleteActionRelatedVnfMemeberInstanceAction,
+  RelatedVnfActions,
+  UndoDeleteActionRelatedVnfMemeberInstanceAction
+} from "./relatedVnfMember.actions";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+
+describe('relatedVnfMemberReducer', () => {
+
+  test('#DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE should change action to delete',() => {
+    const serviceUuid: string = 'serviceUuid';
+    const actionName: ServiceInstanceActions = ServiceInstanceActions.None;
+
+    let service = relatedVnfMemeberReducer(<any>{
+      serviceInstance: {
+        'serviceUuid': {
+          'vnfGroups' : {
+            'vnfGroupStoreKey' : {
+              'vnfs' : {
+                'vnfStoreKey1' : {
+                  'action' : actionName
+                }
+              }
+            }
+
+          }
+        }
+      }
+    }, <DeleteActionRelatedVnfMemeberInstanceAction>{
+      type: RelatedVnfActions.DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE,
+      vnfGroupStoreKey: 'vnfGroupStoreKey',
+      relatedVnfMemeberStoreKey : 'vnfStoreKey1',
+      serviceId : 'serviceUuid'
+    });
+
+    expect(service.serviceInstance[serviceUuid].vnfGroups['vnfGroupStoreKey']['vnfs']['vnfStoreKey1'].action).toEqual('None_Delete');
+  });
+
+  test('#UNDO_DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE should undo change action to delete', () => {
+    const serviceUuid: string = 'serviceUuid';
+    const actionName: ServiceInstanceActions = ServiceInstanceActions.None_Delete;
+
+    let service = relatedVnfMemeberReducer(<any>{
+      serviceInstance: {
+        'serviceUuid': {
+          'vnfGroups' : {
+            'vnfGroupStoreKey' : {
+              'vnfs' : {
+                'vnfStoreKey1' : {
+                  'action' : actionName
+                }
+              }
+            }
+
+          }
+        }
+      }
+    }, <UndoDeleteActionRelatedVnfMemeberInstanceAction>{
+      type: RelatedVnfActions.UNDO_DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE,
+      vnfGroupStoreKey: 'vnfGroupStoreKey',
+      relatedVnfMemeberStoreKey : 'vnfStoreKey1',
+      serviceId : 'serviceUuid'
+    });
+
+    expect(service.serviceInstance[serviceUuid].vnfGroups['vnfGroupStoreKey']['vnfs']['vnfStoreKey1'].action).toEqual('None');
+  });
+
+  test('#REMOVE_RELATED_VNF_MEMBER_INSTANCE should remove instance', () => {
+    const serviceUuid: string = 'serviceUuid';
+    const actionName: ServiceInstanceActions = ServiceInstanceActions.None_Delete;
+
+    let service = relatedVnfMemeberReducer(<any>{
+      serviceInstance: {
+        'serviceUuid': {
+          'vnfGroups' : {
+            'vnfGroupStoreKey' : {
+              'vnfs' : {
+                'vnfStoreKey1' : {
+                  'action' : actionName
+                }
+              }
+            }
+
+          }
+        }
+      }
+    }, <UndoDeleteActionRelatedVnfMemeberInstanceAction>{
+      type: RelatedVnfActions.UNDO_DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE,
+      vnfGroupStoreKey: 'vnfGroupStoreKey',
+      relatedVnfMemeberStoreKey : 'vnfStoreKey1',
+      serviceId : 'serviceUuid'
+    });
+
+    expect(service.serviceInstance[serviceUuid].vnfGroups['vnfGroupStoreKey']['vnfs']['vnfStoreKey1'].action).toEqual('None');
+  });
+
+  test('#CREATE_RELATED_VNF_MEMBER_INSTANCE should add new relatedVNF instance', () => {
+    const serviceUuid: string = 'serviceUuid';
+    const actionName: ServiceInstanceActions = ServiceInstanceActions.None_Delete;
+    let relatedVnfMember =  {
+      "instanceName":"VNF1_INSTANCE_NAME",
+      "instanceId":"VNF1_INSTANCE_ID",
+      "orchStatus":null,
+      "productFamilyId":null,
+      "lcpCloudRegionId":"mtn23b",
+      "tenantId":"3e9a20a3e89e45f884e09df0cc2d2d2a",
+      "tenantName":"APPC-24595-T-IST-02C",
+      "modelInfo":{
+        "modelInvariantId":"vnf-instance-model-invariant-id",
+        "modelVersionId":"7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+        "modelVersion":"2.0",
+        "modelName":"vf_vEPDG",
+        "modelType":"vnf"
+      },
+      "instanceType":"VNF1_INSTANCE_TYPE",
+      "provStatus":null,
+      "inMaint":false,
+      "uuid":"7a6ee536-f052-46fa-aa7e-2fca9d674c44",
+      "originalName":null,
+      "legacyRegion":null,
+      "lineOfBusiness":null,
+      "platformName":null,
+      "trackById":"7a6ee536-f052-46fa-aa7e-2fca9d674c44:002",
+      "serviceInstanceId":"service-instance-id1",
+      "serviceInstanceName":"service-instance-name"
+    };
+
+    let service = relatedVnfMemeberReducer(<any>{
+      serviceInstance: {
+        'serviceUuid': {
+          'vnfGroups' : {
+            'vnfGroupStoreKey' : { }
+          }
+        }
+      }
+    }, <CreateRelatedVnfMemeberInstanceAction>{
+      type: RelatedVnfActions.CREATE_RELATED_VNF_MEMBER_INSTANCE,
+      relatedVnfMember: relatedVnfMember,
+      vnfGroupStoreKey: 'vnfGroupStoreKey',
+      serviceId: serviceUuid
+    });
+
+    expect(service.serviceInstance[serviceUuid].vnfGroups['vnfGroupStoreKey']['vnfs']['VNF1_INSTANCE_ID'].action).toEqual('Create');
+    expect(service.serviceInstance[serviceUuid].vnfGroups['vnfGroupStoreKey']['vnfs']['VNF1_INSTANCE_ID'].instanceId).toEqual('VNF1_INSTANCE_ID');
+  });
+
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.reducers.ts
new file mode 100644
index 0000000..250f934
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/relatedVnfMember/relatedVnfMember.reducers.ts
@@ -0,0 +1,58 @@
+import {Action} from "redux";
+import * as _ from "lodash";
+import {ServiceState} from "../main.reducer";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+import {
+  CreateRelatedVnfMemeberInstanceAction,
+  DeleteActionRelatedVnfMemeberInstanceAction, DeleteRelatedVnfMemebrInstanceAction,
+  RelatedVnfActions,
+  UndoDeleteActionRelatedVnfMemeberInstanceAction
+} from "./relatedVnfMember.actions";
+
+export function relatedVnfMemeberReducer(state: ServiceState, action: Action): ServiceState {
+  switch (action.type) {
+
+    case RelatedVnfActions.DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let relatedVnfMember = newState.serviceInstance[(<DeleteActionRelatedVnfMemeberInstanceAction>action).serviceId].vnfGroups[(<DeleteActionRelatedVnfMemeberInstanceAction>action).vnfGroupStoreKey]['vnfs'][(<DeleteActionRelatedVnfMemeberInstanceAction>action).relatedVnfMemeberStoreKey];
+      let oldAction = relatedVnfMember.action;
+      if(oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState;
+      newState.serviceInstance[(<DeleteActionRelatedVnfMemeberInstanceAction>action).serviceId].vnfGroups[(<DeleteActionRelatedVnfMemeberInstanceAction>action).vnfGroupStoreKey]['vnfs'][(<DeleteActionRelatedVnfMemeberInstanceAction>action).relatedVnfMemeberStoreKey].action = (oldAction + '_Delete') as ServiceInstanceActions;
+      return newState;
+    }
+
+    case RelatedVnfActions.UNDO_DELETE_ACTION_RELATED_VNF_MEMBER_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let relatedVnfMember = newState.serviceInstance[(<UndoDeleteActionRelatedVnfMemeberInstanceAction>action).serviceId].vnfGroups[(<UndoDeleteActionRelatedVnfMemeberInstanceAction>action).vnfGroupStoreKey]['vnfs'][(<UndoDeleteActionRelatedVnfMemeberInstanceAction>action).relatedVnfMemeberStoreKey];
+      let oldState = relatedVnfMember.action;
+      newState.serviceInstance[(<DeleteActionRelatedVnfMemeberInstanceAction>action).serviceId].vnfGroups[(<DeleteActionRelatedVnfMemeberInstanceAction>action).vnfGroupStoreKey]['vnfs'][(<DeleteActionRelatedVnfMemeberInstanceAction>action).relatedVnfMemeberStoreKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
+      return newState;
+    }
+
+    case RelatedVnfActions.REMOVE_RELATED_VNF_MEMBER_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      delete newState.serviceInstance[(<DeleteRelatedVnfMemebrInstanceAction>action).serviceId].vnfGroups[(<DeleteRelatedVnfMemebrInstanceAction>action).vnfGroupStoreKey]['vnfs'][(<DeleteRelatedVnfMemebrInstanceAction>action).relatedVnfMemeberStoreKey];
+      return newState;
+    }
+
+    case RelatedVnfActions.CREATE_RELATED_VNF_MEMBER_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let relatedVnfMember = (<CreateRelatedVnfMemeberInstanceAction>action).relatedVnfMember;
+      relatedVnfMember['action'] = 'Create';
+      relatedVnfMember['vnfStoreKey'] = relatedVnfMember.instanceId;
+      relatedVnfMember['trackById'] = relatedVnfMember.instanceId;
+      relatedVnfMember['instanceName'] = relatedVnfMember.instanceName;
+      if(_.isNil(newState.serviceInstance[(<CreateRelatedVnfMemeberInstanceAction>action).serviceId].vnfGroups[(<CreateRelatedVnfMemeberInstanceAction>action).vnfGroupStoreKey]['vnfs'])){
+        newState.serviceInstance[(<CreateRelatedVnfMemeberInstanceAction>action).serviceId].vnfGroups[(<CreateRelatedVnfMemeberInstanceAction>action).vnfGroupStoreKey]['vnfs'] = {};
+      }
+      newState.serviceInstance[(<CreateRelatedVnfMemeberInstanceAction>action).serviceId].vnfGroups[(<CreateRelatedVnfMemeberInstanceAction>action).vnfGroupStoreKey]['vnfs'][(<CreateRelatedVnfMemeberInstanceAction>action).relatedVnfMember['instanceId']] = relatedVnfMember;
+      newState.serviceInstance[(<CreateRelatedVnfMemeberInstanceAction>action).serviceId].isDirty = true;
+      return newState;
+    }
+  }
+}
+
+
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.actions.ts
new file mode 100644
index 0000000..e4e7e49
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.actions.ts
@@ -0,0 +1,102 @@
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+import {Action, ActionCreator} from "redux";
+
+export enum ServiceActions {
+  CREATE_SERVICE_INSTANCE = 'CREATE_SERVICE_INSTANCE',
+  UPDATE_SERVICE_INSTANCE = 'UPDATE_SERVICE_INSTANCE',
+  DELETE_ALL_SERVICE_INSTANCES = 'DELETE_ALL_SERVICE_INSTANCES',
+  UPDATE_MODEL  = 'UPDATE_MODEL',
+  ADD_SERVICE_ACTION = 'ADD_SERVICE_ACTION',
+  DELETE_ACTION_SERVICE_INSTANCE = "DELETE_ACTION_SERVICE_INSTANCE",
+  UNDO_DELETE_ACTION_SERVICE_INSTANCE = "UNDO_DELETE_ACTION_SERVICE_INSTANCE",
+  CHANGE_SERVICE_IS_DIRTY = "CHANGE_SERVICE_IS_DIRTY"
+}
+
+export interface CreateServiceInstanceAction extends Action {
+  serviceUuid?: string;
+  serviceInstance?: ServiceInstance;
+}
+
+export interface UpdateServiceInstanceAction extends Action {
+  serviceUuid?: string;
+  serviceInstance?: ServiceInstance;
+}
+
+export interface DeleteServiceInstanceAction extends Action {
+  serviceUuid?: string;
+}
+
+export interface DeleteServiceInstanceAction extends Action {
+  serviceUuid?: string;
+}
+
+export interface UpdateServiceModelAction extends Action {
+  serviceHierarchy?: any;
+}
+
+export interface AddServiceAction extends Action{
+  serviceUuid: string;
+  action: ServiceInstanceActions;
+}
+
+
+export interface DeleteActionServiceInstanceAction extends Action {
+  serviceId?: string;
+}
+
+export interface UndoDeleteActionServiceInstanceAction extends Action {
+  serviceId?: string;
+}
+
+export interface ChangeServiceDirty extends Action {
+  nodes: any[];
+  serviceId : string;
+}
+
+export const addServiceAction: ActionCreator<AddServiceAction> = (serviceUuid : string, actionName : ServiceInstanceActions) => ({
+  type: ServiceActions.ADD_SERVICE_ACTION,
+  serviceUuid: serviceUuid,
+  action : actionName
+});
+
+
+export const deleteAllServiceInstances: ActionCreator<DeleteServiceInstanceAction> = () => ({
+  type: ServiceActions.DELETE_ALL_SERVICE_INSTANCES
+});
+
+export const createServiceInstance: ActionCreator<CreateServiceInstanceAction> = (serviceInstance, serviceUuid) => ({
+  type: ServiceActions.CREATE_SERVICE_INSTANCE,
+  serviceInstance: serviceInstance,
+  serviceUuid: serviceUuid
+});
+
+export const updateServiceInstance: ActionCreator<UpdateServiceInstanceAction> = (serviceInstance, serviceUuid) => ({
+  type: ServiceActions.UPDATE_SERVICE_INSTANCE,
+  serviceInstance: serviceInstance,
+  serviceUuid: serviceUuid
+});
+
+export const updateModel: ActionCreator<UpdateServiceModelAction> = serviceHierarchy => ({
+  type: ServiceActions.UPDATE_MODEL,
+  serviceHierarchy: serviceHierarchy
+});
+
+
+export const deleteActionServiceInstance: ActionCreator<DeleteActionServiceInstanceAction> = (vnfStoreKey, serviceId) => ({
+  type: ServiceActions.DELETE_ACTION_SERVICE_INSTANCE,
+  serviceId: serviceId
+});
+
+export const undoDeleteActionServiceInstance: ActionCreator<UndoDeleteActionServiceInstanceAction> = (vnfStoreKey, serviceId) => ({
+  type: ServiceActions.UNDO_DELETE_ACTION_SERVICE_INSTANCE,
+  serviceId: serviceId
+});
+
+export const changeServiceIsDirty: ActionCreator<ChangeServiceDirty> = (nodes, serviceId) => ({
+  type: ServiceActions.CHANGE_SERVICE_IS_DIRTY,
+  nodes: nodes,
+  serviceId : serviceId
+});
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.spec.ts
new file mode 100644
index 0000000..05fc008
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.spec.ts
@@ -0,0 +1,499 @@
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {
+  AddServiceAction, ChangeServiceDirty,
+  DeleteServiceInstanceAction,
+  ServiceActions,
+  CreateServiceInstanceAction,
+  UpdateServiceModelAction, UpdateServiceInstanceAction
+} from "./service.actions";
+import {serviceReducer} from "./service.reducers";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+describe('serviceReducer', () => {
+
+  test('#UPDATE_SERVICE_INSTANCE should update exiting instance without change his child', () => {
+    const serviceUuid: string = 'serviceUuid';
+    const actionName: ServiceInstanceActions = ServiceInstanceActions.Create;
+
+    const elemntThatShouldNotOverideOnUpdateService = {
+      vnfs: {
+        "2017-388_ADIOD-vPE 0": {
+          "action": "Create",
+          "inMaint": false,
+          "rollbackOnFailure": "true",
+          "originalName": "2017-388_ADIOD-vPE 0",
+          "isMissingData": false,
+          "trackById": "eymgwlevh54",
+          "vfModules": {},
+          "vnfStoreKey": "2017-388_ADIOD-vPE 0",
+          "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+          "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "lcpCloudRegionId": "JANET25",
+          "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+          "lineOfBusiness": "ONAP",
+          "platformName": "platform",
+          "modelInfo": {
+            "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+            "modelVersionId": "afacccf6-397d-45d6-b5ae-94c39734b168",
+            "modelName": "2017-388_ADIOD-vPE",
+            "modelVersion": "4.0",
+            "modelCustomizationId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c",
+            "modelCustomizationName": "2017-388_ADIOD-vPE 0",
+            "uuid": "afacccf6-397d-45d6-b5ae-94c39734b168",
+            "modelUniqueId": "b3c76f73-eeb5-4fb6-9d31-72a889f1811c"
+          },
+          "instanceName": "2017-388_ADIOD-vPEAjXzainstanceName",
+          "legacyRegion": "some legacy region",
+          "instanceParams": [
+            {
+              "vnf_config_template_version": "17.2",
+              "bandwidth_units": "Gbps",
+              "bandwidth": "10",
+              "AIC_CLLI": "ATLMY8GA",
+              "ASN": "AV_vPE",
+              "vnf_instance_name": "mtnj309me6"
+            }
+          ]
+        },
+        "2017-488_ADIOD-vPE 0": {
+          "action": "Create",
+          "inMaint": false,
+          "rollbackOnFailure": "true",
+          "originalName": "2017-488_ADIOD-vPE 0",
+          "isMissingData": false,
+          "trackById": "xr6o2782z7",
+          "vfModules": {
+            "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0": {
+              "2017488_adiodvpe0..2017488AdiodVpe..ADIOD_base_vPE_BV..module-0wmkjw": {
+                "isMissingData": true,
+                "sdncPreReload": null,
+                "modelInfo": {
+                  "modelType": "VFmodule",
+                  "modelInvariantId": "b34833bb-6aa9-4ad6-a831-70b06367a091",
+                  "modelVersionId": "f8360508-3f17-4414-a2ed-6bc71161e8db",
+                  "modelName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                  "modelVersion": "5",
+                  "modelCustomizationId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3",
+                  "modelCustomizationName": "2017488AdiodVpe..ADIOD_base_vPE_BV..module-0",
+                  "modelUniqueId": "a55961b2-2065-4ab0-a5b7-2fcee1c227e3"
+                },
+                "instanceParams": [
+                  {}
+                ],
+                "trackById": "a19sjb1ez2"
+              }
+            }
+          },
+          "vnfStoreKey": "2017-488_ADIOD-vPE 0",
+          "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+          "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "lcpCloudRegionId": "JANET25",
+          "tenantId": "092eb9e8e4b7412e8787dd091bc58e86",
+          "lineOfBusiness": "ONAP",
+          "platformName": "platform",
+          "modelInfo": {
+            "modelInvariantId": "72e465fe-71b1-4e7b-b5ed-9496118ff7a8",
+            "modelVersionId": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+            "modelName": "2017-488_ADIOD-vPE",
+            "modelVersion": "5.0",
+            "modelCustomizationId": "1da7b585-5e61-4993-b95e-8e6606c81e45",
+            "modelCustomizationName": "2017-488_ADIOD-vPE 0",
+            "uuid": "69e09f68-8b63-4cc9-b9ff-860960b5db09",
+            "modelUniqueId": "1da7b585-5e61-4993-b95e-8e6606c81e45"
+          },
+          "instanceName": "2017-488_ADIOD-vPEVNFinstancename",
+          "legacyRegion": "some legacy region",
+          "instanceParams": [
+            {
+              "vnf_config_template_version": "17.2",
+              "bandwidth_units": "Gbps",
+              "bandwidth": "10",
+              "AIC_CLLI": "ATLMY8GA",
+              "ASN": "AV_vPE",
+              "vnf_instance_name": "mtnj309me6"
+            }
+          ]
+        }
+      },
+      existingVNFCounterMap: {
+        "b3c76f73-eeb5-4fb6-9d31-72a889f1811c": 1,
+        "1da7b585-5e61-4993-b95e-8e6606c81e45": 1
+      },
+      existingVnfGroupCounterMap: {},
+      existingNetworksCounterMap: {},
+      optionalGroupMembersMap : {},
+      networks : {},
+      vnfGroups : {}
+    };
+
+
+    let service = serviceReducer(<any>{
+      "serviceInstance": {
+        "6b528779-44a3-4472-bdff-9cd15ec93450": {
+          "action": "Create",
+          "isDirty": true,
+          "vnfs": elemntThatShouldNotOverideOnUpdateService.vnfs,
+          "instanceParams": [
+            {
+              "2017488_adiodvpe0_ASN": "AV_vPE"
+            }
+          ],
+          "validationCounter": 1,
+          "existingNames": {
+            "ajxzainstancename": "",
+            "2017-488_adiod-vpevnfinstancename": "",
+            "2017-388_adiod-vpeajxzainstancename": ""
+          },
+          "existingVNFCounterMap": elemntThatShouldNotOverideOnUpdateService.existingVNFCounterMap,
+          "existingVnfGroupCounterMap": elemntThatShouldNotOverideOnUpdateService.existingVnfGroupCounterMap,
+          "existingNetworksCounterMap": elemntThatShouldNotOverideOnUpdateService.existingNetworksCounterMap,
+          "optionalGroupMembersMap":elemntThatShouldNotOverideOnUpdateService.optionalGroupMembersMap,
+          "networks": elemntThatShouldNotOverideOnUpdateService.networks,
+          "vnfGroups": elemntThatShouldNotOverideOnUpdateService.vnfGroups,
+          "bulkSize": "3",
+          "instanceName": "AjXzainstancename",
+          "globalSubscriberId": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "subscriptionServiceType": "TYLER SILVIA",
+          "owningEntityId": "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+          "productFamilyId": "e433710f-9217-458d-a79d-1c7aff376d89",
+          "lcpCloudRegionId": "hvf6",
+          "tenantId": "bae71557c5bb4d5aac6743a4e5f1d054",
+          "aicZoneId": "NFT1",
+          "projectName": "WATKINS",
+          "rollbackOnFailure": "true",
+          "aicZoneName": "NFTJSSSS-NFT1",
+          "owningEntityName": "WayneHolland",
+          "testApi": "VNF_API",
+          "tenantName": "AIN Web Tool-15-D-testalexandria",
+          "modelInfo": {
+            "modelInvariantId": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+            "modelVersionId": "6b528779-44a3-4472-bdff-9cd15ec93450",
+            "modelName": "action-data",
+            "modelVersion": "1.0",
+            "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+            "modelUniqueId": "6b528779-44a3-4472-bdff-9cd15ec93450"
+          },
+          "isALaCarte": false,
+          "name": "action-data",
+          "version": "1.0",
+          "description": "",
+          "category": "",
+          "uuid": "6b528779-44a3-4472-bdff-9cd15ec93450",
+          "invariantUuid": "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+          "serviceType": "",
+          "serviceRole": "",
+          "vidNotions": {
+            "instantiationUI": "legacy",
+            "modelCategory": "other",
+            "viewEditUI": "legacy"
+          },
+          "isEcompGeneratedNaming": false,
+          "isMultiStepDesign": false
+        }
+      },
+    }, <UpdateServiceInstanceAction>{
+      type: ServiceActions.UPDATE_SERVICE_INSTANCE,
+      serviceUuid: "6b528779-44a3-4472-bdff-9cd15ec93450",
+      serviceInstance: <any>{
+        aicZoneId: "ATL53",
+        aicZoneName: "AAIATLTE-ATL53",
+        bulkSize: 1,
+        category: "",
+        description: "",
+        globalSubscriberId: "e433710f-9217-458d-a79d-1c7aff376d89",
+        instanceName: "yoav",
+        instanceParams: [{}],
+        invariantUuid: "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+        isALaCarte: false,
+        isEcompGeneratedNaming: false,
+        isMultiStepDesign: false,
+        lcpCloudRegionId: "JANET25",
+        modelInfo: {
+          modelInvariantId: "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0",
+          modelVersionId: "6b528779-44a3-4472-bdff-9cd15ec93450",
+          modelName: "action-data",
+          modelVersion: "1.0"
+        },
+        name: "action-data",
+        owningEntityId: "d61e6f2d-12fa-4cc2-91df-7c244011d6fc",
+        owningEntityName: "WayneHolland",
+        productFamilyId: "d8a6ed93-251c-47ca-adc9-86671fd19f4c",
+        projectName: "WATKINS",
+        rollbackOnFailure: "true",
+        serviceRole: "",
+        serviceType: "",
+        subscriptionServiceType: "TYLER SILVIA",
+        tenantId: "092eb9e8e4b7412e8787dd091bc58e86",
+        tenantName: "USP-SIP-IC-24335-T-01",
+        testApi: "VNF_API",
+        uuid: "6b528779-44a3-4472-bdff-9cd15ec93450",
+        version: "1.0",
+        vidNotions: {instantiationUI: "legacy", modelCategory: "other", viewEditUI: "legacy"}
+      }
+    });
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"]).toBeDefined();
+
+    for(const element in elemntThatShouldNotOverideOnUpdateService){
+      expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"][element]).toEqual(elemntThatShouldNotOverideOnUpdateService[element]);
+    }
+
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"].aicZoneId).toEqual("ATL53");
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"].owningEntityId).toEqual("d61e6f2d-12fa-4cc2-91df-7c244011d6fc");
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"].owningEntityName).toEqual("WayneHolland");
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"].productFamilyId).toEqual("d8a6ed93-251c-47ca-adc9-86671fd19f4c");
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"].projectName).toEqual("WATKINS");
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"].rollbackOnFailure).toEqual("true");
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"].subscriptionServiceType).toEqual("TYLER SILVIA");
+    expect(service.serviceInstance["6b528779-44a3-4472-bdff-9cd15ec93450"].tenantId).toEqual("092eb9e8e4b7412e8787dd091bc58e86");
+
+  });
+
+  test('#ADD_SERVICE_ACTION should add action to the service', () => {
+    const serviceUuid: string = 'serviceUuid';
+    const actionName: ServiceInstanceActions = ServiceInstanceActions.Create;
+
+    let service = serviceReducer(<any>{
+      serviceInstance: {
+        'serviceUuid': {}
+      }
+    }, <AddServiceAction>{
+      type: ServiceActions.ADD_SERVICE_ACTION,
+      serviceUuid: 'serviceUuid',
+      action: actionName
+    });
+    expect(service.serviceInstance[serviceUuid]['action']).toEqual(actionName);
+  });
+
+  test('#UPDATE_SERVICE_INSTANCE', () => {
+    const serviceUuid: string = 'serviceUuid';
+
+    let serviceInstanceObject: ServiceInstance = <any>{
+      isDirty: false,
+      instanceName: 'instanceName',
+      isEcompGeneratedNaming: false,
+      globalSubscriberId: 'globalSubscriberId',
+      productFamilyId: 'productFamilyId',
+      subscriptionServiceType: 'subscriptionServiceType',
+      lcpCloudRegionId: 'lcpCloudRegionId',
+      tenantId: 'tenantId',
+      tenantName: 'tenantName',
+      aicZoneId: 'aicZoneId',
+      aicZoneName: 'aicZoneName',
+      projectName: 'projectName',
+      owningEntityId: 'owningEntityId',
+      owningEntityName: 'owningEntityName',
+      existingVnfGroupCounterMap: {},
+      existingVNFCounterMap: {},
+      existingNetworksCounterMap: {},
+      pause: false,
+      bulkSize: 1,
+      vnfs: {},
+      vnfGroups: {},
+      networks: {},
+      instanceParams: [],
+      rollbackOnFailure: false,
+      subscriberName: 'subscriberName',
+      validationCounter: 0,
+      existingNames: {},
+      action: ServiceInstanceActions.Create
+    };
+
+    let serviceState = serviceReducer(<any>{serviceInstance: {}},
+      <CreateServiceInstanceAction>{
+        type: ServiceActions.CREATE_SERVICE_INSTANCE,
+        serviceUuid: serviceUuid,
+        serviceInstance: serviceInstanceObject
+      }).serviceInstance[serviceUuid];
+
+    expect(serviceState.instanceName).toEqual(serviceInstanceObject.instanceName);
+    expect(serviceState.isEcompGeneratedNaming).toEqual(serviceInstanceObject.isEcompGeneratedNaming);
+    expect(serviceState.globalSubscriberId).toEqual(serviceInstanceObject.globalSubscriberId);
+    expect(serviceState.productFamilyId).toEqual(serviceInstanceObject.productFamilyId);
+    expect(serviceState.subscriptionServiceType).toEqual(serviceInstanceObject.subscriptionServiceType);
+    expect(serviceState.lcpCloudRegionId).toEqual(serviceInstanceObject.lcpCloudRegionId);
+    expect(serviceState.tenantId).toEqual(serviceInstanceObject.tenantId);
+    expect(serviceState.tenantName).toEqual(serviceInstanceObject.tenantName);
+    expect(serviceState.aicZoneId).toEqual(serviceInstanceObject.aicZoneId);
+    expect(serviceState.aicZoneName).toEqual(serviceInstanceObject.aicZoneName);
+    expect(serviceState.projectName).toEqual(serviceInstanceObject.projectName);
+    expect(serviceState.owningEntityId).toEqual(serviceInstanceObject.owningEntityId);
+    expect(serviceState.owningEntityName).toEqual(serviceInstanceObject.owningEntityName);
+    expect(serviceState.pause).toEqual(serviceInstanceObject.pause);
+    expect(serviceState.bulkSize).toEqual(serviceInstanceObject.bulkSize);
+    expect(serviceState.vnfs).toEqual(serviceInstanceObject.vnfs);
+    expect(serviceState.instanceParams).toEqual(serviceInstanceObject.instanceParams);
+    expect(serviceState.rollbackOnFailure).toEqual(serviceInstanceObject.rollbackOnFailure);
+    expect(serviceState.subscriberName).toEqual(serviceInstanceObject.subscriberName);
+  });
+
+
+  test('#DELETE_ALL_SERVICE_INSTANCES should delete all services', () => {
+    const state = serviceReducer(<any>{
+        serviceInstance: {
+          'service-1': {},
+          'service-2': {}
+        }
+      },
+      <CreateServiceInstanceAction>{
+        type: ServiceActions.DELETE_ALL_SERVICE_INSTANCES
+      });
+
+    expect(state.serviceInstance['service-1']).toBeUndefined();
+    expect(state.serviceInstance['service-2']).toBeUndefined();
+  });
+
+  test('#DELETE_SERVICE_INSTANCE should delete service', () => {
+    const state = serviceReducer(<any>{
+        serviceInstance: {
+          'service-1': {}
+        }
+      },
+      <DeleteServiceInstanceAction>{
+        type: ServiceActions.DELETE_ALL_SERVICE_INSTANCES
+      });
+
+    expect(state.serviceInstance['service-1']).toBeUndefined();
+  });
+
+  test('#UPDATE_MODEL should update service model ', () => {
+    const state = serviceReducer(<any>{
+        serviceHierarchy: {}
+      },
+      <UpdateServiceModelAction>{
+        type: ServiceActions.UPDATE_MODEL,
+        serviceHierarchy: {
+          service: {
+            uuid: 'uuid-1'
+          }
+        }
+      });
+
+    expect(state.serviceHierarchy['uuid-1'].service).toBeDefined();
+  });
+
+  test('#UPDATE_MODEL should update service model with vnfGroups ', () => {
+    const state = serviceReducer(<any>{
+        serviceHierarchy: {}
+      },
+      <UpdateServiceModelAction>{
+        type: ServiceActions.UPDATE_MODEL,
+        serviceHierarchy: {
+          service: {
+            uuid: 'uuid-1'
+          },
+          vnfs: {},
+          vnfGroups: {
+            'vnfGrouop_1': {
+              uuid: 'vnfGroup_uuid_1',
+              name: 'vnfGroup_name_1',
+              type: 'Group'
+            },
+            'vnfGrouop_2': {
+              uuid: 'vnfGroup_uuid_2',
+              name: 'vnfGroup_name_2',
+              type: 'Group'
+            }
+          }
+        }
+      });
+
+    expect(state.serviceHierarchy['uuid-1']).toBeDefined();
+    expect(state.serviceHierarchy['uuid-1'].vnfGroups['vnfGrouop_1']).toBeDefined();
+    expect(state.serviceHierarchy['uuid-1'].vnfGroups['vnfGrouop_2']).toBeDefined();
+  });
+
+  test('#CHANGE_SERVICE_IS_DIRTY should update service isDirty flag : service is not dirty ', () => {
+    const state = serviceReducer(<any>{
+        serviceInstance: {
+          'serviceId': {
+            action: ServiceInstanceActions.None,
+            'vnfs': {
+              'vnf1': {
+                action: ServiceInstanceActions.None
+              },
+              'vnf2': {
+                action: ServiceInstanceActions.None
+              }
+            }
+
+          }
+        }
+      },
+      <ChangeServiceDirty>{
+        type: ServiceActions.CHANGE_SERVICE_IS_DIRTY,
+        nodes: [
+          {
+            action: ServiceInstanceActions.None
+          },
+          {
+            action: ServiceInstanceActions.None
+          }],
+        serviceId: 'serviceId'
+
+      });
+
+    expect(state.serviceInstance['serviceId'].isDirty).toBeFalsy();
+  });
+
+  test('#CHANGE_SERVICE_IS_DIRTY should update service isDirty flag : service is dirty should return true', () => {
+    const state = serviceReducer(<any>{
+        serviceInstance: {
+          'serviceId': {
+            action: ServiceInstanceActions.Create
+
+          }
+        }
+      },
+      <ChangeServiceDirty>{
+        type: ServiceActions.CHANGE_SERVICE_IS_DIRTY,
+        nodes: [
+          {
+            action: ServiceInstanceActions.None
+          },
+          {
+            action: ServiceInstanceActions.None
+          }],
+        serviceId: 'serviceId'
+
+      });
+
+    expect(state.serviceInstance['serviceId'].isDirty).toBeTruthy();
+  });
+
+  test('#CHANGE_SERVICE_IS_DIRTY should update service isDirty flag : vnf is dirty ', () => {
+    const state = serviceReducer(<any>{
+        serviceInstance: {
+          'serviceId': {
+            action: ServiceInstanceActions.None,
+            'vnfs': {
+              'vnf1': {
+                action: ServiceInstanceActions.None
+              },
+              'vnf2': {
+                action: ServiceInstanceActions.Create
+              }
+            }
+
+          }
+        }
+      },
+      <ChangeServiceDirty>{
+        type: ServiceActions.CHANGE_SERVICE_IS_DIRTY,
+        nodes: [
+          {
+            action: ServiceInstanceActions.None
+          },
+          {
+            action: ServiceInstanceActions.Create
+          }],
+        serviceId: 'serviceId'
+
+      });
+
+    expect(state.serviceInstance['serviceId'].isDirty).toBeTruthy();
+  });
+
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.ts
new file mode 100644
index 0000000..9d21d35
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/service/service.reducers.ts
@@ -0,0 +1,107 @@
+import {Action} from "redux";
+import {
+  AddServiceAction,
+  ChangeServiceDirty,
+  ServiceActions,
+  CreateServiceInstanceAction,
+  UpdateServiceModelAction, UpdateServiceInstanceAction
+} from "./service.actions";
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {ServiceState} from "../main.reducer";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+import * as _ from "lodash";
+
+export function serviceReducer(state: ServiceState, action: Action) : ServiceState{
+    switch (action.type) {
+      case ServiceActions.UPDATE_SERVICE_INSTANCE : {
+        let newState = _.cloneDeep(state);
+        const updateServiceInstanceAction = <UpdateServiceInstanceAction>action;
+        const uuid = updateServiceInstanceAction.serviceUuid;
+        const serviceInstance = updateServiceInstanceAction.serviceInstance;
+
+
+        updateUniqueNames(serviceInstance.instanceName, updateServiceInstanceAction.serviceInstance.instanceName, newState.serviceInstance[uuid]);
+
+        newState.serviceInstance[uuid] = _.merge(newState.serviceInstance[uuid], serviceInstance);
+        return newState;
+      }
+      case ServiceActions.CREATE_SERVICE_INSTANCE : {
+        const updateServiceInstanceAction = <CreateServiceInstanceAction>action;
+        const uuid = updateServiceInstanceAction.serviceUuid;
+        let newState = _.cloneDeep(state);
+
+        const serviceInstance: ServiceInstance =  new ServiceInstance();
+        const currentInstaceName = state.serviceInstance[uuid] ? serviceInstance.instanceName : null;
+
+        newState.serviceInstance[uuid] = Object.assign(serviceInstance, updateServiceInstanceAction.serviceInstance);
+        if (!_.isNil(updateServiceInstanceAction.serviceInstance)) {
+          updateUniqueNames(currentInstaceName, updateServiceInstanceAction.serviceInstance.instanceName, newState.serviceInstance[uuid]);
+        }
+        return newState;
+      }
+      case ServiceActions.DELETE_ALL_SERVICE_INSTANCES: {
+        if (state.serviceInstance) {
+          let newState = _.cloneDeep(state);
+          newState.serviceInstance = {};
+          return Object.assign({}, state, newState);
+        }
+        return Object.assign({}, state);
+      }
+      case ServiceActions.UPDATE_MODEL: {
+        let uuid = (<UpdateServiceModelAction>action).serviceHierarchy.service.uuid;
+        state.serviceHierarchy[uuid] = _.cloneDeep((<UpdateServiceModelAction>action).serviceHierarchy);
+        return Object.assign({}, state);
+      }
+      case ServiceActions.ADD_SERVICE_ACTION: {
+        const uuid: string = (<AddServiceAction>action).serviceUuid;
+        const actionToAdd: ServiceInstanceActions =  (<AddServiceAction>action).action;
+        state.serviceInstance[uuid].action =  actionToAdd;
+        return Object.assign({}, state);
+      }
+      case ServiceActions.CHANGE_SERVICE_IS_DIRTY : {
+        let newState = _.cloneDeep(state);
+        let serviceInstanceAction: ServiceInstanceActions = newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].action;
+
+        if(serviceInstanceAction !== ServiceInstanceActions.None){
+          newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].isDirty = true;
+          return newState;
+        }
+
+        const nodes =  (<ChangeServiceDirty>action).nodes;
+        for(let node of nodes){
+          const dirty = isDirty(node);
+          if(dirty) {
+            newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].isDirty = true;
+            return newState;
+          }
+        }
+
+        newState.serviceInstance[(<ChangeServiceDirty>action).serviceId].isDirty = false;
+        return newState;
+      }
+    }
+}
+
+const isDirty = (node) : boolean => {
+  if(node.action !== ServiceInstanceActions.None) return true;
+  if(!_.isNil(node.children) && node.children.length > 0){
+      for(let child of node.children){
+        const dirty: boolean = isDirty(child);
+        if(dirty) return true;
+      }
+  }
+  return false;
+};
+
+const updateUniqueNames = (oldName : string, newName : string, serviceInstance : ServiceInstance) : void => {
+  let existingNames = serviceInstance.existingNames;
+  if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
+    delete existingNames[oldName.toLowerCase()];
+  }
+  if(!_.isNil(newName)) {
+    existingNames[newName.toLowerCase()] = "";
+  }
+};
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.actions.ts
new file mode 100644
index 0000000..a3f0f40
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.actions.ts
@@ -0,0 +1,105 @@
+import {Action, ActionCreator} from "redux";
+
+export enum VfModuleActions {
+  REMOVE_VNF_MODULE_INSTANCE = 'REMOVE_VNF_MODULE_INSTANCE',
+  CREATE_VF_MODULE = 'CREATE_VF_MODULE',
+  UPDATE_VF_MODULE = 'UPDATE_VF_MODULE',
+  DELETE_ACTION_VF_MODULE_INSTANCE = "DELETE_ACTION_VF_MODULE_INSTANCE",
+  UNDO_DELETE_ACTION_VF_MODULE_INSTANCE = "UNDO_DELETE_ACTION_VF_MODULE_INSTANCE",
+  UPDATE_VFMODULE_POSITION = "UPDATE_VFMODULE_POSITION"
+}
+
+
+export interface UpdateVFModluePosition extends Action {
+  node: any,
+  instanceId : string,
+  vnfStoreKey ?: string;
+}
+
+export interface DeleteVfModuleInstanceAction extends Action {
+  modelName?: string;
+  serviceModelId?: string;
+  vfName?: string;
+  vnfStoreKey?:string;
+  dynamicModelName?: string;
+}
+
+export interface CreateVFModuleInstanceAction extends Action {
+  vfInstance: any;
+  vfId: string;
+  serviceUuid: string;
+  index : number
+  vnfStoreKey : string;
+}
+
+export interface UpdateVFModuleInstanceAction extends Action {
+  vfInstance: any;
+  vfId: string;
+  serviceUuid: string;
+  dynamicModelName : string;
+  vnfStoreKey : string
+}
+
+
+export interface DeleteActionVfModuleInstanceAction extends Action {
+  dynamicModelName: string;
+  vnfStoreKey : string;
+  serviceId?: string;
+}
+
+export interface UndoDeleteActionVfModuleInstanceAction extends Action {
+  dynamicModelName: string;
+  vnfStoreKey : string;
+  serviceId?: string;
+}
+
+export const removeVfModuleInstance: ActionCreator<DeleteVfModuleInstanceAction> = (modelName, serviceModelId, vfName, vnfStoreKey, dynamicModelName) => ({
+  type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE,
+  modelName: modelName,
+  serviceModelId: serviceModelId,
+  vfName: vfName,
+  vnfStoreKey : vnfStoreKey,
+  dynamicModelName:dynamicModelName
+});
+
+
+export const createVFModuleInstance: ActionCreator<CreateVFModuleInstanceAction> = (vfInstance, vfId, serviceUuid, index, vnfStoreKey) => ({
+  type: VfModuleActions.CREATE_VF_MODULE,
+  vfInstance: vfInstance,
+  vfId: vfId,
+  serviceUuid: serviceUuid,
+  index : index,
+  vnfStoreKey : vnfStoreKey
+});
+
+export const updateVFModuleInstance: ActionCreator<UpdateVFModuleInstanceAction> = (vfInstance, vfId, serviceUuid, dynamicModelName, vnfStoreKey) => ({
+  type: VfModuleActions.UPDATE_VF_MODULE,
+  vfInstance: vfInstance,
+  vfId: vfId,
+  serviceUuid: serviceUuid,
+  dynamicModelName : dynamicModelName,
+  vnfStoreKey : vnfStoreKey
+});
+
+export const deleteActionVfModuleInstance: ActionCreator<DeleteActionVfModuleInstanceAction> = (dynamicModelName, vnfStoreKey, serviceId) => ({
+  type: VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE,
+  dynamicModelName: dynamicModelName,
+  vnfStoreKey : vnfStoreKey,
+  serviceId: serviceId
+});
+
+export const undoDeleteVfModuleInstance: ActionCreator<UndoDeleteActionVfModuleInstanceAction> = (dynamicModelName, vnfStoreKey, serviceId) => ({
+  type: VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE,
+  dynamicModelName: dynamicModelName,
+  vnfStoreKey : vnfStoreKey,
+  serviceId: serviceId
+});
+
+
+export const updateVFModulePosition: ActionCreator<UpdateVFModluePosition> = (node, instanceId, vnfStoreKey) => ({
+  type: VfModuleActions.UPDATE_VFMODULE_POSITION,
+  node: node,
+  instanceId: instanceId,
+  vnfStoreKey : vnfStoreKey
+});
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.spec.ts
new file mode 100644
index 0000000..de6d214
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.spec.ts
@@ -0,0 +1,248 @@
+import {
+  CreateVFModuleInstanceAction,
+  DeleteActionVfModuleInstanceAction,
+  DeleteVfModuleInstanceAction, UndoDeleteActionVfModuleInstanceAction, UpdateVFModluePosition,
+  VfModuleActions
+} from "./vfModule.actions";
+import {vfModuleReducer} from "./vfModule.reducers";
+import {VfModuleInstance} from "../../../models/vfModuleInstance";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+
+describe('vfModuleReducer', () => {
+  test('#REMOVE_VNF_MODULE_INSTANCE : should delete existing vnf module by dynamicModelName', () => {
+    let state = vfModuleReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vfName' : {
+                vfModules : {
+                  'modelName' : {
+                    'dynamicModelName1': {},
+                    'dynamicModelName2': {},
+                  }
+                }
+              }
+            }
+          }
+        }},
+      <DeleteVfModuleInstanceAction>{
+        type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE,
+        modelName : 'modelName',
+        vfName : 'vfName',
+        vnfStoreKey : 'vfName',
+        serviceModelId : 'serviceModelId',
+        dynamicModelName: 'dynamicModelName1'
+      });
+
+    expect(state).toBeDefined();
+    expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']['dynamicModelName2']).toBeDefined();
+    expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']['dynamicModelName1']).not.toBeDefined();
+  });
+
+  test('#DELETE_LAST_VNF_MODULE_INSTANCE : should delete existing vnf module', () => {
+    let state = vfModuleReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vfName' : {
+                vfModules : {
+                  'modelName' : {
+                    'dynamicModelName': {
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }},
+      <DeleteVfModuleInstanceAction>{
+        type: VfModuleActions.REMOVE_VNF_MODULE_INSTANCE,
+        modelName : 'modelName',
+        vfName : 'vfName',
+        vnfStoreKey : 'vfName',
+        serviceModelId : 'serviceModelId',
+        dynamicModelName: 'dynamicModelName'
+      });
+
+    expect(state).toBeDefined();
+    expect(state.serviceInstance['serviceModelId'].vnfs['vfName'].vfModules['modelName']).not.toBeDefined();
+  });
+
+  test('#CREATE_VF_MODULE: should create new vfModule to existing VNF', ()=>{
+    let vfModuleInstance : VfModuleInstance = new VfModuleInstance();
+    vfModuleInstance.instanceName = 'instanceName';
+    vfModuleInstance.isMissingData = false;
+    vfModuleInstance.volumeGroupName = 'volumeGroupName';
+    let vfModule = vfModuleReducer(<any>{serviceInstance : {
+          'serviceUuid' : {
+            vnfs : {
+              'vnfStoreKey' : {
+                'vfModules' : {
+                }
+              }
+            }
+          }
+        }},
+      <CreateVFModuleInstanceAction>{
+        type: VfModuleActions.CREATE_VF_MODULE,
+        vfId : 'vfId',
+        vfInstance : new VfModuleInstance(),
+        vnfStoreKey : 'vnfStoreKey',
+        serviceUuid : 'serviceUuid',
+        index : 1
+      }).serviceInstance['serviceUuid'].vnfs['vnfStoreKey'].vfModules;
+
+    let firstVfModuleName = Object.keys(vfModule)[0];
+    expect(vfModule[firstVfModuleName]).toBeDefined();
+    expect(vfModule[firstVfModuleName].isMissingData).toBeFalsy();
+  });
+
+  test('#UPDATE_VF_MODULE: should update existing VFModule', ()=>{
+    let vfModuleInstance : VfModuleInstance = new VfModuleInstance();
+    vfModuleInstance.instanceName = 'instanceName';
+    vfModuleInstance.isMissingData = false;
+    vfModuleInstance.volumeGroupName = 'volumeGroupName';
+    let vfModule = vfModuleReducer(<any>{
+      serviceHierarchy : {
+        'serviceModelId' : {}
+      },
+      serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vfName' : {
+                vfModules : {
+                  'modelName' : {
+                    'dynamicModelName1': {
+                      isMissingData : true
+                    },
+                    'dynamicModelName2': {},
+                  }
+                }
+              }
+            }
+          }
+        }},
+      <CreateVFModuleInstanceAction>{
+        type: VfModuleActions.UPDATE_VF_MODULE,
+        vfId : 'modelName',
+        vfInstance : new VfModuleInstance(),
+        vnfStoreKey : 'vfName',
+        dynamicModelName : 'dynamicModelName1',
+        serviceUuid : 'serviceModelId',
+        index : 1
+      }).serviceInstance['serviceModelId'].vnfs['vfName'].vfModules;
+
+    let firstVfModuleName = Object.keys(vfModule)[0];
+    expect(vfModule[firstVfModuleName]).toBeDefined();
+    expect(vfModule[firstVfModuleName].isMissingData).toBeFalsy();
+  });
+
+
+  test('#UPDATE_VFMODULE_POSITION: should update position', ()=>{
+    let vfModule = vfModuleReducer(<any>{
+        serviceHierarchy : {
+          'serviceModelId' : {}
+        },
+        serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vfName' : {
+                vfModules : {
+                  'modelName' : {
+                    'dynamicModelName': {
+                      isMissingData : true
+                    }
+                  }
+                }
+              }
+            }
+          }
+        }},
+      <UpdateVFModluePosition>{
+        type: VfModuleActions.UPDATE_VFMODULE_POSITION,
+        node: {
+          position : 1,
+          dynamicModelName : "dynamicModelName",
+          modelName : "modelName"
+        },
+        instanceId : "serviceModelId",
+        vnfStoreKey : "vfName"
+
+      }).serviceInstance['serviceModelId'].vnfs['vfName'].vfModules["modelName"]["dynamicModelName"];
+
+      expect(vfModule.position).toEqual(1);
+  });
+
+
+  test('#DELETE_ACTION_VF_MODULE_INSTANCE', ()=>{
+    let vfModule = vfModuleReducer(<any>{
+      serviceHierarchy : {
+        'serviceModelId' : {}
+      },
+      serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vnfStoreKey' : {
+                vfModules : {
+                  'modelName' : {
+                    'dynamicModelName1': {
+                      isMissingData : true,
+                      action : 'None'
+                    },
+                    'dynamicModelName2': {},
+                  }
+                }
+              }
+            }
+          }
+        }},
+      <DeleteActionVfModuleInstanceAction>{
+        type: VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE,
+        dynamicModelName: 'dynamicModelName1',
+        vnfStoreKey : 'vnfStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
+
+    console.log(vfModule.action);
+    expect(vfModule).toBeDefined();
+    expect(vfModule.isMissingData).toBeTruthy();
+    expect(vfModule.action).toEqual(ServiceInstanceActions.None_Delete);
+  });
+
+  test('#UNDO_DELETE_ACTION_VF_MODULE_INSTANCE', ()=>{
+    let vfModule = vfModuleReducer(<any>{
+        serviceHierarchy : {
+          'serviceModelId' : {}
+        },
+        serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vnfStoreKey' : {
+                vfModules : {
+                  'modelName' : {
+                    'dynamicModelName1': {
+                      isMissingData : true,
+                      action : 'None_Delete'
+                    },
+                    'dynamicModelName2': {},
+                  }
+                }
+              }
+            }
+          }
+        }},
+      <UndoDeleteActionVfModuleInstanceAction>{
+        type: VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE,
+        dynamicModelName: 'dynamicModelName1',
+        vnfStoreKey : 'vnfStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'].vfModules['modelName']['dynamicModelName1'];
+
+    console.log(vfModule.action);
+    expect(vfModule).toBeDefined();
+    expect(vfModule.action).toEqual(ServiceInstanceActions.None);
+  });
+
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts
new file mode 100644
index 0000000..f3636ff
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vfModule/vfModule.reducers.ts
@@ -0,0 +1,165 @@
+import {Action} from "redux";
+import * as _ from "lodash";
+import {
+  CreateVFModuleInstanceAction, DeleteActionVfModuleInstanceAction,
+  DeleteVfModuleInstanceAction, UndoDeleteActionVfModuleInstanceAction, UpdateVFModluePosition,
+  UpdateVFModuleInstanceAction,
+  VfModuleActions
+} from "./vfModule.actions";
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {VfModuleMap} from "../../../models/vfModulesMap";
+import {ServiceState} from "../main.reducer";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+
+export function vfModuleReducer(state: ServiceState , action: Action) : ServiceState{
+  switch (action.type) {
+    case VfModuleActions.CREATE_VF_MODULE: {
+      const updateVFModuleInstanceAction = <CreateVFModuleInstanceAction>action;
+      const vfInstance = updateVFModuleInstanceAction.vfInstance;
+      const serviceUuid = updateVFModuleInstanceAction.serviceUuid;
+      const vfModuleId = updateVFModuleInstanceAction.vfId;
+      const vnfStoreKey = updateVFModuleInstanceAction.vnfStoreKey;
+
+      let newState = Object.assign({}, state);
+
+      let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] || new VfModuleMap();
+      let randomId = generateId();
+      vfModulesMap[vfModuleId + randomId] = vfInstance;
+      updateUniqueNames(null, vfInstance.instanceName, newState.serviceInstance[serviceUuid]);
+      updateUniqueNames(null, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]);
+      updateServiceValidationCounter(newState, false, vfInstance['isMissingData'], serviceUuid);
+
+      newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey].vfModules[vfModuleId] = vfModulesMap;
+      return newState;
+    }
+    case VfModuleActions.UPDATE_VF_MODULE: {
+      const updateVFModuleInstanceAction = <UpdateVFModuleInstanceAction>action;
+      const vfInstance = updateVFModuleInstanceAction.vfInstance;
+      const serviceUuid = updateVFModuleInstanceAction.serviceUuid;
+      const vfModuleId = updateVFModuleInstanceAction.vfId;
+      const newState = _.cloneDeep(state);
+      const vnfs = newState.serviceHierarchy[serviceUuid].vnfs;
+      let vnfId = getVfModuleParentVnfId(vnfs, vfModuleId);
+      const vnfStoreKey = updateVFModuleInstanceAction.vnfStoreKey;
+      if (!_.isNil(vnfStoreKey)) {
+        vnfId = vnfStoreKey;
+      }
+      let vfModulesMap = newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] || new VfModuleMap();
+      updateServiceValidationCounter(newState, vfModulesMap[updateVFModuleInstanceAction.dynamicModelName]['isMissingData'], vfInstance.isMissingData, serviceUuid);
+      updateUniqueNames(vfModulesMap[updateVFModuleInstanceAction.dynamicModelName].instanceName, vfInstance.instanceName, newState.serviceInstance[serviceUuid]);
+      updateUniqueNames(vfModulesMap[updateVFModuleInstanceAction.dynamicModelName].volumeGroupName, vfInstance.volumeGroupName, newState.serviceInstance[serviceUuid]);
+      vfModulesMap[updateVFModuleInstanceAction.dynamicModelName] = vfInstance;
+      newState.serviceInstance[serviceUuid].vnfs[vnfId].vfModules[vfModuleId] = vfModulesMap;
+      return newState;
+    }
+    case VfModuleActions.REMOVE_VNF_MODULE_INSTANCE: {
+      const actionData = (<DeleteVfModuleInstanceAction>action);
+      if (state.serviceInstance[actionData.serviceModelId]) {
+        let vfModulesMap = state.serviceInstance[actionData.serviceModelId].vnfs[actionData.vnfStoreKey].vfModules;
+        updateIsMissingDataOnDeleteVFModule(state, actionData.serviceModelId, actionData.vnfStoreKey, actionData.modelName);
+        updateUniqueNames(vfModulesMap[actionData.modelName][actionData.dynamicModelName].instanceName, null, state.serviceInstance[actionData.serviceModelId] );
+        updateUniqueNames(vfModulesMap[actionData.modelName][actionData.dynamicModelName].volumeGroupName, null, state.serviceInstance[actionData.serviceModelId] );
+        delete vfModulesMap[actionData.modelName][actionData.dynamicModelName];
+        if(_.isEmpty(vfModulesMap[actionData.modelName])){
+          delete vfModulesMap[actionData.modelName];
+        }
+      }
+      return Object.assign({}, state);
+    }
+    case VfModuleActions.DELETE_ACTION_VF_MODULE_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let vfModules = newState.serviceInstance[(<DeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<DeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules;
+
+      for(let key in vfModules){
+        let firstKey = Object.keys(vfModules[key])[0];
+        if(firstKey === (<DeleteActionVfModuleInstanceAction>action).dynamicModelName){
+          let oldAction = newState.serviceInstance[(<DeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<DeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules[key][firstKey].action;
+          if(oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState;
+          newState.serviceInstance[(<DeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<DeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules[key][firstKey].action = (oldAction + '_Delete') as ServiceInstanceActions;
+          updateIsMissingDataOnDeleteVFModule(newState, (<UndoDeleteActionVfModuleInstanceAction>action).serviceId, (<UndoDeleteActionVfModuleInstanceAction>action).vnfStoreKey, key);
+          return newState;
+        }
+      }
+      return newState;
+    }
+    case VfModuleActions.UNDO_DELETE_ACTION_VF_MODULE_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let vfModules = newState.serviceInstance[(<DeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<DeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules;
+
+      for(let key in vfModules){
+        let firstKey = Object.keys(vfModules[key])[0];
+        if(firstKey === (<UndoDeleteActionVfModuleInstanceAction>action).dynamicModelName){
+          let oldAction = newState.serviceInstance[(<UndoDeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<UndoDeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules[key][firstKey].action;
+          newState.serviceInstance[(<UndoDeleteActionVfModuleInstanceAction>action).serviceId].vnfs[(<UndoDeleteActionVfModuleInstanceAction>action).vnfStoreKey].vfModules[key][firstKey].action = (oldAction.split('_')[0]) as ServiceInstanceActions;
+          updateIsMissingDataOnDeleteVFModule(newState, (<UndoDeleteActionVfModuleInstanceAction>action).serviceId, (<UndoDeleteActionVfModuleInstanceAction>action).vnfStoreKey, key);
+          return newState;
+        }
+      }
+      return newState;
+    }
+
+    case VfModuleActions.UPDATE_VFMODULE_POSITION : {
+      const updateVFModluePosition = <UpdateVFModluePosition>action;
+      const serviceUuid = updateVFModluePosition.instanceId;
+      const dynamicModelName = updateVFModluePosition.node.dynamicModelName;
+      const modelName = updateVFModluePosition.node.modelName;
+      const newState = _.cloneDeep(state);
+
+      newState.serviceInstance[serviceUuid].vnfs[updateVFModluePosition.vnfStoreKey].vfModules[modelName][dynamicModelName].position = updateVFModluePosition.node.position;
+      return newState;
+    }
+  }
+}
+
+const updateIsMissingDataOnDeleteVFModule = (state: any, serviceModelId: string, vnfStoreKey: string, vfModuleName): void => {
+  const vfModules = state.serviceInstance[serviceModelId].vnfs[vnfStoreKey].vfModules[vfModuleName];
+
+  _.forOwn(vfModules, (vfModuleInstance) => {
+    let isMissingData: boolean = vfModuleInstance.isMissingData;
+    updateServiceValidationCounter(state, isMissingData, false, serviceModelId);
+  });
+};
+
+
+const updateUniqueNames = (oldName : string, newName : string, serviceInstance : ServiceInstance) : void => {
+  let existingNames = serviceInstance.existingNames;
+  if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
+    delete existingNames[oldName.toLowerCase()];
+  }
+  if(!_.isNil(newName)) {
+    existingNames[newName.toLowerCase()] = "";
+  }
+};
+
+const updateServiceValidationCounter = (newState: any, oldValidationState: boolean, newValidationState: boolean, serviceUuid: string) => {
+  if (oldValidationState && !newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter--;
+  } else if (!oldValidationState && newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter++;
+  }
+};
+
+const generateId = () => {
+  return Math.random().toString(36).replace(/[^a-z]+/g, '').substr(0, 5);
+};
+const getVfModuleParentVnfId = (vnfs: object, vfModuleId: string) => {
+  let vnfId = undefined;
+  _.forOwn(vnfs, (value, key) => {
+    if (vnfs[key].vfModules && vnfs[key].vfModules[vfModuleId]) {
+      vnfId = vnfs[key].modelCustomizationName;
+      return false;
+    }
+  });
+  return vnfId;
+};
+
+
+
+
+
+
+
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.actions.ts
new file mode 100644
index 0000000..b842844
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.actions.ts
@@ -0,0 +1,99 @@
+import {Action, ActionCreator} from "redux";
+import {VnfInstance} from "../../../models/vnfInstance";
+
+export enum VNFActions {
+  CREATE_VNF_INSTANCE = "CREATE_VNF_INSTANCE",
+  UPDATE_VNF_INSTANCE = "UPDATE_VNF_INSTANCE",
+  REMOVE_VNF_INSTANCE = "REMOVE_VNF_INSTANCE",
+  DELETE_ACTION_VNF_INSTANCE = "DELETE_VNF_INSTANCE",
+  UNDO_DELETE_ACTION_VNF_INSTANCE = "UNDO_DELETE_VNF_INSTANCE",
+  UPDATE_VNF_POSITION = "UPDATE_VNF_POISTION"
+}
+
+
+export interface CreateVnfInstanceAction extends Action {
+  vnfInstance?: VnfInstance;
+  vnfModelName?: string;
+  serviceUuid?: string;
+  vnfStoreKey?:string;
+}
+
+export interface UpdateVnfPosition extends Action {
+  node: any,
+  instanceId : string,
+  vnfStoreKey?: string;
+}
+
+export interface UpdateVnfInstanceAction extends Action {
+  vnfInstance?: VnfInstance;
+  vnfModelName?: string;
+  serviceUuid?: string;
+  vnfStoreKey?:string;
+}
+
+
+
+export interface DeleteActionVnfInstanceAction extends Action {
+  vnfStoreKey: string;
+  serviceId?: string;
+}
+
+export interface UndoDeleteActionVnfInstanceAction extends Action {
+  vnfStoreKey: string;
+  serviceId?: string;
+}
+
+export interface RemoveVnfInstanceAction extends Action {
+  vnfStoreKey: string;
+  serviceId?: string;
+}
+
+export const createVNFInstance: ActionCreator<CreateVnfInstanceAction> = (vnfInstance, vnfModelName, serviceUuid, vnfStoreKey) => ({
+  type: VNFActions.CREATE_VNF_INSTANCE,
+  vnfInstance: vnfInstance,
+  vnfModelName: vnfModelName,
+  serviceUuid: serviceUuid,
+  vnfStoreKey : vnfStoreKey
+});
+
+
+export const updateVNFInstance: ActionCreator<UpdateVnfInstanceAction> = (vnfInstance, vnfModelName, serviceUuid, vnfStoreKey) => ({
+  type: VNFActions.UPDATE_VNF_INSTANCE,
+  vnfInstance: vnfInstance,
+  vnfModelName: vnfModelName,
+  serviceUuid: serviceUuid,
+  vnfStoreKey : vnfStoreKey
+});
+
+
+export const deleteActionVnfInstance: ActionCreator<DeleteActionVnfInstanceAction> = (vnfStoreKey, serviceId) => ({
+  type: VNFActions.DELETE_ACTION_VNF_INSTANCE,
+  vnfStoreKey: vnfStoreKey,
+  serviceId: serviceId
+});
+
+export const undoDeleteActionVnfInstance: ActionCreator<UndoDeleteActionVnfInstanceAction> = (vnfStoreKey, serviceId) => ({
+  type: VNFActions.UNDO_DELETE_ACTION_VNF_INSTANCE,
+  vnfStoreKey: vnfStoreKey,
+  serviceId: serviceId
+});
+
+export const removeVnfInstance: ActionCreator<RemoveVnfInstanceAction> = (vnfStoreKey, serviceId) => ({
+  type: VNFActions.REMOVE_VNF_INSTANCE,
+  vnfStoreKey: vnfStoreKey,
+  serviceId: serviceId
+});
+
+export const updateVnfPosition: ActionCreator<UpdateVnfPosition> = (node, instanceId, vnfStoreKey) => ({
+  type: VNFActions.UPDATE_VNF_POSITION,
+  node: node,
+  instanceId: instanceId,
+  vnfStoreKey : vnfStoreKey
+});
+
+
+
+
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.reducers.spec.ts
new file mode 100644
index 0000000..3241f11
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.reducers.spec.ts
@@ -0,0 +1,132 @@
+import {VnfInstance} from "../../../models/vnfInstance";
+import {
+  CreateVnfInstanceAction,
+  DeleteActionVnfInstanceAction, RemoveVnfInstanceAction,
+  UndoDeleteActionVnfInstanceAction, UpdateVnfPosition,
+  VNFActions
+} from "./vnf.actions";
+import {vnfReducer} from "./vnf.reducers";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+describe('networkReducer', () => {
+  test('#UPDATE_VNF_POSITION', () => {
+    let vnfInstance: VnfInstance = new VnfInstance();
+    vnfInstance.isMissingData = false;
+    vnfInstance.instanceName = 'instanceName';
+    let vnfState = vnfReducer(<any>{
+      serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              "vnfStoreKey" : {
+
+              }
+            }
+          }
+        }},
+      <UpdateVnfPosition>{
+        type: VNFActions.UPDATE_VNF_POSITION,
+        node : <any>{
+          position : 1
+        },
+        vnfStoreKey : 'vnfStoreKey',
+        instanceId : 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'];
+
+    expect(vnfState).toBeDefined();
+    expect(vnfState.position).toEqual(1);
+  });
+
+  test('#CREATE_NETWORK_INSTANCE', () => {
+    let vnfInstance: VnfInstance = new VnfInstance();
+    vnfInstance.isMissingData = false;
+    vnfInstance.instanceName = 'instanceName';
+    let vnfState = vnfReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+
+            }
+          }
+        }},
+      <CreateVnfInstanceAction>{
+        type: VNFActions.CREATE_VNF_INSTANCE,
+        vnfInstance : vnfInstance,
+        vnfStoreKey : null,
+        vnfModelName : 'vnfModelName',
+        serviceUuid : 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfs['vnfModelName'];
+
+    expect(vnfState).toBeDefined();
+    expect(vnfState.isMissingData).toBeFalsy();
+  });
+
+  test('#DELETE_ACTION_VNF_INSTANCE', () => {
+    let vnfState = vnfReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vnfStoreKey' : {
+                isMissingData : true,
+                action : 'None'
+              }
+            }
+          }
+        }},
+      <DeleteActionVnfInstanceAction>{
+        type: VNFActions.DELETE_ACTION_VNF_INSTANCE,
+        vnfStoreKey: 'vnfStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'];
+
+    expect(vnfState).toBeDefined();
+    expect(vnfState.action).toEqual(ServiceInstanceActions.None_Delete);
+  });
+
+  test('#UNDO_DELETE_ACTION_VNF_INSTANCE', () => {
+    let vnfState = vnfReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vnfStoreKey' : {
+                isMissingData : true,
+                action : 'Update_Delete'
+              }
+            }
+          }
+        }},
+      <UndoDeleteActionVnfInstanceAction>{
+        type: VNFActions.UNDO_DELETE_ACTION_VNF_INSTANCE,
+        vnfStoreKey: 'vnfStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfs['vnfStoreKey'];
+
+    expect(vnfState).toBeDefined();
+    expect(vnfState.action).toEqual(ServiceInstanceActions.Update);
+  });
+
+  test('#REMOVE_VNF_INSTANCE', () => {
+    let vnfs = vnfReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfs : {
+              'vnfStoreKey' : {
+                isMissingData : true,
+                action : 'Update_Delete'
+              },
+              'vnfStoreKey_1' : {
+                isMissingData : true,
+                action : 'Update_Delete'
+              }
+            }
+          }
+        }},
+      <RemoveVnfInstanceAction>{
+        type: VNFActions.REMOVE_VNF_INSTANCE,
+        vnfStoreKey: 'vnfStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfs;
+
+    expect(vnfs).toBeDefined();
+    expect(vnfs['vnfStoreKey']).toBeUndefined();
+  });
+
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.reducers.ts
new file mode 100644
index 0000000..cc24d8d
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vnf/vnf.reducers.ts
@@ -0,0 +1,124 @@
+import {Action} from "redux";
+import {VnfInstance} from "../../../models/vnfInstance";
+import {
+  CreateVnfInstanceAction,
+  DeleteActionVnfInstanceAction, RemoveVnfInstanceAction, UndoDeleteActionVnfInstanceAction,
+  UpdateVnfInstanceAction, UpdateVnfPosition,
+  VNFActions
+} from "./vnf.actions";
+import * as _ from "lodash";
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {ServiceState} from "../main.reducer";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+export function vnfReducer(state: ServiceState, action: Action): ServiceState {
+  switch (action.type) {
+    case VNFActions.CREATE_VNF_INSTANCE: {
+      const updateVnfInstanceAction = <CreateVnfInstanceAction>action;
+      const serviceUuid = updateVnfInstanceAction.serviceUuid;
+      let vnfModelName = updateVnfInstanceAction.vnfModelName;
+      let newState = _.cloneDeep(state);
+
+      updateVnfInstanceAction.vnfInstance.originalName = vnfModelName;
+      updateVnfInstanceAction.vnfModelName = calculateNextUniqueModelName(vnfModelName, serviceUuid, newState, 'vnfs');
+
+      let vnfInstance: VnfInstance = newState.serviceInstance[serviceUuid].vnfs[vnfModelName];
+      vnfInstance = new VnfInstance();
+      updateVnfInstanceAction.vnfInstance.vnfStoreKey = updateVnfInstanceAction.vnfModelName;
+      updateVnfInstanceAction.vnfInstance.originalName = vnfModelName;
+      vnfInstance.originalName = updateVnfInstanceAction.vnfInstance.originalName;
+      vnfInstance.vnfStoreKey = updateVnfInstanceAction.vnfInstance.vnfStoreKey;
+      updateServiceValidationCounter(newState, vnfInstance['isMissingData'], updateVnfInstanceAction.vnfInstance['isMissingData'], serviceUuid);
+
+      newState.serviceInstance[serviceUuid].vnfs[updateVnfInstanceAction.vnfModelName] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
+      return newState;
+    }
+
+    case VNFActions.UPDATE_VNF_INSTANCE: {
+      const updateVnfInstanceAction = <UpdateVnfInstanceAction>action;
+      const serviceUuid = updateVnfInstanceAction.serviceUuid;
+      let vnfStoreKey = updateVnfInstanceAction.vnfStoreKey;
+
+
+      let newState = _.cloneDeep(state);
+      let vnfInstance: VnfInstance = newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey];
+      updateUniqueNames(vnfInstance ? vnfInstance.instanceName : null, updateVnfInstanceAction.vnfInstance.instanceName, newState.serviceInstance[serviceUuid]);
+
+      vnfInstance = vnfInstance || new VnfInstance();
+      updateServiceValidationCounter(newState, vnfInstance['isMissingData'], updateVnfInstanceAction.vnfInstance['isMissingData'], serviceUuid);
+
+      newState.serviceInstance[serviceUuid].vnfs[vnfStoreKey] = Object.assign(vnfInstance, updateVnfInstanceAction.vnfInstance);
+      return newState;
+    }
+
+    case VNFActions.DELETE_ACTION_VNF_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let vnf = newState.serviceInstance[(<DeleteActionVnfInstanceAction>action).serviceId].vnfs[(<DeleteActionVnfInstanceAction>action).vnfStoreKey];
+      let oldAction = vnf.action;
+      if(oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState;
+      newState.serviceInstance[(<DeleteActionVnfInstanceAction>action).serviceId].vnfs[(<DeleteActionVnfInstanceAction>action).vnfStoreKey].action = (oldAction + '_Delete') as ServiceInstanceActions;
+      updateServiceValidationCounter(newState, vnf['isMissingData'], false,  (<RemoveVnfInstanceAction>action).serviceId);
+      return newState;
+    }
+
+    case VNFActions.UNDO_DELETE_ACTION_VNF_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let vnf = newState.serviceInstance[(<UndoDeleteActionVnfInstanceAction>action).serviceId].vnfs[(<UndoDeleteActionVnfInstanceAction>action).vnfStoreKey];
+      let oldState = vnf.action;
+      newState.serviceInstance[(<UndoDeleteActionVnfInstanceAction>action).serviceId].vnfs[(<UndoDeleteActionVnfInstanceAction>action).vnfStoreKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
+      updateServiceValidationCounter(newState, vnf['isMissingData'], false,  (<UndoDeleteActionVnfInstanceAction>action).serviceId);
+      return newState;
+    }
+
+    case VNFActions.REMOVE_VNF_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let vnfInstance = newState.serviceInstance[(<RemoveVnfInstanceAction>action).serviceId].vnfs[(<RemoveVnfInstanceAction>action).vnfStoreKey];
+      updateServiceValidationCounter(newState, vnfInstance['isMissingData'], false,  (<RemoveVnfInstanceAction>action).serviceId);
+      delete newState.serviceInstance[(<RemoveVnfInstanceAction>action).serviceId].vnfs[(<RemoveVnfInstanceAction>action).vnfStoreKey];
+      return newState;
+    }
+
+    case VNFActions.UPDATE_VNF_POSITION : {
+      let newState = _.cloneDeep(state);
+      newState.serviceInstance[(<UpdateVnfPosition>action).instanceId].vnfs[(<UpdateVnfPosition>action).vnfStoreKey].position = (<UpdateVnfPosition>action).node.position;
+      return newState;
+    }
+  }
+}
+
+const updateServiceValidationCounter = (newState: any, oldValidationState: boolean, newValidationState: boolean, serviceUuid: string) => {
+  if (oldValidationState && !newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter--;
+  } else if (!oldValidationState && newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter++;
+  }
+};
+
+
+const updateUniqueNames = (oldName: string, newName: string, serviceInstance: ServiceInstance): void => {
+  let existingNames = serviceInstance.existingNames;
+  if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
+    delete existingNames[oldName.toLowerCase()];
+  }
+  if (!_.isNil(newName)) {
+    existingNames[newName.toLowerCase()] = "";
+  }
+};
+
+
+export const calculateNextUniqueModelName = (vnfModelName: string, serviceId: string, state: any, levelName: string): string => {
+  let counter: number = null;
+  while (true) {
+    let pattern = !_.isNil(counter) ? ("_" + counter) : "";
+    if (!_.isNil(state.serviceInstance[serviceId][levelName][vnfModelName + pattern])) {
+      counter = counter ? (counter + 1) : 1;
+    } else {
+      return vnfModelName + pattern;
+    }
+  }
+};
+
+
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.actions.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.actions.ts
new file mode 100644
index 0000000..4ed377b
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.actions.ts
@@ -0,0 +1,82 @@
+import {Action, ActionCreator} from "redux";
+import {VnfGroupInstance} from "../../../models/vnfGroupInstance";
+import {VnfMember} from "../../../models/VnfMember";
+
+export enum VnfGroupActions {
+  CREATE_VNF_GROUP_INSTANCE = "CREATE_VNF_GROUP_INSTANCE",
+  UPDATE_VNF_GROUP_INSTANCE = "UPDATE_VNF_GROUP_INSTANCE",
+  DELETE_ACTION_VNF_GROUP_INSTANCE = "DELETE_VNF_GROUP_INSTANCE",
+  UNDO_DELETE_ACTION_VNF_GROUP_INSTANCE = "UNDO_DELETE_VNF_GROUP_INSTANCE",
+  SET_OPTIONAL_MEMBERS_VNF_GROUP_INSTANCE = "SET_OPTIONAL_MEMBERS_VNF_GROUP_INSTANCE"
+}
+
+
+export interface CreateVnfGroupInstanceAction extends Action {
+  vnfGroupInstance?: VnfGroupInstance;
+  vnfGroupModelName?: string;
+  serviceUuid?: string;
+  vnfGroupStoreKey?:string;
+}
+
+export interface UpdateVnfGroupInstanceAction extends Action {
+  vnfGroupInstance?: VnfGroupInstance;
+  vnfGroupModelName?: string;
+  serviceUuid?: string;
+  vnfGroupStoreKey?:string;
+}
+
+export interface DeleteActionVnfGroupInstanceAction extends Action {
+  vnfGroupStoreKey: string;
+  serviceId?: string;
+}
+
+export interface UndoDeleteActionVnfGroupInstanceAction extends Action {
+  vnfGroupStoreKey: string;
+  serviceId?: string;
+}
+
+export interface SetOptionalMembersVnfGroupInstanceAction extends Action{
+  path?: string;
+  serviceId?: string;
+  vnfMembers?: VnfMember[]
+}
+
+export const createVnfGroupInstance: ActionCreator<CreateVnfGroupInstanceAction> = (vnfGroupInstance, vnfGroupModelName, serviceUuid, vnfGroupStoreKey) => ({
+  type: VnfGroupActions.CREATE_VNF_GROUP_INSTANCE,
+  vnfGroupInstance: vnfGroupInstance,
+  vnfGroupModelName: vnfGroupModelName,
+  serviceUuid: serviceUuid,
+  vnfGroupStoreKey : vnfGroupStoreKey
+});
+
+
+export const updateVnfGroupInstance: ActionCreator<UpdateVnfGroupInstanceAction> = (vnfGroupInstance, vnfGroupModelName, serviceUuid, vnfGroupStoreKey) => ({
+  type: VnfGroupActions.UPDATE_VNF_GROUP_INSTANCE,
+  vnfGroupInstance: vnfGroupInstance,
+  vnfGroupModelName: vnfGroupModelName,
+  serviceUuid: serviceUuid,
+  vnfGroupStoreKey : vnfGroupStoreKey
+});
+
+export const deleteActionVnfGroupInstance: ActionCreator<DeleteActionVnfGroupInstanceAction> = (vnfGroupStoreKey, serviceId) => ({
+  type: VnfGroupActions.DELETE_ACTION_VNF_GROUP_INSTANCE,
+  vnfGroupStoreKey: vnfGroupStoreKey,
+  serviceId: serviceId
+});
+
+export const undoDeleteActionVnfGroupInstance: ActionCreator<UndoDeleteActionVnfGroupInstanceAction> = (vnfGroupStoreKey, serviceId) => ({
+  type: VnfGroupActions.UNDO_DELETE_ACTION_VNF_GROUP_INSTANCE,
+  vnfGroupStoreKey: vnfGroupStoreKey,
+  serviceId: serviceId
+});
+
+export const setOptionalMembersVnfGroupInstance: ActionCreator<SetOptionalMembersVnfGroupInstanceAction> = ( serviceId: string, path: string, vnfMembers: VnfMember[]) => ({
+  type: VnfGroupActions.SET_OPTIONAL_MEMBERS_VNF_GROUP_INSTANCE,
+  path: path,
+  serviceId: serviceId,
+  vnfMembers: vnfMembers
+});
+
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.reducers.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.reducers.spec.ts
new file mode 100644
index 0000000..16c1c45
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.reducers.spec.ts
@@ -0,0 +1,140 @@
+import {VnfGroupInstance} from "../../../models/vnfGroupInstance";
+import {
+  CreateVnfGroupInstanceAction,
+  DeleteActionVnfGroupInstanceAction,
+  SetOptionalMembersVnfGroupInstanceAction,
+  UpdateVnfGroupInstanceAction,
+  VnfGroupActions
+} from "./vnfGroup.actions";
+import {vnfGroupReducer} from "./vnfGroup.reducers";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+import {VnfMember} from "../../../models/VnfMember";
+
+
+describe('vnfGroupReducer', () => {
+  test('#CREATE_VNF_GROUP_INSTANCE', () => {
+    let vnfGroupInstance: VnfGroupInstance = new VnfGroupInstance();
+    vnfGroupInstance.isMissingData = false;
+    vnfGroupInstance.instanceName = 'instanceName';
+    let vnfGroupState = vnfGroupReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfGroups : {
+
+            }
+          }
+        }},
+      <CreateVnfGroupInstanceAction>{
+        type: VnfGroupActions.CREATE_VNF_GROUP_INSTANCE,
+        vnfGroupInstance : vnfGroupInstance,
+        vnfGroupStoreKey : null,
+        vnfGroupModelName : 'vnfGroupModelName',
+        serviceUuid : 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfGroups['vnfGroupModelName'];
+
+    expect(vnfGroupState).toBeDefined();
+    expect(vnfGroupState.isMissingData).toBeFalsy();
+  });
+
+  test('#UPDATE_VNF_GROUP_INSTANCE', () => {
+    let vnfGroupInstance: VnfGroupInstance = new VnfGroupInstance();
+    vnfGroupInstance.isMissingData = false;
+    vnfGroupInstance.instanceName = 'instanceName';
+    let vnfGroupState = vnfGroupReducer(<any>{serviceInstance : {
+        'serviceModelId' : {
+          vnfGroups : {
+            'vnfGroupStoreKey' : {
+              isMissingData : true
+            }
+          }
+        }
+      }},
+      <UpdateVnfGroupInstanceAction>{
+        type: VnfGroupActions.UPDATE_VNF_GROUP_INSTANCE,
+        vnfGroupInstance : new VnfGroupInstance(),
+        vnfGroupStoreKey : 'vnfGroupStoreKey',
+        vnfGroupModelName : 'vnfGroupModelName',
+        serviceUuid : 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfGroups['vnfGroupStoreKey'];
+
+    expect(vnfGroupState).toBeDefined();
+    expect(vnfGroupState.isMissingData).toBeFalsy();
+  });
+
+  test('#DELETE_ACTION_VNF_GROUP_INSTANCE', () => {
+    let vnfGroupInstance: VnfGroupInstance = new VnfGroupInstance();
+    vnfGroupInstance.isMissingData = false;
+    vnfGroupInstance.instanceName = 'instanceName';
+    vnfGroupInstance.action = ServiceInstanceActions.None;
+    let vnfGroupState = vnfGroupReducer(<any>{serviceInstance : {
+        'serviceModelId' : {
+          vnfGroups : {
+            'vnfGroupStoreKey' : {
+              isMissingData : true,
+              action : 'None'
+            }
+          }
+        }
+      }},
+      <DeleteActionVnfGroupInstanceAction>{
+        type: VnfGroupActions.DELETE_ACTION_VNF_GROUP_INSTANCE,
+        vnfGroupStoreKey: 'vnfGroupStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfGroups['vnfGroupStoreKey'];
+
+    expect(vnfGroupState).toBeDefined();
+    expect(vnfGroupState.action).toEqual(ServiceInstanceActions.None_Delete);
+  });
+
+  test('#UNDO_DELETE_ACTION_VNF_GROUP_INSTANCE', () => {
+    let vnfGroupInstance: VnfGroupInstance = new VnfGroupInstance();
+    vnfGroupInstance.isMissingData = false;
+    vnfGroupInstance.instanceName = 'instanceName';
+    vnfGroupInstance.action = ServiceInstanceActions.None_Delete;
+    let vnfGroupState = vnfGroupReducer(<any>{serviceInstance : {
+          'serviceModelId' : {
+            vnfGroups : {
+              'vnfGroupStoreKey' : {
+                isMissingData : true,
+                action : 'None_Delete'
+              }
+            }
+          }
+        }},
+      <DeleteActionVnfGroupInstanceAction>{
+        type: VnfGroupActions.UNDO_DELETE_ACTION_VNF_GROUP_INSTANCE,
+        vnfGroupStoreKey: 'vnfGroupStoreKey',
+        serviceId: 'serviceModelId'
+      }).serviceInstance['serviceModelId'].vnfGroups['vnfGroupStoreKey'];
+
+    expect(vnfGroupState).toBeDefined();
+    expect(vnfGroupState.action).toEqual(ServiceInstanceActions.None);
+  });
+
+  test('#SET_OPTIONAL_MEMBERS_VNF_GROUP_INSTANCE', () => {
+    let vnf1: VnfMember = new VnfMember();
+    vnf1.serviceInstanceId = 'aa';
+    vnf1.instanceId = 'aaa';
+    let vnf2: VnfMember = new VnfMember();
+    vnf2.serviceInstanceId = 'bb';
+    vnf2.instanceId = 'bbb';
+    let optionalGroupMembersMap = vnfGroupReducer(<any>{
+        serviceInstance: {
+          'serviceModelId': {
+            optionalGroupMembersMap : {}
+          }
+        }
+      },
+      <SetOptionalMembersVnfGroupInstanceAction>{
+        type: VnfGroupActions.SET_OPTIONAL_MEMBERS_VNF_GROUP_INSTANCE,
+        path: 'path1',
+        serviceId: 'serviceModelId',
+        vnfMembers: [vnf1, vnf2]
+      }).serviceInstance['serviceModelId'].optionalGroupMembersMap;
+
+    optionalGroupMembersMap['path1']= [vnf1, vnf2];
+    expect(optionalGroupMembersMap).toEqual({'path1':[vnf1, vnf2]});
+  });
+});
+
+
+
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.reducers.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.reducers.ts
new file mode 100644
index 0000000..2923c09
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/storeUtil/utils/vnfGroup/vnfGroup.reducers.ts
@@ -0,0 +1,108 @@
+import {Action} from "redux";
+import {VnfGroupInstance} from "../../../models/vnfGroupInstance";
+import * as _ from "lodash";
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {ServiceState} from "../main.reducer";
+import {
+  CreateVnfGroupInstanceAction,
+  DeleteActionVnfGroupInstanceAction, SetOptionalMembersVnfGroupInstanceAction,
+  UpdateVnfGroupInstanceAction,
+  VnfGroupActions
+} from "./vnfGroup.actions";
+import {ServiceInstanceActions} from "../../../models/serviceInstanceActions";
+
+export function vnfGroupReducer(state: ServiceState, action: Action): ServiceState {
+  switch (action.type) {
+    case VnfGroupActions.CREATE_VNF_GROUP_INSTANCE: {
+      const updateVnfGroupInstanceAction = <CreateVnfGroupInstanceAction>action;
+      const serviceUuid = updateVnfGroupInstanceAction.serviceUuid;
+      let vnfGroupModelName = updateVnfGroupInstanceAction.vnfGroupModelName;
+      let newState = _.cloneDeep(state);
+
+      updateVnfGroupInstanceAction.vnfGroupInstance.originalName = vnfGroupModelName;
+      updateVnfGroupInstanceAction.vnfGroupModelName = calculateNextUniqueModelName(vnfGroupModelName, serviceUuid, newState, 'vnfGroups');
+
+      let vnfGroupInstance: VnfGroupInstance = newState.serviceInstance[serviceUuid].vnfGroups[vnfGroupModelName];
+      vnfGroupInstance = new VnfGroupInstance();
+      updateVnfGroupInstanceAction.vnfGroupInstance.vnfGroupStoreKey = updateVnfGroupInstanceAction.vnfGroupModelName;
+      updateVnfGroupInstanceAction.vnfGroupInstance.originalName = vnfGroupModelName;
+      vnfGroupInstance.originalName = updateVnfGroupInstanceAction.vnfGroupInstance.originalName;
+      vnfGroupInstance.vnfGroupStoreKey = updateVnfGroupInstanceAction.vnfGroupInstance.vnfGroupStoreKey;
+      updateServiceValidationCounter(newState, vnfGroupInstance['isMissingData'], updateVnfGroupInstanceAction.vnfGroupInstance['isMissingData'], serviceUuid);
+
+      newState.serviceInstance[serviceUuid].vnfGroups[updateVnfGroupInstanceAction.vnfGroupModelName] = Object.assign(vnfGroupInstance, updateVnfGroupInstanceAction.vnfGroupInstance);
+      return newState;
+    }
+    case VnfGroupActions.UPDATE_VNF_GROUP_INSTANCE: {
+      const updateVnfInstanceAction = <UpdateVnfGroupInstanceAction>action;
+      const serviceUuid = updateVnfInstanceAction.serviceUuid;
+      let vnfGroupStoreKey = updateVnfInstanceAction.vnfGroupStoreKey;
+
+
+      let newState = _.cloneDeep(state);
+      let vnfGroupInstance: VnfGroupInstance = newState.serviceInstance[serviceUuid].vnfGroups[vnfGroupStoreKey];
+      updateUniqueNames(vnfGroupInstance ? vnfGroupInstance.instanceName : null, updateVnfInstanceAction.vnfGroupInstance.instanceName, newState.serviceInstance[serviceUuid]);
+
+      vnfGroupInstance = vnfGroupInstance || new VnfGroupInstance();
+      updateServiceValidationCounter(newState, vnfGroupInstance['isMissingData'], updateVnfInstanceAction.vnfGroupInstance['isMissingData'], serviceUuid);
+
+      newState.serviceInstance[serviceUuid].vnfGroups[vnfGroupStoreKey] = Object.assign(vnfGroupInstance, updateVnfInstanceAction.vnfGroupInstance);
+      return newState;
+    }
+    case VnfGroupActions.DELETE_ACTION_VNF_GROUP_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let oldAction = newState.serviceInstance[(<DeleteActionVnfGroupInstanceAction>action).serviceId].vnfGroups[(<DeleteActionVnfGroupInstanceAction>action).vnfGroupStoreKey].action;
+      if(oldAction === ServiceInstanceActions.None_Delete || oldAction === ServiceInstanceActions.Update_Delete) return newState;
+      newState.serviceInstance[(<DeleteActionVnfGroupInstanceAction>action).serviceId].vnfGroups[(<DeleteActionVnfGroupInstanceAction>action).vnfGroupStoreKey].action = (oldAction + '_Delete') as ServiceInstanceActions;
+      return newState;
+    }
+    case VnfGroupActions.UNDO_DELETE_ACTION_VNF_GROUP_INSTANCE : {
+      let newState = _.cloneDeep(state);
+      let oldState = newState.serviceInstance[(<DeleteActionVnfGroupInstanceAction>action).serviceId].vnfGroups[(<DeleteActionVnfGroupInstanceAction>action).vnfGroupStoreKey].action;
+      newState.serviceInstance[(<DeleteActionVnfGroupInstanceAction>action).serviceId].vnfGroups[(<DeleteActionVnfGroupInstanceAction>action).vnfGroupStoreKey].action = (oldState.split('_')[0]) as ServiceInstanceActions;
+      return newState;
+    }
+    case VnfGroupActions.SET_OPTIONAL_MEMBERS_VNF_GROUP_INSTANCE:{
+      let newState = _.cloneDeep(state);
+      newState.serviceInstance[(<SetOptionalMembersVnfGroupInstanceAction>action).serviceId].optionalGroupMembersMap[(<SetOptionalMembersVnfGroupInstanceAction>action).path] = (<SetOptionalMembersVnfGroupInstanceAction>action).vnfMembers;
+      return newState;
+    }
+  }
+}
+
+const updateServiceValidationCounter = (newState: any, oldValidationState: boolean, newValidationState: boolean, serviceUuid: string) => {
+  if (oldValidationState && !newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter--;
+  } else if (!oldValidationState && newValidationState) {
+    newState.serviceInstance[serviceUuid].validationCounter++;
+  }
+};
+
+
+const updateUniqueNames = (oldName: string, newName: string, serviceInstance: ServiceInstance): void => {
+  let existingNames = serviceInstance.existingNames;
+  if (!_.isNil(oldName) && oldName.toLowerCase() in existingNames) {
+    delete existingNames[oldName.toLowerCase()];
+  }
+  if (!_.isNil(newName)) {
+    existingNames[newName.toLowerCase()] = "";
+  }
+};
+
+
+export const calculateNextUniqueModelName = (vnfGroupModelName: string, serviceId: string, state: any, levelName: string): string => {
+  let counter: number = null;
+  while (true) {
+    let pattern = !_.isNil(counter) ? ("_" + counter) : "";
+    if (!_.isNil(state.serviceInstance[serviceId][levelName][vnfGroupModelName + pattern])) {
+      counter = counter ? (counter + 1) : 1;
+    } else {
+      return vnfGroupModelName + pattern;
+    }
+  }
+};
+
+
+
+
+
diff --git a/vid-webpack-master/src/app/shared/utils/constants.ts b/vid-webpack-master/src/app/shared/utils/constants.ts
index c78e12e..f69517c 100644
--- a/vid-webpack-master/src/app/shared/utils/constants.ts
+++ b/vid-webpack-master/src/app/shared/utils/constants.ts
@@ -34,9 +34,10 @@
     public static AAI_GET_SERVICES_BY_TYPE = 'aai_get_models_by_service_type';
     public static AAI_GET_TENANTS = '../../aai_get_tenants/';
     public static AAI_SUB_DETAILS_PATH = '../../aai_sub_details/';
+    public static AAI_GET_SERVICE_INSTANCE_TOPOLOGY_PATH = '../../aai_get_service_instance_topology/';
+    public static AAI_GET_SERVICE_GROUP_MEMBERS_PATH = '../../aai_search_group_members/';
     public static AAI_GET_VERSION_BY_INVARIANT_ID = 'aai_get_version_by_invariant_id/';
     public static SEARCH_SERVICE_INSTANCES = 'search_service_instances';
-    public static AAI_GET_VNF_DATA_PATH = 'aai_get_vnf_data/';
     public static AAI_GET_VNF_BY_CUSTOMERID_AND_SERVICETYPE = 'get_vnf_data_by_globalid_and_service_type/';
     public static AAI_GET_SERVICES_BY_OWNING_ENTITY_ID = 'aai_get_services_by_owning_entity_id';
     public static AAI_GET_VNF_INFO = 'aai_get_vnf_information';
@@ -87,10 +88,12 @@
     public static WELCOME_PATH = 'welcome.htm';
     public static IS_PERMITTED_SUB_PATH = '&isPermitted=';
     public static SERVICES_JOB_INFO_PATH = '../../asyncInstantiation';
+    public static SERVICES_RETRY_TOPOLOGY = '../../asyncInstantiation/bulkForRetry';
     public static CONFIGURATION_PATH = '../../get_property/{name}/defaultvalue';
     public static SERVICES_JOB_AUDIT_PATH = '/auditStatus';
     public static SERVICES_PROBE_PATH = "../../probe";
     public static FEATURES_FLAG_PATH ="../../flags";
+    public static AUDIT_STATUS_FOR_RETRY_PATH = '../../asyncInstantiation/auditStatusForRetry';
 
     // Test Environment Urls =
     public static OPERATIONAL_ENVIRONMENT_CREATE = 'operationalEnvironment/create';
@@ -284,4 +287,8 @@
   export class AuditInfoModal{
     public static TITLE = 'Service Instantiation Information';
   }
+
+  export class LegacyRegion {
+    public static MEGA_REGION = ['JANET25'];
+  }
 }
diff --git a/vid-webpack-master/src/app/shared/utils/httpInterceptor/httpInterceptor.service.ts b/vid-webpack-master/src/app/shared/utils/httpInterceptor/httpInterceptor.service.ts
index be9ade0..daa31a3 100644
--- a/vid-webpack-master/src/app/shared/utils/httpInterceptor/httpInterceptor.service.ts
+++ b/vid-webpack-master/src/app/shared/utils/httpInterceptor/httpInterceptor.service.ts
@@ -1,19 +1,19 @@
-import { Injectable } from '@angular/core';
-import {
-  HttpInterceptor,
-  HttpRequest,
-  HttpHandler,
-  HttpEvent, HttpErrorResponse
-} from '@angular/common/http';
+import {Injectable} from '@angular/core';
+import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';
 
-import { Observable } from 'rxjs/Observable';
-import { ErrorMessage, ErrorService } from '../../components/error/error.component.service';
-import { SpinnerComponent } from '../../components/spinner/spinner.component';
+import {Observable} from 'rxjs';
+import {ErrorMessage, ErrorService} from '../../components/error/error.component.service';
+import {SpinnerComponent, SpinnerInfo} from '../../components/spinner/spinner.component';
+import {of} from "rxjs";
 
 @Injectable()
 export class HttpInterceptorService implements HttpInterceptor {
   intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
-    SpinnerComponent.showSpinner.next(true);
+    if (request.headers.get('x-show-spinner') !== false.toString()) {
+      let spinnerInfo : SpinnerInfo = new SpinnerInfo(true, request.url, request.responseType);
+      SpinnerComponent.showSpinner.next(spinnerInfo);
+    }
+
     return next.handle(request)
       .catch((err: HttpErrorResponse) => {
         if (err.status === 500) {
@@ -21,11 +21,12 @@
             'It appears that one of the backend servers is not responding.\n Please try later.',
             500);
           ErrorService.showErrorWithMessage(errorMessage);
-          return Observable.of(null);
+          return of(null);
         }
         return Observable.throw(err);
       }).finally(() => {
-        SpinnerComponent.showSpinner.next(false);
+        let spinnerInfo : SpinnerInfo = new SpinnerInfo(false, request.url, request.responseType);
+        SpinnerComponent.showSpinner.next(spinnerInfo);
       });
   }
 }
diff --git a/vid-webpack-master/src/app/shared/utils/log/log.service.spec.ts b/vid-webpack-master/src/app/shared/utils/log/log.service.spec.ts
index ea0eb04..15a840f 100644
--- a/vid-webpack-master/src/app/shared/utils/log/log.service.spec.ts
+++ b/vid-webpack-master/src/app/shared/utils/log/log.service.spec.ts
@@ -1,16 +1,24 @@
 
 
 import {LogService} from "./log.service";
+import {TestBed} from "@angular/core/testing";
 
 describe('log service service', () => {
+
   let logService : LogService;
 
-  beforeEach(() => {
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+
+    });
+    await TestBed.compileComponents();
     logService = new LogService();
-  });
 
 
-  it('check all ILogger function are defined', ()=>{
+  })().then(done).catch(done.fail));
+
+
+  test('check all ILogger function are defined', ()=>{
     expect(logService.log).toBeDefined();
     expect(logService.assert).toBeDefined();
     expect(logService.error).toBeDefined();
@@ -20,10 +28,40 @@
     expect(logService.warn).toBeDefined();
   });
 
-  it('test getPrefixLog function', ()=> {
+  test('test getPrefixLog function: with data', ()=> {
     let args = ['message', [1,2,3,4,5]];
     let result  = LogService.getPrefixLog(args);
     expect(result).toBeDefined();
   });
 
+  test('log assert', ()=> {
+    jest.spyOn(console, 'assert');
+    logService.assert('someArg');
+    expect(console.assert).toHaveBeenCalled();
+  });
+
+  test('log group', ()=> {
+    jest.spyOn(console, 'group');
+    logService.group('someArg');
+    expect(console.group).toHaveBeenCalled();
+  });
+
+  test('log groupEnd', ()=> {
+    jest.spyOn(console, 'groupEnd');
+    logService.groupEnd('someArg');
+    expect(console.groupEnd).toHaveBeenCalled();
+  });
+
+  test('log log', ()=> {
+    jest.spyOn(console, 'log');
+    logService.log('someArg');
+    expect(console.log).toHaveBeenCalled();
+  });
+
+  test('log warn', ()=> {
+    spyOn(console, 'warn');
+    logService.warn('someArg');
+    expect(console.warn).toHaveBeenCalled();
+  });
+
 });
diff --git a/vid-webpack-master/src/app/shared/utils/util.spec.ts b/vid-webpack-master/src/app/shared/utils/util.spec.ts
new file mode 100644
index 0000000..2f9142f
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/utils/util.spec.ts
@@ -0,0 +1,31 @@
+import {Utils} from "./utils";
+import {TestBed} from "@angular/core/testing";
+
+
+describe('Util', () => {
+  let util: Utils;
+
+  beforeAll(done => (async () => {
+    TestBed.configureTestingModule({
+
+    });
+    await TestBed.compileComponents();
+
+    util = new Utils();
+
+  })().then(done).catch(done.fail));
+
+  test('should be defined', () => {
+    expect(util).toBeDefined();
+  });
+
+  test('hasContents should return false if object is undefined or null or empty', () => {
+    expect(Utils.hasContents(undefined)).toBeFalsy();
+    expect(Utils.hasContents(null)).toBeFalsy();
+    expect(Utils.hasContents("")).toBeFalsy();
+  });
+
+  test('hasContents should return true if object is not undefined and not null and not empty', () => {
+    expect(Utils.hasContents("someValue")).toBeTruthy();
+  });
+});
diff --git a/vid-webpack-master/src/app/shared/utils/utils.ts b/vid-webpack-master/src/app/shared/utils/utils.ts
new file mode 100644
index 0000000..d63a3c9
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/utils/utils.ts
@@ -0,0 +1,267 @@
+import * as _ from 'lodash'
+
+export class Utils {
+
+  public static clampNumber = (number, min, max) => {
+    return Math.max(min, Math.min(number, max));
+  };
+
+  public static hasContents(object: Object): boolean {
+    if (object === undefined || object === null || object === "") {
+      return false;
+    }
+    return true;
+  };
+
+  public static convertModel(serviceModel) {
+
+    let isNewFlow:boolean = false;
+
+    for (let networkCustomizationName in serviceModel.networks) {
+      let networkModel = serviceModel.networks[networkCustomizationName];
+      if ( networkModel.customizationUuid != null ) {
+        isNewFlow = true;
+        break;
+      }
+    }
+    if ( !isNewFlow ) {
+      for (let vnfCustomizationName in serviceModel.vnfs) {
+        let vnfModel = serviceModel.vnfs[vnfCustomizationName];
+        if ( vnfModel.customizationUuid != null ) {
+          isNewFlow = true;
+          break;
+        }
+      }
+    }
+    if ( isNewFlow ) {
+      return (Utils.convertNewModel (serviceModel) );
+    }
+    else {
+      return (Utils.convertOldModel (serviceModel) );
+    }
+  };
+
+  private static convertNewModel (serviceModel ) {
+    let completeResources = new Array();
+    let resource = {};
+    let convertedAsdcModel = {
+      "service": serviceModel.service,
+      "networks": {},
+      "vnfs": {},
+      "pnfs": serviceModel.pnfs,
+      "serviceProxies": serviceModel.serviceProxies,
+      "completeDisplayInputs": {},
+      "isNewFlow": true
+    };
+
+    for(let key in serviceModel.service.inputs) {
+      if(_.includes(["instance_node_target", "naming_policy", "vf_instance_name"], key)) {
+        delete convertedAsdcModel.service.inputs[key];
+      }
+    }
+
+    for (let networkCustomizationName in serviceModel.networks) {
+      let networkModel = serviceModel.networks[networkCustomizationName];
+
+      convertedAsdcModel.networks[networkModel.customizationUuid] = {
+        "uuid": networkModel.uuid,
+        "invariantUuid": networkModel.invariantUuid,
+        "version": networkModel.version,
+        "name": networkModel.name,
+        "modelCustomizationName": networkModel.modelCustomizationName,
+        "customizationUuid": networkModel.customizationUuid,
+        "inputs": "",
+        "description": networkModel.description,
+        "commands": {},
+        "displayInputs": {}
+      };
+
+      resource = {
+        "name": networkModel.modelCustomizationName,
+        "description": networkModel.description
+      };
+
+      completeResources.push (resource);
+
+    }
+
+    _.forEach(serviceModel.configurations, function(element) {
+      element.isConfig = true;
+    });
+    _.forEach(serviceModel.pnfs, function(element, key) {
+      element.isPnf= true;
+      element.modelCustomizationName= key;
+    });
+    let mergedVnfs = Object.assign(serviceModel.vnfs, serviceModel.configurations, serviceModel.pnfs);
+
+    for (let vnfCustomizationName in mergedVnfs) {
+      let vnfModel = mergedVnfs[vnfCustomizationName];
+      let vnfCustomizationUuid = vnfModel.customizationUuid;
+      convertedAsdcModel.vnfs[vnfModel.customizationUuid] = {
+        "uuid": vnfModel.uuid,
+        "invariantUuid": vnfModel.invariantUuid,
+        "version": vnfModel.version,
+        "name": vnfModel.name,
+        "modelCustomizationName": vnfModel.modelCustomizationName,
+        "customizationUuid": vnfModel.customizationUuid,
+        "inputs": "",
+        "description": vnfModel.description,
+        "vfModules": {},
+        "volumeGroups": {},
+        "commands": {},
+        "displayInputs": {},
+        "properties": {},
+        "nfRole": "",
+        "nfType": "",
+        "sourceNodes": vnfModel.sourceNodes,
+        "collectorNodes": vnfModel.collectorNodes,
+        "isConfigurationByPolicy": vnfModel.configurationByPolicy ? vnfModel.configurationByPolicy : false,
+        "isConfig": vnfModel.isConfig ? vnfModel.isConfig : false,
+        "isPnf": vnfModel.isPnf ? vnfModel.isPnf : false
+      };
+
+      resource = {
+        "name": vnfModel.modelCustomizationName,
+        "description": vnfModel.description
+      };
+      completeResources.push (resource);
+
+      if (vnfModel.commands != null) {
+        /*
+                 * commands: {
+                 *  internal_net_param_ntu: {
+                 * 		command: get_input,
+                 * 		displaName: internal_net_param_ntu,
+                 * 		inputName: vccfd1_internal_net_param_ntu // pointer to input key
+                 * }
+                 * If the input name (ptr) is one of instance_node_target,  naming_policy or vf_instance_name
+                 * then ignore it
+                 *
+                 */
+
+        convertedAsdcModel.vnfs[vnfCustomizationUuid].properties=vnfModel.properties;
+        //
+        let vnf_type = "";
+        let vnf_role = "";
+        let vnf_function = "";
+        let vnf_code = "";
+        if ( !( _.isEmpty(vnfModel.properties) ) ) {
+          if (this.hasContents (vnfModel.properties.nf_type) ) {
+            vnf_type = vnfModel.properties.nf_type;
+          }
+          if (this.hasContents (vnfModel.properties.nf_role) ) {
+            vnf_role = vnfModel.properties.nf_role;
+          }
+          if (this.hasContents (vnfModel.properties.nf_function) ) {
+            vnf_function = vnfModel.properties.nf_function;
+          }
+          if (this.hasContents (vnfModel.properties.nf_naming_code) ) {
+            vnf_code = vnfModel.properties.nf_naming_code;
+          }
+        }
+        convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfType"] = vnf_type;
+        convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfRole"] = vnf_role;
+        convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfFunction"] = vnf_function;
+        convertedAsdcModel.vnfs[vnfCustomizationUuid]["nfCode"] = vnf_code;
+        //
+        for (let vfModuleCustomizationName in serviceModel.vnfs[vnfCustomizationName].vfModules) {
+          let vfModuleModel = serviceModel.vnfs[vnfCustomizationName].vfModules[vfModuleCustomizationName];
+          convertedAsdcModel.vnfs[vnfCustomizationUuid].vfModules[vfModuleModel.customizationUuid] = vfModuleModel;
+        }
+
+        for (let volumeGroupCustomizationName in serviceModel.vnfs[vnfCustomizationName].volumeGroups) {
+          let volumeGroupModel = serviceModel.vnfs[vnfCustomizationName].volumeGroups[volumeGroupCustomizationName];
+          convertedAsdcModel.vnfs[vnfCustomizationUuid].volumeGroups[volumeGroupModel.customizationUuid] = volumeGroupModel;
+        }
+      }
+    }
+
+    return (convertedAsdcModel);
+  };
+
+  private static convertOldModel(serviceModel ) {
+    let resource = {};
+    let convertedAsdcModel = {
+      "service": serviceModel.service,
+      "networks": {},
+      "vnfs": {},
+      "pnfs": serviceModel.pnfs,
+      "serviceProxies": serviceModel.serviceProxies,
+      "completeDisplayInputs": {},
+      "isNewFlow": false
+    };
+    let completeResources = new Array();
+    for (let networkCustomizationName in serviceModel.networks) {
+      let networkModel = serviceModel.networks[networkCustomizationName];
+      convertedAsdcModel.networks[networkModel.invariantUuid] = {};
+      convertedAsdcModel.networks[networkModel.uuid] = {
+        "uuid": networkModel.uuid,
+        "invariantUuid": networkModel.invariantUuid,
+        "version": networkModel.version,
+        "name": networkModel.name,
+        "modelCustomizationName": networkModel.modelCustomizationName,
+        "customizationUuid": networkModel.customizationUuid,
+        "inputs": "",
+        "description": networkModel.description,
+        "commands": {},
+        "displayInputs": {}
+      };
+      resource = {
+        "name": networkModel.modelCustomizationName,
+        "description": networkModel.description
+      };
+      completeResources.push (resource);
+    }
+
+    _.forEach(serviceModel.configurations, function(element) {
+      element.isConfig = true;
+    });
+    _.forEach(serviceModel.pnfs, function(element, key) {
+      element.isPnf= true;
+      element.modelCustomizationName= key;
+    });
+    let mergedVnfs = Object.assign(serviceModel.vnfs, serviceModel.configurations, serviceModel.pnfs);
+
+    for (let vnfCustomizationName in mergedVnfs) {
+      let vnfModel = mergedVnfs[vnfCustomizationName];
+      convertedAsdcModel.vnfs[vnfModel.uuid] = {
+        "uuid": vnfModel.uuid,
+        "invariantUuid": vnfModel.invariantUuid,
+        "version": vnfModel.version,
+        "name": vnfModel.name,
+        "modelCustomizationName": vnfModel.modelCustomizationName,
+        "customizationUuid": vnfModel.customizationUuid,
+        "inputs": "",
+        "description": vnfModel.description,
+        "vfModules": {},
+        "volumeGroups": {},
+        "commands": {},
+        "displayInputs": {},
+        "sourceNodes": vnfModel.sourceNodes,
+        "collectorNodes": vnfModel.collectorNodes,
+        "isConfigurationByPolicy": vnfModel.configurationByPolicy ? vnfModel.configurationByPolicy : false,
+        "isConfig": vnfModel.isConfig ? vnfModel.isConfig : false,
+        "isPnf": vnfModel.isPnf ? vnfModel.isPnf : false
+      };
+      resource = {
+        "name": vnfModel.modelCustomizationName,
+        "description": vnfModel.description
+      };
+      completeResources.push (resource);
+
+      for (let vfModuleCustomizationName in serviceModel.vnfs[vnfCustomizationName].vfModules) {
+        let vfModuleModel = serviceModel.vnfs[vnfCustomizationName].vfModules[vfModuleCustomizationName];
+        convertedAsdcModel.vnfs[vnfModel.uuid].vfModules[vfModuleModel.uuid] = vfModuleModel;
+      }
+
+      for (let volumeGroupCustomizationName in serviceModel.vnfs[vnfCustomizationName].volumeGroups) {
+        let volumeGroupModel = serviceModel.vnfs[vnfCustomizationName].volumeGroups[volumeGroupCustomizationName];
+        convertedAsdcModel.vnfs[vnfModel.uuid].volumeGroups[volumeGroupModel.uuid] = volumeGroupModel;
+      }
+    }
+
+    let completeDisplayInputs = {};
+
+    return (convertedAsdcModel);
+  };
+}
diff --git a/vid-webpack-master/src/app/shared/validators/uniqueName/uniqueName.validator.spec.ts b/vid-webpack-master/src/app/shared/validators/uniqueName/uniqueName.validator.spec.ts
new file mode 100644
index 0000000..35d3c48
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/validators/uniqueName/uniqueName.validator.spec.ts
@@ -0,0 +1,41 @@
+import {FormControl, ValidatorFn} from "@angular/forms";
+import {CustomValidators} from "./uniqueName.validator";
+import {FileUnit} from "../../components/formControls/component/file/fileUnit.enum";
+
+
+describe('Custom Validator Functions', () => {
+  test('isValidJson Validator should return null when value is valid and correct object when invalid', () => {
+
+    let isValidJsonFunction: ValidatorFn = CustomValidators.isValidJson();
+
+    expect(isValidJsonFunction(new FormControl("{ 'key': 'value', 'array': ['first',]}"))).toEqual({ isValidJson: true });
+
+    expect(isValidJsonFunction(new FormControl('{ "key": "value", "array": ["first"]'))).toEqual({ isValidJson: true });
+
+    expect(isValidJsonFunction(new FormControl('{ "key": "value", "array": ["first"]}'))).toEqual(null);
+
+    expect(isValidJsonFunction(new FormControl('{ "key": "value", "array": "first"}'))).toEqual(null);
+  });
+
+  test('isStringContainTags Validator should return null when value is valid and correct object when invalid', () => {
+
+    const isStringContainTagsFunction: ValidatorFn = CustomValidators.isStringContainTags();
+
+    expect(isStringContainTagsFunction(new FormControl('<asdf>'))).toEqual({isStringContainTags : true});
+
+    expect(isStringContainTagsFunction(new FormControl('1234<asfd56'))).toEqual(null);
+  });
+
+  test('isFileTooBig Validator should return null when value is valid and correct object when invalid', () => {
+
+    let isFileTooBigFunction: ValidatorFn = CustomValidators.isFileTooBig(FileUnit.MB, 5);
+
+    expect(isFileTooBigFunction(new FormControl({ size: 6000001 }))).toEqual({ isFileTooBig: true });
+
+    expect(isFileTooBigFunction(new FormControl({ size: 4000000}))).toEqual(null);
+
+    isFileTooBigFunction = CustomValidators.isFileTooBig(FileUnit.B, 5);
+
+    expect(isFileTooBigFunction(new FormControl({ size: 4000000}))).toEqual({ isFileTooBig: true });
+  })
+});
diff --git a/vid-webpack-master/src/app/shared/validators/uniqueName/uniqueName.validator.ts b/vid-webpack-master/src/app/shared/validators/uniqueName/uniqueName.validator.ts
new file mode 100644
index 0000000..4d3e383
--- /dev/null
+++ b/vid-webpack-master/src/app/shared/validators/uniqueName/uniqueName.validator.ts
@@ -0,0 +1,100 @@
+import {AbstractControl, ValidatorFn} from "@angular/forms";
+import {Injectable} from "@angular/core";
+import {NgRedux} from "@angular-redux/store";
+import {AppState} from "../../store/reducers";
+import {FileUnit} from "../../components/formControls/component/file/fileUnit.enum";
+import * as _ from 'lodash';
+
+@Injectable()
+export class CustomValidators {
+  static uniqueInstanceNameValidator(...args): ValidatorFn {
+    const store : NgRedux<AppState> = args[0];
+    const serviceId : string = args[1];
+    const originalName : string = args[2];
+    return (control: AbstractControl): {[key: string]: any} | null => {
+      const name = control.value;
+      if(name && name !== originalName) {
+        const result: boolean = CustomValidators.isUnique(store.getState().service.serviceInstance, serviceId, name, name === originalName);
+        if(!result){
+          return {
+            uniqueInstanceNameValidator : true
+          };
+        }else {
+          return null;
+        }
+      }
+      return null;
+    };
+  }
+
+  static isUnique(serviceInstance : any, serviceId : string, name: string, isEqualToOriginalInstanceName : boolean) : boolean {
+    const service = serviceInstance[serviceId];
+    if(service){
+      const existingNames = service.existingNames;
+      if(_.includes(existingNames, name)) return false;
+    }
+    return true;
+  }
+
+  static isStringContainHtmlTag(str: string): boolean{
+    var regex = RegExp("<[^>]*>");
+    return regex.test(str);
+  }
+
+  static isValidJson() : ValidatorFn {
+    return (control: AbstractControl): {[key: string]: any} | null => {
+      const content = control.value;
+      let invalid: boolean = false;
+      if (content)  {
+        try {
+          JSON.parse(content);
+        } catch (e) {
+          invalid = true;
+        }
+      }
+      return (invalid) ? {isValidJson : true} : null;
+    }
+  }
+
+  static isStringContainTags() : ValidatorFn {
+    return (control: AbstractControl): {[key: string]: any} | null => {
+      const content = control.value;
+      let invalid: boolean = false;
+      if (content)  {
+          invalid = CustomValidators.isStringContainHtmlTag(content);
+      }
+      return (invalid) ? {isStringContainTags : true} : null;
+    }
+  }
+
+  static isFileTooBig(...args) : ValidatorFn {
+    const unit : FileUnit = args[0];
+    const size : number = args[1];
+    return (control: AbstractControl): {[key: string]: any} | null => {
+      const file = control.value;
+      let sizeToByte: number;
+      if (file) {
+        switch (unit)  {
+          case FileUnit.b:
+            sizeToByte = 1/8;
+            break;
+          case FileUnit.B:
+            sizeToByte = 1;
+            break;
+          case FileUnit.KB:
+            sizeToByte = 1000;
+            break;
+          case FileUnit.MB:
+            sizeToByte = 1000000;
+            break;
+          default:
+            sizeToByte = 0;
+            break;
+
+        }
+        return (file.size > (sizeToByte * size)) ? {isFileTooBig: true} : null;
+      }
+      return null;
+    }
+  }
+}